配列操作

一次元配列で条件に該当した行を 別の配列にコピーする【ExcelVBA】

配列内の要素で一致した行だけ別の配列にコピーしたい(抜き出ししたい)場合があります。
単純にFor~Loopで処理し、別の配列にコピーします。

条件に該当した行を抜き出しするサンプルコード

サンプルコードは完全一致での抜き出しです。

'■一次元配列内の要素を検索し、条件に一致した行を抜き出す
Public Function Call_ArraySearch(arr As Variant, sWord As String)
    Dim i As Long, k As Long
    Dim tmp As Variant
    ReDim tmp(UBound(arr))
    '■単純にFor~Loopで回して検索する
    For i = LBound(arr) To UBound(arr)
        If arr(i) = sWord Then 
            tmp(k) = arr(i)
            k = k + 1
        End If
    Next i
    ReDim Preserve tmp(k - 1)
    
    Call_ArraySearch = tmp
End Function

実際の使い方

Public Sub sample()
    Dim arr(3) As Variant
    Dim var As Variant
    arr(0) = 111
    arr(1) = 121
    arr(2) = 222
    arr(3) = 333

    '■222に完全一致するデータを配列varにコピーする
    var = Call_ArraySearch(arr, "222")

    Debug.Print arr(0)  '222
End Sub

その他

一次元配列の場合は「完全一致」ではなく「部分一致」のケースが多いと考えます。
部分一致での検索で良ければFor~Loopで回さなくても、Filter関数で取得できます。
配列で条件に「部分一致」した要素を取得する【Filter関数】【ExcelVBA】

関連記事

コメント

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