我需要弄清楚如何按一个特定名称进行过滤。 我有两个名字tichava和tichaval。我只想过滤掉 tichava 一个,问题是,在某些情况下,两个名字都在同一列中,就像这样
看黄色部分。过滤完成后,我正在计算可见行数。问题是,如果我按 tichava 过滤,如果我做的正好等于 tichava,我也会得到 tichaval,只显示那些简单的 tichava,这是错误的。我应该怎么办?我是否需要创建一个 Array("tichava", ", tichava", "tichava,") 并像这样过滤它?没有其他选择吗?
当你标记问题
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")
并按此列过滤数据。
或者,如果辅助列不是一个选项,则遍历所有数据并创建一个包含所有要包含的单元格的数组,并将该数组用作过滤器。