二つの一次配列から同じ値を抽出して新しい一次配列として返す関数
タイトルの関数は、以下です。
'*******
'* 二つの一次配列から同じ値を抽出して新しい一次配列として返す関数
'* 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に格納されています。