If UBound(Filter(myArray, Sheets(i).Cells(1, j).Value, True)) = -1 Then
'take action
End if
我使用这种语法将在Cells(1,j)中找到的元素(例如“ally”)与数组的所有元素(例如“mally”,“kate”,“becks”)进行比较,并采用找不到完全匹配时的动作。 麻烦的是,根据这一行代码,似乎“盟友”被认为是“匹配”(可能是因为“盟友”是来自“mally”的子串),而我希望“盟友”被认为不同于“mally” ”
有关实现此目的的语法帮助吗?谢谢!
答案 0 :(得分:4)
IsInArray = Not IsError(Application.Match(stringToBeFound, arr, 0))
答案 1 :(得分:2)
过滤器将返回任何部分匹配的项目。 Microsoft建议的解决方法是在过滤后的数组中搜索完全匹配。
Function FilterExactMatch(astrItems() As String, _
strSearch As String) As String()
' This function searches a string array for elements
' that exactly match the search string.
Dim astrFilter() As String
Dim astrTemp() As String
Dim lngUpper As Long
Dim lngLower As Long
Dim lngIndex As Long
Dim lngCount As Long
' Filter array for search string.
astrFilter = Filter(astrItems, strSearch)
' Store upper and lower bounds of resulting array.
lngUpper = UBound(astrFilter)
lngLower = LBound(astrFilter)
' Resize temporary array to be same size.
ReDim astrTemp(lngLower To lngUpper)
' Loop through each element in filtered array.
For lngIndex = lngLower To lngUpper
' Check that element matches search string exactly.
If astrFilter(lngIndex) = strSearch Then
' Store elements that match exactly in another array.
astrTemp(lngCount) = strSearch
lngCount = lngCount + 1
End If
Next lngIndex
' Resize array containing exact matches.
ReDim Preserve astrTemp(lngLower To lngCount - 1)
' Return array containing exact matches.
FilterExactMatch = astrTemp
End Function
此代码取自http://msdn.microsoft.com/en-us/library/office/aa164525%28v=office.10%29.aspx
答案 2 :(得分:2)
如果您不需要使用过滤器,那么以下代码段将起作用
Dim v
Dim bMatch As Boolean
bMatch = False
For Each v In myArray
'compare strings
If StrComp(CStr(v), Sheets(i).Cells(1, j).Value, vbTextCompare) = 0 Then
bMatch = True
End If
Next
If Not bMatch Then
'do something
End If
答案 3 :(得分:2)
如果数组仅用于此比较而不需要其他任何内容,您还可以通过添加自己的数据中未出现的分隔符强制进行完整的单词比较 - 也许是方括号。
因此,如果您更改数组以包含“[mally]”,“[kate]”,“[becks]”
然后你的状况变成:
If UBound(Filter(myArray, "[" & Sheets(i).Cells(1, j).Value & "]", True)) = -1