文字列が配列内にあるかどうかを知りたい場合は、次の関数を試してください。
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
SeanCが指摘しているように、これは 1 次元配列でなければなりません。
例:
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
これも 1 次元配列を想定しています。LBound と UBound はゼロベースであるため、インデックス 2 は 2 番目ではなく 3 番目の要素を意味することに注意してください。
例:
Sub Test()
Dim arr As Variant
arr = Split("abc,def,ghi,jkl", ",")
Debug.Print (IsInArray("ghi", arr) > -1)
End Sub
特定の例を念頭に置いている場合は、質問を更新してください。そうしないと、コード例が状況に当てはまらない場合があります。