我在宏中使用以下代码:
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个标准。
有什么建议吗?
答案 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