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 関数の書き方