Vba: インデックス マッチングの使用方法


VBA で INDEX MATCH を実行するには、次の基本構文を使用できます。

 SubIndexMatch ()

    Dim i As Integer
    
    ' Perform index match
    For i = 2 To 11
    Cells(i, 5).Value = WorksheetFunction.Index(Range(" A2:A11 "), _
    WorksheetFunction.Match(Cells(i, 4).Value, Range(" B2:B11 "), 0))
    Next i
End Sub

この特定の例では、ワークシートの 4 列目のセル 2 ~ 11 の範囲B2:B11 の値を検索し、ワークシートの 5 列目の範囲A2:A11の対応する値を返します。

次の例は、この構文を実際に使用する方法を示しています。

例: VBA を使用して INDEX MATCH を実行する

Excel にバスケットボール選手に関する情報を含む次のデータセットがあるとします。

D 列の各プレーヤーについて、A 列でチーム名を検索し、そのチーム名を E 列に書き込みたいとします。

これを行うには、次のマクロを作成できます。

 SubIndexMatch ()

    Dim i As Integer
    
    ' Perform index match
    For i = 2 To 11
    Cells(i, 5).Value = WorksheetFunction.Index(Range(" A2:A11 "), _
    WorksheetFunction.Match(Cells(i, 4).Value, Range(" B2:B11 "), 0))
    Next i
End Sub

このマクロを実行すると、次の出力が表示されます。

このマクロは各プレーヤーの名前を検索し、列 E に対応するチームの名前を返すことができたことに注意してください。

For ループ内で、 Cells(i,5).value構文は、チーム名をスプレッドシートの 5 列目、つまり列 E に返すように指定していることに注意してください。

この構文をCells(i,6).valueに変更すると、スプレッドシートの 6 列目にチーム名が返されます。

 SubIndexMatch ()

    Dim i As Integer
    
    ' Perform index match
    For i = 2 To 11
    Cells(i, 6).Value = WorksheetFunction.Index(Range(" A2:A11 "), _
    WorksheetFunction.Match(Cells(i, 4).Value, Range(" B2:B11 "), 0))
    Next i
End Sub

このマクロを実行すると、次の出力が表示されます。

チーム名がスプレッドシートの 6 列目 (F 列) に返されることに注意してください。

追加リソース

次のチュートリアルでは、VBA で他の一般的なタスクを実行する方法について説明します。

VBA: 文字列に別の文字列が含まれているかどうかを確認する方法
VBA: 範囲内の行数をカウントする方法
VBA: COUNTIF 関数と COUNTIFS 関数の書き方

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です