簡體   English   中英

如何使用VBA在Excel的單個列中過濾多個條件?

[英]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*"

將過濾所有包含單詞TableChair 但這不適用於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.

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