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
过滤出值为A
和C
的行。
如果我们在小型自动过滤器上使用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议您完全限定您的范围参考,以避免潜在的麻烦,但这应该让您开始。