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

表題の関数の紹介です。以下が、関数です。

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」と順番に表示されます。

Follow me!

コメントを残す