VBA中的自动过滤器,其标准为一系列细胞

时间:2014-07-10 14:48:55

标签: excel vba excel-vba autofilter

我想在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

3 个答案:

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

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