试图找出一个可以执行以下操作的宏:
1) 查找指定标题(即:“status”) 2) 将此列过滤为指定值(即:“discontinued”) 3) 过滤后,查找另一个指定列(即:“替换为”)
对我来说,挑战是我不知道如何设置它,所以“字段”列对于其所在的工作表是可变的。
我有多个文件在不同的位置具有“状态”标题,(一个文件在 c 列中,另一个在 f 列中,等等)。有没有办法让excel找到每张工作表中的特定列并过滤它?
查找指定的标头
您将完全按照您在“查找特定标题”时下意识地在脑海中执行此操作:从左到右迭代所有列,直到找到它,......当它不存在时抛出一个合适的。该函数应该足够通用,不能附加到任何特定的工作表,因此您应该将工作表作为参数传递给它。
像这样的东西:
'returns column number of specified header, or -1 if not found.
Public Function FindHeader(sheet As Worksheet, header As String) As Integer
...
End Function
找到您的标题行,然后遍历非空单元格。您的退出条件可能是您已经迭代了标题行中的所有非空单元格,或者您找到了一个与您正在寻找的内容相匹配的单元格。当循环退出时,你需要知道两件事:是否找到了标题,如果找到了,在哪一列下。
过滤此列以获取指定值
你没有说值是如何指定的,所以我假设你只需要Sub
一个Integer
用于过滤标题列的String
参数,以及一个用于过滤值的参数。使用AutoFilter
-related 方法应该可以帮助您。同样,您希望能够将此代码用于任何工作表,因此将其作为参数传递:
Public Sub FilterForSpecificValue(sheet As Worksheet, columnIndex As Integer, filter As String)
...
End Sub
查找另一个指定的列
好吧,只需重用 #1 中的函数,将同一张表与另一个列标题一起传递给它:
result = FindHeader(ActiveSheet, "AnotherHeader")
对于您提出的问题,我可以为您提供的差不多就是这些了;随时向 SO 询问您在实现此功能时可能遇到的任何特定编程问题。但是,您甚至可能不需要问,因为很可能其他地方的其他人已经准确记录了如何做到这一点 - 这里有几个链接可以帮助您: