配列操作

配列で条件に「完全一致」した要素を取得する【ExcelVBA】

配列内の要素を、完全一致で検索したい場合があります。
Dictonaryの連想配列へ格納して検索した方が高速ですが、コード内の値の重複が許可されません。
ここでは単純にFor~Loopで処理する形を案内します。

完全一致で検索するサンプルコード

一次元配列、二次元配列共にFor~Loopで処理がスタンダードです。
Findやmatchで検索も可能ですが、当方は使用しません。

'■一次元配列内の要素を検索し、完全一致の場所を探す
Public Function Call_ArraySearch()
    Dim arr(3) As Long
    Dim i As Long
    Dim sWord As String: sWord = "123"
    
    arr(0) = 123
    arr(1) = 234
    arr(2) = 345
    arr(3) = 123
    
    '■単純にFor~Loopで回して検索する
    For i = LBound(arr) To UBound(arr)
        If arr(i) = sWord Then
            'arr(0)とarr(3)が完全一致
            MsgBox "一次元配列の要素" & i & "が完全一致しました"
        End If
    Next i
End Function
'■二次元配列内の要素を検索し、完全一致の場所を探す
Public Function Call_ArraySearch2D()
    Dim arr(1, 1) As Long
    Dim i As Long, j As Long
    Dim sWord As String: sWord = "123"
    
    arr(0, 0) = 123
    arr(0, 1) = 234
    arr(1, 0) = 345
    arr(1, 1) = 123
    
    '■単純にFor~Loopで回して検索する
    For i = LBound(arr, 1) To UBound(arr, 1)
        For l = LBound(arr, 2) To UBound(arr, 2)
            If arr(i, j) = sWord Then
                'arr(0,0)とarr(1,1)が完全一致
                MsgBox "二次元配列の要素" & i & ", " & j & "が完全一致しました"
            End If
        Next l
    Next i
End Function

その他

部分一致での検索で良ければFor~Loopで回さなくても、Filter関数で取得できます。
配列で条件に「部分一致」した要素を取得する【Filter関数】【ExcelVBA】

関連記事

一次元/二次元配列の要素数の最小値を取得する【Lbound関数】
一次元/二次元配列の要素数の最大値を取得する【Ubound関数】
配列の宣言(静的/動的/1次元/2次元)【ExcelVBA】

コメント

タイトルとURLをコピーしました