我想在vba中使用autofilter来过滤使用动态范围的单元格值。
ActiveSheet.Range("$A$1:$I$954092").AutoFilter Field:=1, Criteria1:=???? _
Operator:=xlFilterValues
我想使用动态范围的单元格,如
Range("A1",Range("A1").End(xlDown))
您能建议如何指定吗?
我已尝试将以下内容传递给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
我想过滤掉值为A
&的行。 C
中的Col1
。
答案 0 :(得分:3)
如果我们在一个小的 AutoFilter 上使用Recorder,我们会看到:
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 想要 Criteria1的基于1的数组
假设所需的列表位于 A列 xx 中。我们将从此列表中创建一个数组:
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
答案 1 :(得分:3)
正如@xificurC所提到的,高级过滤器可以解决问题!我只使用对范围
的引用,就可以使用以下代码一次过滤多个值Range("A1:A6").AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:=Range("A10:A12"), Unique:=False
答案 2 :(得分:0)
一种方法是使用您喜欢的任何方法定义最后一行,然后在函数中使用该值。类似的东西:
Dim lr As Long
lr = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ActiveSheet.Range("$A$1:$I$" & lr).AutoFilter Field:=1, Criteria1:="Foo"
我强烈建议您完全限定您的范围参考,以避免潜在的麻烦,但这应该让您开始。