[英]How do you use VBA to filter for multiple criteria in a single column in Excel?
我希望下面的代碼能正常工作,因為它來自經過良好評價的答案 。
如果這是格式錯誤,我想糾正錯誤,而不是完全改變解決方案的方法。 如果這種處理方式根本不起作用,那么我願意嘗試其他方法。
任何見解將不勝感激!
ActiveSheet.Range("$A:$AI").AutoFilter Field:=11, Criteria1:=Array("Namib", "Kitchen", _
"Constantia", "Painters", _
"CUSTOM", "Classic", _
"Bench"), _
Operator:=xlFilterValues
您只能使用通配符過濾2個條件:
Range("$A:$AI").AutoFilter Field:=11, Criteria1:="=*Table*", Operator:=xlOr, Criteria2:="=*Chair*"
將過濾所有包含單詞Table
或Chair
。 但這不適用於2個以上的條件。
'THIS DOES NOT WORK:
Range("$A:$AI").AutoFilter Field:=11, Criteria1:=Array("*Namib*", "*Kitchen*", _
"*Constantia*", "*Painters*", _
"*CUSTOM*", "*Classic*", _
"*Bench*"), _
Operator:=xlFilterValues
請參閱: 設置自動過濾多個通配符以獲取解決方法。
這是另一個解決方法:
Sub FilterMultipleWildcards()
Dim myCriteria As Variant, criterium As Variant
Dim filteredRng As Range
myCriteria = Array("Namib", "Kitchen", "Constantia", "Painters", "CUSTOM", "Classic", "Bench")
With ActiveSheet
With Intersect(.UsedRange, .Range("$A:$AI"))
Set filteredRng = .Offset(, .Columns.Count).Resize(1, 1)
For Each criterium In myCriteria
.AutoFilter Field:=11, Criteria1:="=*" & criterium & "*"
If Application.WorksheetFunction.Subtotal(103, .Resize(1)) > 1 Then Set filteredRng = Union(filteredRng, .Resize(.Rows.Count - 1, 1).Offset(1, 10).SpecialCells(xlCellTypeVisible))
Next
Set filteredRng = Intersect(filteredRng, .Cells)
.Parent.AutoFilterMode = False
.Resize(.Rows.Count - 1).Offset(1).EntireRow.Hidden = True
End With
filteredRng.EntireRow.Hidden = False
End With
End Sub
其限制在於Union()
方法產生的范圍的“容量”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.