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

以下代码非常有效(2个critera):

shData.UsedRange.AutoFilter field:=2, Criteria1:=Array("*a*", "*b*"), Operator:=xlFilterValues


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

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

最佳答案

这是自动过滤器的局限性。您也不能在用户界面中使用两个以上的包含过滤器。

您可以改为使用“高级”过滤器,也可以创建一个与您的条件匹配的值数组,然后使用该过滤器进行过滤:

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

07-24 09:55