Excelで表を検索するとき、VLOOKUPだけで頑張っていませんか。実は、左方向の検索列の追加に強い検索をしたいなら、INDEX関数とMATCH関数の組み合わせがとても便利です。仕事中は「今すぐ使える式」が知りたいですよね。そこでこの記事では、まず最初に結論として使い方をそのまま載せ、そのあとで入力手順、VLOOKUPとの違い、うまくいかないときのチェックポイントまで、すぐ実務で使える形でまとめます。

まず結論:INDEX MATCHはこの式を使えばOKです

=INDEX(返したい列, MATCH(検索値, 検索する列, 0)) これが基本形です。たとえば =INDEX(B2:B10, MATCH(E2, A2:A10, 0)) なら、A列でE2を探して、対応するB列の値を返せます。

この形を覚えておけば、VLOOKUPで困りやすい「検索列が一番左にない」「途中で列を追加したら式がズレた」といった問題をかなり減らせます。

INDEX MATCHとは何かを最短で理解しましょう

役割はシンプルです。

  • MATCH関数:検索値が範囲の何番目にあるかを調べる
  • INDEX関数:指定した範囲の中から、何番目の値を返す

つまり、MATCHで「位置」を見つけて、INDEXで「その位置の値」を取り出します。VLOOKUPは1つの関数で検索しますが、INDEX MATCHは2つを組み合わせるイメージですね。

基本の使い方:社員番号から名前を検索する手順

たとえば、A列に社員番号、B列に氏名が入っていて、E2に入力した社員番号に対応する氏名を表示したいとします。このときの式は次の通りです。

=INDEX(B2:B10, MATCH(E2, A2:A10, 0))

入力手順はこの流れで進めましょう。

  1. 結果を表示したいセルをクリックします
  2. =INDEX( と入力します
  3. 返したい列、つまり氏名の範囲 B2:B10 をドラッグして選択します
  4. カンマを入力します
  5. MATCH( と入力します
  6. 検索値のセル E2 をクリックします
  7. カンマを入力します
  8. 検索する列、つまり社員番号の範囲 A2:A10 をドラッグして選択します
  9. カンマを入力して 0 を入れます
  10. ) でMATCHを閉じ、さらに ) でINDEXも閉じます
  11. Enterキーを押します

MATCH関数の最後の 0 は「完全一致で探す」という意味です。社員番号や商品コードの検索では、まずこれを使えば大丈夫です。

VLOOKUPとの違いを実務目線で整理します

VLOOKUPとINDEX MATCHはどちらも便利ですが、実務で差が出やすいポイントがあります。

  • 左方向の検索ができる:VLOOKUPは基本的に検索列より右側しか返せませんが、INDEX MATCHなら左側の列も返せます
  • 列番号を数えなくていい:VLOOKUPの「3列目」「5列目」のような指定が不要です
  • 列の追加に強い:途中で列を挿入しても、参照範囲が適切なら壊れにくいです
  • 式の意味が分かりやすい:どこを探してどこを返すかを後から見直しやすいです

逆に、簡単な表で「右方向にしか検索しない」「とにかく手早く作りたい」という場面ではVLOOKUPでも十分です。ですが、長く使う業務ファイルならINDEX MATCHのほうが安心なことが多いですよ。

VLOOKUPからINDEX MATCHへ置き換える方法

たとえば、次のVLOOKUP式があるとします。

=VLOOKUP(E2, A2:C10, 2, FALSE)

これは「A列でE2を探して、2列目のB列を返す」という意味です。これをINDEX MATCHにすると次のようになります。

=INDEX(B2:B10, MATCH(E2, A2:A10, 0))

置き換えの考え方は簡単です。

  1. VLOOKUPの「返したい列」を確認する
  2. その列だけをINDEXの第1引数に入れる
  3. 検索値はそのままMATCHの第1引数に入れる
  4. 検索する列をMATCHの第2引数に入れる
  5. 完全一致ならMATCHの第3引数は0にする

このルールで見れば、VLOOKUPからの移行はそれほど難しくありません。

左の列を検索したいときこそINDEX MATCHが便利です

たとえば、B列に商品名、A列に商品コードがあり、商品名から商品コードを取り出したいケースです。VLOOKUPでは左側を返せないので苦戦しやすいですが、INDEX MATCHならすぐです。

=INDEX(A2:A10, MATCH(E2, B2:B10, 0))

この式なら、E2に入力した商品名をB列で探して、対応するA列の商品コードを返せます。これがINDEX MATCHの大きな強みですね。

うまくいかないときのチェックポイント

式を入れたのにエラーになると焦りますよね。よくある原因を順番に確認しましょう。

#N/A になる場合

  • 検索値が検索列に存在しない
  • 全角と半角が混ざっている
  • 前後に余分なスペースが入っている
  • 数字が「数値」ではなく「文字列」になっている

特に、見た目は同じでも片方が文字列、もう片方が数値だと一致しないことがあります。必要ならTRIM関数やVALUE関数で整えましょう。

#REF! になる場合

  • INDEXで指定した返却範囲が壊れている
  • 参照していたセルや列を削除してしまった

範囲指定をもう一度見直すと解決しやすいです。

#VALUE! になる場合

  • MATCHの位置番号を正しく返せていない
  • INDEXとMATCHで使っている範囲のサイズや考え方がズレている

まずはMATCH単体で =MATCH(E2, A2:A10, 0) を試し、何番目が返るか確認すると原因を切り分けやすいです。

正しい値が出ない場合

  • MATCHの第3引数が0以外になっている
  • 検索範囲を1行ずれて選んでいる
  • 返したい列と検索する列のデータ対応がずれている

完全一致検索なら、まず0を入れているか確認してください。曖昧検索のままになっていると、意図しない結果が出やすいです。

コピペで使うときのコツ

複数行にコピーするなら、参照範囲を絶対参照にしておくと便利です。

=INDEX($B$2:$B$10, MATCH(E2, $A$2:$A$10, 0))

このように $ を付けると、下にコピーしても検索範囲がずれません。ショートカットなら、数式バーで範囲を選んだ状態で F4 を押すと絶対参照に切り替えられます。

さらに時短したい人向けの便利ワザ

最後に、INDEX MATCHをもっと使いやすくする時短ワザも紹介します。

  • F4:参照を絶対参照に切り替える
  • Ctrl + C / Ctrl + V:数式のコピーと貼り付け
  • Ctrl + Enter:選択範囲に同じ数式を一括入力
  • 数式の検証:数式タブの「数式の検証」でどこでズレているか確認

また、エラー表示を見やすくしたいなら、IFERROR関数を組み合わせるのもおすすめです。

=IFERROR(INDEX(B2:B10, MATCH(E2, A2:A10, 0)), "該当なし")

これなら、見つからないときに #N/A ではなく「該当なし」と表示できます。業務ファイルで他の人が見る場合にも親切ですね。

まとめ

INDEX MATCHの基本は、MATCHで位置を探し、INDEXで値を返すという流れです。VLOOKUPより少しだけ考え方は増えますが、そのぶん左検索ができて、列追加にも強く、実務ではかなり頼れる組み合わせです。まずは =INDEX(返したい列, MATCH(検索値, 検索する列, 0)) をそのまま使ってみてください。慣れると、VLOOKUPより扱いやすいと感じる場面が増えてきますよ。

おすすめの記事