VLOOKUPを使っていて「検索する列より左にある値が引けない」と困ったことはありませんか。たとえば商品コードで検索して、コードより左に並んでいる商品名を取り出したいとき。VLOOKUPは構造上、左方向には引けません。
このときに使うのが INDEX 関数と MATCH 関数の組み合わせです。左でも右でも自由に引け、列の挿入にも強い、転記の定番テクニックです。実際の画面で見ていきましょう。
完成イメージ
マスタは「商品名(左)|商品コード(中)|単価(右)」の並びです。コードから、その左にある商品名を引いています。VLOOKUPではできない引き方です。
数式の意味
商品名を取り出すセルに入れているのは、次の数式です。
=INDEX($A$2:$A$4, MATCH(D2, $B$2:$B$4, 0))
2つの関数が役割分担しています。内側の MATCH から読むと分かりやすいです。
- MATCH(D2, $B$2:$B$4, 0) … 検索コード(D2)が、コード列(B列)の何行目にあるかを返す。最後の
0は「完全一致」 - INDEX($A$2:$A$4, ○) … 商品名の列(A列)の中から、MATCHが返した○行目の値を取り出す
つまり「MATCHで何行目かを突き止め、INDEXでその行の商品名を取り出す」という連携です。INDEXに渡す列(取り出したい列)とMATCHで探す列を別々に指定できるため、左右どちらの列でも引けます。
つまずきやすいポイント①:MATCHの最後は必ず 0
MATCH の最後の引数は照合の種類です。完全一致なら 0 を指定します。省略したり 1 にすると近似一致になり、ぴったり一致しない行が返ることがあります。コードや名前で正確に引きたいときは、必ず 0 を付けます。
つまずきやすいポイント②:列の挿入に強い
VLOOKUP は「左から何列目」を数字で指定するため、表の途中に列を挿入すると番号がずれて別の列を引いてしまいます。INDEX+MATCH は列を範囲で指定するので、列を挿入・移動しても参照が自動で追従し、壊れません。マスタを後から拡張する表ほど効いてきます。
XLOOKUPとの使い分け
Microsoft 365 や Excel 2021 以降なら、同じこと(左方向の参照・列挿入に強い)が XLOOKUP でより簡単に書けます。古いバージョンとファイルを共有する、既存のINDEX+MATCHを引き継ぐ、という場合はINDEX+MATCHを使います。どちらもVLOOKUPの弱点を補う選択肢です。
まとめ
INDEX+MATCH を使えば、検索列の左でも右でも自由に引け、列の挿入でも壊れません。「MATCHで行を探し、INDEXで取り出す」と覚えれば、VLOOKUPで詰まる場面の多くを解消できます。
「マスタの設計から転記・集計までまとめて自動化したい」「関数が複雑になってきたのでマクロにまとめたい」という場合は、ExcelMate のチャット相談でそのままご相談いただけます。

