【问题标题】:Auto filter with more than 2 criteria with wildcards使用通配符的超过 2 个条件的自动过滤器
【发布时间】:2018-04-16 13:51:27
【问题描述】:

我在宏中使用以下代码:

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 个条件。

有什么建议吗?

【问题讨论】:

标签: excel vba


【解决方案1】:

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

以下代码将以编程方式创建一个标准表,并在 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

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    相关资源
    最近更新 更多