Excelで表を検索するとき、VLOOKUPだけで頑張っていませんか。実は、左方向の検索や列の追加に強い検索をしたいなら、INDEX関数とMATCH関数の組み合わせがとても便利です。仕事中は「今すぐ使える式」が知りたいですよね。そこでこの記事では、まず最初に結論として使い方をそのまま載せ、そのあとで入力手順、VLOOKUPとの違い、うまくいかないときのチェックポイントまで、すぐ実務で使える形でまとめます。
まず結論:INDEX MATCHはこの式を使えばOKです
この形を覚えておけば、VLOOKUPで困りやすい「検索列が一番左にない」「途中で列を追加したら式がズレた」といった問題をかなり減らせます。
INDEX MATCHとは何かを最短で理解しましょう
役割はシンプルです。
- MATCH関数:検索値が範囲の何番目にあるかを調べる
- INDEX関数:指定した範囲の中から、何番目の値を返す
つまり、MATCHで「位置」を見つけて、INDEXで「その位置の値」を取り出します。VLOOKUPは1つの関数で検索しますが、INDEX MATCHは2つを組み合わせるイメージですね。
基本の使い方:社員番号から名前を検索する手順
たとえば、A列に社員番号、B列に氏名が入っていて、E2に入力した社員番号に対応する氏名を表示したいとします。このときの式は次の通りです。
=INDEX(B2:B10, MATCH(E2, A2:A10, 0))
入力手順はこの流れで進めましょう。
- 結果を表示したいセルをクリックします
- =INDEX( と入力します
- 返したい列、つまり氏名の範囲 B2:B10 をドラッグして選択します
- カンマを入力します
- MATCH( と入力します
- 検索値のセル E2 をクリックします
- カンマを入力します
- 検索する列、つまり社員番号の範囲 A2:A10 をドラッグして選択します
- カンマを入力して 0 を入れます
- ) でMATCHを閉じ、さらに ) でINDEXも閉じます
- 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))
置き換えの考え方は簡単です。
- VLOOKUPの「返したい列」を確認する
- その列だけをINDEXの第1引数に入れる
- 検索値はそのままMATCHの第1引数に入れる
- 検索する列をMATCHの第2引数に入れる
- 完全一致なら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より扱いやすいと感じる場面が増えてきますよ。
