業務効率化

INDEX+MATCHでVLOOKUPの弱点を解決する|検索値より左の列も引ける

ExcelMate編集部7分

この記事の要点

  • VLOOKUPは検索列より右しか引けないが、INDEX+MATCHなら検索列の左にある列も引ける
  • 数式は =INDEX(取り出す列, MATCH(検索値, 探す列, 0))。MATCHで「何行目か」を出し、INDEXでその行の値を取り出す
  • 列の挿入・移動に強く、列番号がずれて壊れるVLOOKUPの弱点も同時に解消できる

VLOOKUPを使っていて「検索する列より左にある値が引けない」と困ったことはありませんか。たとえば商品コードで検索して、コードより左に並んでいる商品名を取り出したいとき。VLOOKUPは構造上、左方向には引けません。

このときに使うのが INDEX 関数MATCH 関数の組み合わせです。左でも右でも自由に引け、列の挿入にも強い、転記の定番テクニックです。実際の画面で見ていきましょう。

完成イメージ

マスタは「商品名(左)|商品コード(中)|単価(右)」の並びです。コードから、その左にある商品名を引いています。VLOOKUPではできない引き方です。

INDEX関数とMATCH関数で、商品コードから検索列より左にある商品名を引いたExcel画面。E2セルにINDEXとMATCHを組み合わせた数式を入力し、PC-02からモニターが転記されている
E2 に入力した数式と結果(コードPC-02から、左の列にある商品名モニターを転記)

数式の意味

商品名を取り出すセルに入れているのは、次の数式です。

=INDEX($A$2:$A$4, MATCH(D2, $B$2:$B$4, 0))

2つの関数が役割分担しています。内側の MATCH から読むと分かりやすいです。

  1. MATCH(D2, $B$2:$B$4, 0) … 検索コード(D2)が、コード列(B列)の何行目にあるかを返す。最後の 0 は「完全一致」
  2. 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 のチャット相談でそのままご相談いただけます。

よくある質問

INDEX+MATCHとVLOOKUPはどちらを使うべき?
検索列より右の列を引くだけならVLOOKUPで十分です。検索列より左を引きたい、列の挿入で壊れたくない、大きな表で動作を軽くしたい、という場合はINDEX+MATCHが向いています。Microsoft 365やExcel 2021以降ならXLOOKUPでも同じことが、より簡単にできます。
MATCH関数の最後の0は何ですか?
照合の種類で、0は「完全一致」を意味します。検索値とぴったり同じものを探すときは必ず0を指定します。1や-1にすると近似一致になり、意図しない行が返ることがあります。
INDEX+MATCHが #N/A になるのはなぜ?
MATCHが検索値を見つけられないと #N/A になります。検索値が探す列に存在しない、表記ゆれ(全角半角・空白)で一致していない、MATCHの最後を0にしていない、のいずれかが原因のことが多いです。
列を挿入してもズレないのはなぜ?
VLOOKUPは「左から何列目」を数字で指定するため、間に列を挿入すると番号がずれて別の列を引いてしまいます。INDEX+MATCHは列そのものを範囲で指定するので、列を挿入・移動しても参照が自動で追従し、ズレません。

監修・運営者

株式会社KOPS 代表取締役 馬込 浩

馬込 浩株式会社KOPS 代表取締役

業務システムの要件定義〜設計〜実装を一気通貫で手がけ、経営者として自社のバックオフィスも運営。Excel・VBA・Power Query/スプレッドシート自動化の実務経験にもとづき、ExcelMateの記事を監修しています。

運営者情報・監修者プロフィールを見る