![](/img/trans.png)
[英]VBA Autofilter criteria: apply if ALL cells in current range/row is blank
[英]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
我想用Col1
值A
和C
過濾掉行。
如果在小型自動篩選器上使用記錄器, 則會看到:
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.