尝试找出将执行以下操作的宏:
1)找到指定的标题(即:“状态”) 2)将此列过滤为指定值(即:“已停止”) 3)一旦过滤,找到另一个指定的列(即:“替换为”)
我面临的挑战是我无法弄清楚如何设置它以使“Field”列对其所在的工作表变化。
我有多个文件在不同的位置有“status”标题,(一个文件在列c中有另一个,另一个在列f中,等等)。有没有办法让excel找到每张表中的特定列并过滤它?
答案 0 :(得分:1)
查找指定的标题
你会完全实现这一点,就像你在“寻找一个特定的标题”时潜意识地做的那样:从左到右迭代所有列,直到你找到它,然后在它不存在时抛出一个拟合。该函数应该足够通用,不能附加到任何特定的工作表,因此您应该将工作表作为参数传递给它。
这样的事情:
'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
相关的方法可以帮助您。您希望能够将此代码用于任何工作表,因此将其作为参数传递:
Public Sub FilterForSpecificValue(sheet As Worksheet, columnIndex As Integer, filter As String)
...
End Sub
查找另一个指定列
好吧,只需重用#1中的函数,将其与另一个列标题一起传递给它:
result = FindHeader(ActiveSheet, "AnotherHeader")
就我提出的问题而言,这和我一样多。请随时询问您可能遇到的任何特定编程问题。然而,你可能甚至不需要问,因为很可能某个地方的其他人已经准确地记录了如何做到这一点 - 这里有一些可以帮助你的链接: