Ubound(Filter())函数对部分string匹配返回true

下面的函数对部分匹配返回true ,我怎么修改它只有在整个string匹配时才返回True。

例如,如果数组有AAAABBB

如果我通过AAA它也返回True。

 Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound, , vbTextCompare)) > -1) End Function 

有没有一个简单的修改,或者我应该编写单独的代码来实现呢?

您可以使用标记从以下位置删除任何部分匹配项:

 ary = Array("AAA", "A", "BB", "B") 

假设$字符不出现在数组的任何地方。
我们做一个string,如:

 st = "$" & Join(ary, "$") & "$" 

这是$ AAA $ A $ BB $ B $

如果我们想看看A是否在数组中,检查InStr(st,$A$) > 0
如果我们要查看AAA是否在数组中,请检查InStr(st,$AAA$) > 0
等等

如果$在数组中,请使用类似Chr(1)的标记作为标记。

编辑#1:

实现:

 Public Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean Dim st As String, M As String M = "$" st = M & Join(arr, M) & M IsInArray = InStr(st, stringToBeFound) > 0 End Function 

编辑#2:

用法:

所以如果我们想看看stringAA是否在数组中:

 Sub MAIN() ary = Array("AA", "BB", "CC", "", "DD") MsgBox IsInArray("$AA$", ary) End Sub 

如果我们想看看是否有任何数组元素是空的:

 Sub MAIN() ary = Array("AA", "BB", "CC", "", "DD") MsgBox IsInArray("$$", ary) End Sub 

这个select 最接近原来的问题“是否有一个简单的修改? 。 而不是使用不同的方法,它使用相同的Filter函数应用于相同的(1dim)数组:

语法filter(sourcearray,match [,include [,compare]])

  Used compare argument: vbTextCompare, not case sensitive (use vbBinaryCompare if CaseSensitive) 

附加function

此外,它允许select

  • 我)整个stringsearch。
  • ii)部分匹配,

代码经过testing并且执行时不会损失性能

 Public Function IsInArray(stringToBeFound As String, arr As Variant, Optional bFull = False) As Boolean ' Purpose: search strings in 1dim arrays using the Filter function ' i) whole strings (bFull = True) or ' ii) partial matches (bFull = False, default) ' Exclude empty strings "" (Note: if not wanted, comment the next line out!) If stringToBeFound = "" Then Exit Function If bFull Then ' i) search whole strings IsInArray = (UBound(Filter(Split(Join(arr, ".|") & ".|", "|"), stringToBeFound & ".", , vbTextCompare)) > -1) Else ' ii) partial match IsInArray = (UBound(Filter(arr, stringToBeFound, , vbTextCompare)) > -1) End If End Function 

注意

要注意的是, Filter函数也会接受空的 ""string。 这就是为什么我它们排除在IsInArray函数中的原因。 如果你不想要的话,只需要将第一行代码注释掉。