VBA - 查找指定标题的宏,过滤列位置更改的各种表格中的值

时间:2013-07-26 22:19:11

标签: excel-vba vba excel

尝试找出将执行以下操作的宏:

1)找到指定的标题(即:“状态”) 2)将此列过滤为指定值(即:“已停止”) 3)一旦过滤,找到另一个指定的列(即:“替换为”)

我面临的挑战是我无法弄清楚如何设置它以使“Field”列对其所在的工作表变化。

我有多个文件在不同的位置有“status”标题,(一个文件在列c中有另一个,另一个在列f中,等等)。有没有办法让excel找到每张表中的特定列并过滤它?

1 个答案:

答案 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")

就我提出的问题而言,这和我一样多。请随时询问您可能遇到的任何特定编程问题。然而,你可能甚至不需要问,因为很可能某个地方的其他人已经准确地记录了如何做到这一点 - 这里有一些可以帮助你的链接: