簡體   English   中英

在VBA中自動過濾,條件為單元格范圍

[英]Autofilter in VBA with criteria as a range of cells

我想在vba中使用自動過濾器以使用動態范圍的單元格值進行過濾。

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

我想用Col1AC過濾掉行。

如果在小型自動篩選器上使用記錄器, 則會看到:

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

正如@xificurC所述,高級過濾器可以解決問題! 我僅使用對范圍的引用就可以使用以下代碼一次過濾多個值

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"

我強烈建議您對范圍參考進行完全限定,以避免將來出現潛在的麻煩,但這應該可以幫助您入門。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM