Excel VBA 自动筛选包含多个条件

Tej*_*jas 4 excel vba

我需要使用运算符Contains过滤具有多个条件的范围

以下代码运行良好(2 个标准):

shData.UsedRange.AutoFilter field:=2, Criteria1:=Array("*a*", "*b*"), Operator:=xlFilterValues
Run Code Online (Sandbox Code Playgroud)

但是,不确定为什么下面的代码不起作用(超过 2 个条件):

shData.UsedRange.AutoFilter field:=2, Criteria1:=Array("*a*", "*b*", "*c*"), Operator:=xlFilterValues
Run Code Online (Sandbox Code Playgroud)

Ror*_*ory 5

这是自动过滤器的限制。您也不能在 UI 中使用两个以上的contains过滤器。

您可以改为使用高级过滤器,也可以使用以下方法创建与您的条件和过滤器匹配的值的数组:

Sub MultiContainsAutofilter()
    Dim vData
    Dim shData                As Worksheet
    Dim d                     As Object
    Dim i                     As Long

    Set shData = ActiveSheet
    vData = shData.UsedRange.Columns(2)

    Set d = CreateObject("Scripting.Dictionary")

    For i = LBound(vData, 1) To UBound(vData, 1)
        If UCase$(vData(i, 1)) Like "*A*" Or UCase$(vData(i, 1)) Like "*B*" Or UCase$(vData(i, 1)) Like "*C*" Then
            d(vData(i, 1)) = Empty
        End If
    Next i

    If d.Count > 0 Then shData.UsedRange.AutoFilter Field:=2, Criteria1:=d.keys, Operator:=xlFilterValues
End Sub
Run Code Online (Sandbox Code Playgroud)