Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Excel VBA Autofilter contains with multiple criteria

Tags:

excel

vba

I need to filter a range with multiple criteria with operator Contains

The following code works very well (2 critera):

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

But, not sure why the below code doesn't work (more than 2 criteria):

shData.UsedRange.AutoFilter field:=2, Criteria1:=Array("*a*", "*b*", "*c*"), Operator:=xlFilterValues
like image 659
Tejas Avatar asked Oct 22 '25 21:10

Tejas


1 Answers

It's a limitation of autofilters. You can't use more than two contains filters in the UI either.

You can either use an Advanced filter instead, or you can create an array of the values that match your criteria and filter using that:

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
like image 121
Rory Avatar answered Oct 26 '25 05:10

Rory