3 回答

TA貢獻1812條經驗 獲得超5個贊
如果您想知道是否在數組中找到該字符串,請嘗試以下函數:
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
正如肖恩·柴郡指出的那樣,這必須是一維數組。
例:
Sub Test()
Dim arr As Variant
arr = Split("abc,def,ghi,jkl", ",")
Debug.Print IsInArray("ghi", arr)
End Sub
(以下代碼根據HansUp的評論進行了更新)
如果要在數組中匹配元素的索引,請嘗試以下操作:
Function IsInArray(stringToBeFound As String, arr As Variant) As Long
Dim i As Long
' default return value if value not found in array
IsInArray = -1
For i = LBound(arr) To UBound(arr)
If StrComp(stringToBeFound, arr(i), vbTextCompare) = 0 Then
IsInArray = i
Exit For
End If
Next i
End Function
這也假設一維數組。請記住,LBound和UBound從零開始,因此索引為2表示第三個元素,而不是第二個。
例:
Sub Test()
Dim arr As Variant
arr = Split("abc,def,ghi,jkl", ",")
Debug.Print (IsInArray("ghi", arr) > -1)
End Sub
如果您有特定的示例,請使用它來更新您的問題,否則示例代碼可能不適用于您的情況。

TA貢獻1871條經驗 獲得超13個贊
另一種選擇是使用字典而不是數組:
Dim oNames As Object
Set oNames = CreateObject("Scripting.Dictionary")
'You could if need be create this automatically from an existing Array
'The 1 is just a dummy value, we just want the names as keys
oNames.Add "JOHN", 1
oNames.Add "BOB", 1
oNames.Add "JAMES", 1
oNames.Add "PHILIP", 1
這樣一來,您就可以
oNames.Exists("JOHN")
字典提供的優勢是與的部分匹配相比,精確匹配Filter。假設您有一個數組中的原始名稱列表,但正在查找“ JO”或“ PHIL”,除了我們最初使用的四個人以外,他們實際上是兩個新人。在這種情況下,Filter(oNAMES, "JO")將匹配可能不需要的“ JOHN” 。有了字典,它就不會。

TA貢獻1943條經驗 獲得超7個贊
更簡單的功能在Apple OS上也可以使用:
Function isInArray(ByVal stringToBeFound As String, ByVal arr As Variant) As Boolean
Dim element
For Each element In arr
If element = stringToBeFound Then
isInArray = True
Exit Function
End If
Next element
End Function
添加回答
舉報