二つの配列から同じ値を抽出して新しい配列として返す関数
表題の関数の紹介です。以下が、関数です。
Private Function ExtractCommonValues(arr1() As Variant, 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 TestExtractCommonValues()
Dim arr1() As Variant
Dim arr2() As Variant
Dim commonValues() As Variant
Dim i As Long
' 配列1を設定
arr1 = Array(1, 2, 3, 4, 5)
' 配列2を設定
arr2 = Array(3, 4, 5, 6, 7)
' 同じ値を抽出して配列として取得
commonValues = ExtractCommonValues(arr1, arr2)
' 抽出された値を表示
For i = LBound(commonValues) To UBound(commonValues)
MsgBox commonValues(i)
Next i
End Sub
実行すると、2つの配列にある同じ値を、メッセージボックスで、表示されます。この例では、「3」「4」「5」と順番に表示されます。