48

VBA で配列内の文字列を検索する簡単な (ワンライナー) はありますか? または、各要素をループしてターゲット文字列と比較する必要がありますか?

編集: 1 次元配列です。文字列が配列のどこかにあるか知る必要があるだけです。

いいえ:

names(JOHN, BOB, JAMES, PHLLIP)

「JOHN」が配列に含まれているかどうかを確認するにはどうすればよいですか。約 5000 回繰り返されるため、最小限にする必要があり、関数によってプロセス全体が遅くなることは望ましくありません。

4

11 に答える 11

79

文字列が配列内にあるかどうかを知りたい場合は、次の関数を試してください。

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

特定の例を念頭に置いている場合は、質問を更新してください。そうしないと、コード例が状況に当てはまらない場合があります。

于 2012-06-08T16:31:36.577 に答える
14

完全一致 (つまり、部分一致なし) を強制する別のオプションは次のとおりです。

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
  IsInArray = Not IsError(Application.Match(stringToBeFound, arr, 0))
End Function

Match メソッドとその引数の詳細については、 http://msdn.microsoft.com/en-us/library/office/ff835873 (v=office.15).aspx を参照してください。

于 2014-06-02T01:46:51.477 に答える
7

見つかったすべての文字列の配列を返す関数があります。

Filter(sourcearray, match[, include[, compare]])
sourcearrayは1次元で
ある必要があります関数は、文字列を含む配列内のすべての文字列を返しmatchます

于 2012-06-08T15:48:52.383 に答える
5

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
于 2014-06-17T07:57:34.473 に答える
1

定数のリストの場合は、次のように Select Case を使用できます。

Dim Item$: Item = "A"

Select Case Item
  Case "A", "B", "C"
    ' If 'Item' is in the list then do something.
  Case Else
    ' Otherwise do something else.
End Select
于 2015-04-15T04:19:25.557 に答える