【问题标题】:Excel VBA Autofilter - Multiple Criteria of "begin with"Excel VBA Autofilter - “开始于”的多个条件
【发布时间】:2016-09-27 10:06:13
【问题描述】:

我正在使用 vba 自动筛选 Excel 2010 中的列表,并希望根据 3 个或更多“开头为”标准(即“a*”、“b*”、“c*”)自动筛选列表)。不幸的是,据我所知,您只能有两个使用 Operator:=xlOr 的“开头”条件。

VBA Autofilter (Text Filters) With Multiple Criteria of "begin with" 的公认答案看起来可行。然而,遍历列表中的每个项目并将值添加到数组中,然后自动过滤与这些项目的完全匹配是很麻烦的。尤其是对于非常大的列表。

有没有更好的方法来自动过滤两个以上的“开始于”标准?

【问题讨论】:

标签: vba excel excel-2010 ms-office


【解决方案1】:
  1. 只需先将所有内容读入一个数组,这很快就退出了。
  2. 使用数组对其执行一些逻辑。
  3. 从数组中剔除您不希望过滤器显示的每个值。
  4. 如果这样做了,您就有了一个包含要显示的值的数组。

Sub filter()

'ie. "a*", "b*", "c*").
'1 <==
filter_0 = Range(Range("A1"), Range("A2").End(-4121)).Value
filter_00 = Application.WorksheetFunction.Transpose(filter_0)

'2 <==
For i = LBound(filter_00) To UBound(filter_00)
    If Left(filter_00(i), 1) = "a" Then
    ElseIf Left(filter_00(i), 1) = "b" Then
    ElseIf Left(filter_00(i), 1) = "c" Then
    Else   '3 <==
        filter_00(i) = ""
    End If
Next i

'4 <==
With ActiveSheet.Range(Range("A1"), Range("A2").End(-4121))
    .AutoFilter FIELD:=1, Criteria1:=Array(filter_00), Operator:=7
End With

End Sub

【讨论】:

    【解决方案2】:

    注意:已接受答案,但 OP 正在使用问题中前面提到的 Gary 的答案

    假设我们有如下数据:

    我们希望看到以 ADM 开头的项目。

    运行这个宏:

    Sub ThreeWay()
        Dim rng As Range, r As Range
        Set rng = Range("A2:A25")
    
        For Each r In rng
            v = Left(r.Value, 1)
            If v = "A" Or v = "D" Or v = "M" Then
                r.EntireRow.Hidden = False
            Else
                r.EntireRow.Hidden = True
            End If
        Next r
    End Sub
    

    将产生:

    注意:

    • 这是“手动过滤”而不是真正的自动过滤
    • 如果您绝对必须有自动过滤器,请使用我旧帖子中的方法

    【讨论】:

    • 这很好,谢谢!但是,我需要使用自动过滤器,因为用户需要能够在宏运行后对数据进行操作、排序和继续过滤。
    • @NateBergeron 我能想到的唯一其他选择是在工作表中使用 helper 列并让宏操作该列。
    • 好的,我想我会使用你在另一个问题中的方法。我会将此问题标记为答案并进行编辑以提及我正在使用上一个答案。
    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多