Excel VBA - 按文本自动过滤

问题描述 投票:0回答:1

我需要弄清楚如何按一个特定名称进行过滤。 我有两个名字tichavatichaval。我只想过滤掉 tichava 一个,问题是,在某些情况下,两个名字都在同一列中,就像这样

看黄色部分。过滤完成后,我正在计算可见行数。问题是,如果我按 tichava 过滤,如果我做的正好等于 tichava,我也会得到 tichaval,只显示那些简单的 tichava,这是错误的。我应该怎么办?我是否需要创建一个 Array("tichava", ", tichava", "tichava,") 并像这样过滤它?没有其他选择吗?

excel vba autofilter
1个回答
0
投票

当你标记问题

VBA
时,我假设一个小的VBA函数就可以了。

现在,在 VBA 中定义过滤器完全具有在 Excel 本身中使用自动过滤器时所拥有的可能性 - 选择一个或多个要选择的值或使用高级过滤器来定义一个或两个“通配符”(但不能超过两个)过滤器,例如包含开头。我看不到一种方法可以根据您的确切需求指定高级过滤器。

首先定义一个简单的函数

Public Function containsName(haystack As String, needle As String) As Boolean
    Dim words() As String, i As Long
    words = Split(Replace(haystack, " ", ""), ",")
    For i = 0 To UBound(words)
        If words(i) = needle Then
            containsName = True
            Exit Function
        End If
    Next i
End Function

现在如果字符串包含

exactly
你正在寻找的名字,这个函数将返回 True。有了这个,你有两种可能性:

您可以在 Excel 中使用辅助列,在公式中将函数用作 UDF,例如

=containsName(T2, "tichava")
并按此列过滤数据。

或者,如果辅助列不是一个选项,则遍历所有数据并创建一个包含所有要包含的单元格的数组,并将该数组用作过滤器。

© www.soinside.com 2019 - 2024. All rights reserved.