使用通配符自动过滤超过2个条件

时间:2018-04-16 13:51:27

标签: excel vba

我在宏中使用以下代码:

Sub Macro2()
    Sheets("Bill").Select
    Range("A2:AA2").Select
    Rows("2:2").Select
    Selection.AutoFilter
    Range("T2").Select
    ActiveSheet.Range("$A$2:$AA$111").AutoFilter Field:=20, Criteria1:=Array("=*Base ch*", _
    "=*Service*", "=*Supply Ch*", "=*Customer*", "=*Analyst*"), Operator:=xlFilterValues
End Sub

它没有显示任何错误,当我只使用2个标准时它完美无缺。 问题是当我尝试超过2时。它没有显示任何内容。

我尝试了操作符OR,但我认为只适用于2个标准。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

而不是AutoFilter,在处理多个通配符标准时尝试Advanced Filter。您所需要的只是拥有一张带有通配符列出的标准的工作表,或者以编程方式创建标准表并最终将其删除。

以下代码将以编程方式创建一个标准表,并列出A列中的所有条件,从第2行开始,标准表上的A1将包含数据表中的列标题。

Sub FilterWithMultipleWildcardCriteria()
Dim ws As Worksheet, wsCriteria As Worksheet
Dim strCriterai
Dim lr As Long

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Set ws = Sheets("Bill")
If ws.FilterMode Then ws.ShowAllData
lr = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

On Error Resume Next
Set wsCriteria = Sheets("Criteria")
wsCriteria.Cells.Clear
On Error GoTo 0

If wsCriteria Is Nothing Then
    Set wsCriteria = Sheets.Add
    wsCriteria.Name = "Criteria"
End If

wsCriteria.Range("A1").Value = ws.Range("T2").Value
strcriteria = Array("*Base ch*", "*Service*", "*Supply Ch*", "*Customer*", "*Analyst*")

wsCriteria.Range("A2").Resize(UBound(strcriteria) + 1).Value = Application.Transpose(strcriteria)

ws.Range("A2:AA" & lr).AdvancedFilter xlFilterInPlace, wsCriteria.Range("A1").CurrentRegion

wsCriteria.Delete

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub