二つの一次配列から同じ値を抽出して新しい一次配列として返す関数

タイトルの関数は、以下です。

'*******
'* 二つの一次配列から同じ値を抽出して新しい一次配列として返す関数
'* arr1,arr2:二つの一次配列、参照渡し。
Private Function ExtractCommonValues(ByRef arr1() As Variant, ByRef arr2() As Variant) As Variant()
    Dim commonValues() As Variant ' 同じ値を格納する配列
    Dim i As Long
    Dim j As Long
    Dim k As Long
    
    k = 0 ' commonValuesの要素のカウンタ
    
    ' arr1の要素がarr2に存在するかチェックし、存在する場合はcommonValuesに追加する
    For i = LBound(arr1) To UBound(arr1)
        For j = LBound(arr2) To UBound(arr2)
            If arr1(i) = arr2(j) Then
                
                ReDim Preserve commonValues(0 To k)
                commonValues(k) = arr1(i)
                k = k + 1
                Exit For
            End If
        Next j
    Next i
    
    ExtractCommonValues = commonValues ' commonValuesを返す
End Function

使用例は、以下です。

Private Sub test()
    Dim i As Long
    Dim arr1(1 To 10) As Variant
    Dim arr2(1 To 10) As Variant
    Dim arr3 As Variant
    
    ' 配列に文字列を代入
    For i = 1 To 10
        arr1(i) = "Item" & i
    Next i
    ' 配列に文字列を代入
    For i = 1 To 10
        arr2(i) = "Item" & i * 2
    Next i
    
    ' ここで、関数を呼び出しています。
    arr3 = ExtractCommonValues(arr1, arr2)
End Sub

配列は、以下のようになっていて、arr1とarr2から同じ値を抽出して、arr3に格納されています。

Follow me!