VBA中的自动filter将条件作为一系列单元格

我想在vba中使用autofilter过滤使用单元格值的dynamic范围。

ActiveSheet.Range("$A$1:$I$954092").AutoFilter Field:=1, Criteria1:=???? _ Operator:=xlFilterValues 

我想要使​​用一个dynamic范围的单元格

 Range("A1",Range("A1").End(xlDown)) 

你能build议如何指定这个?

我曾尝试将以下内容传递给Criteria1:

 Range(###).Value Array(Range(###)) 

等等

防爆。

 Col1 Col2 Col3 Col4 ---------------------------- A 1 3 Y B 3 3 N A 2 2 N C 6 1 Y B 9 3 Y 

我想在Col1过滤出值为AC的行。

如果我们在小型自动过滤器上使用logging器,我们会看到:

 Sub Macro1() Range("A1:C20").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$C$20").AutoFilter Field:=2, Criteria1:=Array( _ "Alice", "Boris", "Mike"), Operator:=xlFilterValues End Sub 

所以AutoFilter需要一个基于1的数组Criteria1

假设所需列表在列A的图表xx我们将从这个列表中创build一个数组:

 Sub Macro11() Dim N As Long, r As Range With Sheets("xx") N = .Cells(Rows.Count, "A").End(xlUp).Row ReDim ary(1 To N) For i = 1 To N ary(i) = .Cells(i, 1) Next i End With Range("A1:C20").AutoFilter ActiveSheet.Range("$A$1:$C$20").AutoFilter Field:=2, Criteria1:=ary, Operator:=xlFilterValues End Sub 

正如@ xificurC所提到的,高级filter可以做到这一点! 我能够使用下面的代码来一次过滤多个值只使用一个范围的引用

 Range("A1:A6").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A10:A12"), Unique:=False 

一种方法是使用你喜欢的任何方法来定义最后一行,然后在你的函数中使用这个值。 就像是:

 Dim lr As Long lr = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row ActiveSheet.Range("$A$1:$I$" & lr).AutoFilter Field:=1, Criteria1:="Foo" 

我强烈build议您完全限定您的范围参考,以避免潜在的麻烦,但这应该让您开始。