VBA中的自动筛选,条件作为单元格范围

VBA中的自动筛选,条件作为单元格范围,vba,excel,autofilter,Vba,Excel,Autofilter,我想在vba中使用autofilter来使用单元格值的动态范围进行过滤 ActiveSheet.Range("$A$1:$I$954092").AutoFilter Field:=1, Criteria1:=???? _ Operator:=xlFilterValues 我想使用动态范围的单元格,如 Range("A1",Range("A1").End(xlDown)) 你能建议如何具体说明这一点吗 我尝试将以下内容传递给标准1: Range(###).Value Array(Range(#

我想在vba中使用autofilter来使用单元格值的动态范围进行过滤

ActiveSheet.Range("$A$1:$I$954092").AutoFilter Field:=1, Criteria1:=???? _
Operator:=xlFilterValues
我想使用动态范围的单元格,如

Range("A1",Range("A1").End(xlDown))
你能建议如何具体说明这一点吗

我尝试将以下内容传递给标准1:

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


我想过滤掉
Col1
中带有
A
C
值的行,一种方法是使用您喜欢的任何方法定义最后一行,然后在函数中使用该值。比如:

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

我强烈建议您完全限定范围引用,以避免将来可能出现的麻烦,但这应该让您开始。

一种方法是使用您喜欢的任何方法定义最后一行,然后在函数中使用该值。比如:

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

我强烈建议您完全限定您的范围参考,以避免今后可能出现的麻烦,但这应该让您开始。

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

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的数组作为标准1

假设所需列表位于第xx页A列。我们将根据该列表制作一个数组:

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

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

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的数组作为标准1

假设所需列表位于第xx页A列。我们将根据该列表制作一个数组:

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所提到的,高级过滤器可以做到这一点!我能够使用下面的代码一次过滤多个值,只需引用一个范围

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

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

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

使用高级筛选器,可以更轻松地根据多个条件进行筛选。看一看,例如,高级过滤器在每列数据都有特定过滤器的情况下工作。我需要的是一个过滤器,用于在该列数据中选择多个值的单个列。实际上,高级过滤器也适用于此,请尝试一下。按照示例
Col1
创建一列具有相同标题的数据,并将
a
C
放在下面的行中。现在在数据上选择高级筛选,并在筛选条件中使用列标题将整个内容放在筛选条件中。使用高级筛选可以更轻松地筛选多个条件。看一看,例如,高级过滤器在每列数据都有特定过滤器的情况下工作。我需要的是一个过滤器,用于在该列数据中选择多个值的单个列。实际上,高级过滤器也适用于此,请尝试一下。按照示例
Col1
创建一列具有相同标题的数据,并将
a
C
放在下面的行中。现在在数据上选择高级筛选,然后在筛选条件中使用列标题将整个内容放入。您所说的是针对Activesheet。范围我想为Criteria1参数指定它,其中您指定为“Foo”@Vamsi。您必须告诉我,我看不到您的工作簿布局。只要VBA代码中没有一堆其他.Select或.Activate语句,就可以使用ActiveSheet。如果您这样做,则很难保证在运行筛选代码时您所处的位置。您所说的是针对Activesheet。范围我想为Criteria1参数指定它,其中您指定为“Foo”@Vamsi。您必须告诉我,我看不到您的工作簿布局。只要VBA代码中没有一堆其他.Select或.Activate语句,就可以使用ActiveSheet。如果您这样做了,就很难保证在运行筛选代码时您所处的位置。