INDEX・MATCH関数の使い方とVLOOKUPとの違い|柔軟な検索をやさしく解説!
この記事でわかること(結論の先出し)
VLOOKUPで「左にある列を引けない」「列を追加したら式が壊れた」と感じたら、INDEX・MATCHを覚える価値があります。
INDEXは「表のどこから値を取り出すか」を担当し、MATCHは「その場所が何番目か」を探す担当です。
この2つを組み合わせると、検索方向や表の変更に強い“壊れにくい表引き”が作れます。
VLOOKUPで困る典型パターン(左検索/列追加/保守性)
VLOOKUPは検索列の右側しか返せないため、左方向にある情報を引きたいときに詰まりやすいです。
また、列番号で返す列を指定するため、列を挿入・移動すると想定と違う列を返してしまうことがあります。
さらに、式を見ただけでは「何列目を返すのか」が表の構造に依存し、引き継ぎ時に読みづらいこともあります。
INDEX・MATCHで解決できること(できること宣言)
INDEX・MATCHなら、左方向の検索や、表の列が増えても壊れにくい参照が作れます。
行と列をそれぞれMATCHで探せるので、見出しを頼りにクロス検索する形にも発展できます。
この記事のゴール(最短到達点)
この記事のゴールは、INDEX・MATCHの基本の型を1つ覚え、実務でコピペして使える状態になることです。
最後にVLOOKUPやXLOOKUP、FILTERとの使い分けも整理し、迷いを減らします。
INDEX関数の基本|指定した行・列の値を取り出す
INDEXは、指定した範囲(表)の中から「○行目の○列目」の値を取り出す関数です。
単純に見えますが、この「行と列を指定して値を返す」という仕組みが、表引きの土台になります。
言い換えると、INDEXは“住所(行と列)を渡すと中身を返す箱”だと思うと理解しやすいです。
どのセルにある値かを、行番号と列番号という“座標”で指定するイメージを持つと、式の意味がはっきりします。
構文と引数の意味(配列/行番号/列番号)
基本の形は、=INDEX(配列, 行番号, 列番号) です。
この3つの引数が、それぞれ明確な役割を持っています。
配列は、値を取り出したい表の範囲を指定します。
ここで指定した範囲の左上が「1行目・1列目」という基準になります。
行番号は、その表の上から何行目かを指定します。
列番号は、その表の左から何列目かを指定します。
つまり、配列の中での“相対的な位置”を数字で伝えるのがINDEXの考え方です。
最小例(1列だけで取り出す)
たとえばA2:A6に商品名が並んでいて、上から3番目を取りたいなら、=INDEX(A2:A6,3) のように書けます。
この式は「A2:A6という範囲の中で、3番目の値を返す」という意味になります。
実際にはA4セルの値が返ることになります。
このように1列の範囲なら、列番号を省略しても動くのがポイントです。
まずは「INDEXは順番で取り出せる」と覚えると、次のMATCHに自然につながります。
番号で取り出す感覚に慣れることが、後の自動化への第一歩です。
表(2次元)から取り出す例
表がA2:C6のように複数列なら、=INDEX(A2:C6,3,2) のように行と列の両方を指定します。
これは「A2:C6の中で、上から3行目、左から2列目の値を返す」という意味です。
たとえばその位置がB4セルにあたるなら、B4の値が返ります。
このように、INDEXは2次元の表からでも正確に値を指定して取り出せます。
表引きでは、後でこの行番号や列番号をMATCHで探して自動化します。
最初は手入力で行番号・列番号を試し、動きを確認してからMATCHに置き換えると理解しやすいです。
よくあるミス(行列の取り違え等)
行番号と列番号を逆にすると、別の値が返ってしまうので注意が必要です。
とくに列数が多い表では、どちらが行でどちらが列か混乱しやすくなります。
また、配列の指定範囲がずれていると、正しい行列を指定しても期待の値になりません。
範囲の左上が基準になることを意識しておくと、ズレに気づきやすくなります。
迷ったら、まず手で行番号と列番号を決めて動作確認すると解決が早いです。
1つずつ確認しながら進めることで、INDEXの仕組みを確実に理解できます。
MATCH関数の基本|値が何番目にあるかを探す
MATCHは、指定した値が範囲の中で「何番目にあるか」を返す関数です。
言い換えると、MATCHは“値そのもの”を返すのではなく、「位置(順番)」という数字を返す関数です。
この「位置を返す」という性質が、INDEXと組み合わせたときに大きな力を発揮します。
つまりMATCHは、INDEXに渡すための“行番号や列番号を自動で作る役”として使います。
単体でも使えますが、実務ではINDEXとセットで覚えるのが効率的です。
構文と「検索値/範囲/照合の型」
基本の形は、=MATCH(検索値, 検索範囲, 照合の型) です。
3つの引数それぞれに明確な役割があります。
検索値は、探したい文字や数値を指定します。
ここにはセル参照を入れることが多く、入力値に応じて結果が変わるようにします。
検索範囲は、その値を探す1列(または1行)の範囲を指定します。
MATCHは基本的に“1列または1行”のような一次元の範囲を対象にする点がポイントです。
照合の型は一致方法で、表引きでは0(完全一致)を使うのが基本です。
この第3引数を省略すると意図しない近似一致になる場合があるため、実務では明示的に0を指定するのが安全です。
完全一致(0)の基本例
たとえばA2:A6に商品コードがあり、セルE2のコードが何番目か知りたいなら、=MATCH(E2,A2:A6,0) と書けます。
この式は「E2の値を、A2:A6の中から完全一致で探す」という意味になります。
結果が2なら「範囲A2:A6の中で上から2番目にある」という意味です。
つまりA3セルに該当する値がある、という位置情報を返しています。
この数字をそのままINDEXの行番号に使うと、表引きの型が完成します。
MATCHが“位置”、INDEXが“中身”という役割分担を意識すると、式の流れが理解しやすくなります。
近似一致(1/-1)はいつ使う?注意点は?
照合の型が1や-1は、近い値を探す“近似一致”で、成績表の判定や料金表などに使われます。
たとえば「80点以上ならA評価」といった段階的な判定では、近似一致が役立つことがあります。
ただし近似一致は、検索範囲が昇順(または降順)に並んでいることが前提なので、並びが崩れると誤った結果になりやすいです。
並び順が保証されていないデータで近似一致を使うと、気づきにくい誤判定が起きる可能性があります。
表引きで迷ったら、まずは0(完全一致)だけを使うのが安全です。
特別な理由がない限り、完全一致を基本とすることでトラブルを減らせます。
見つからない時の考え方(#N/A)
MATCHで#N/Aが出るときは、値が存在しないか、空白や全角半角の違いで一致していない可能性があります。
まずは検索値と範囲の見た目が同じか、余計なスペースが入っていないかを確認します。
数値と文字列が混在していないか、表示形式だけが同じになっていないかもチェックポイントです。
エラーが出たときは慌ててIFERRORで隠すのではなく、原因を一つずつ切り分けることが、理解を深める近道になります。
INDEX+MATCHの基本セット|柔軟な検索の作り方
INDEXで「返す範囲」を決め、MATCHで「何番目か」を探して渡すのが基本の考え方です。
役割を分けて考えると、INDEXは“取りに行く人”、MATCHは“場所を案内する人”のような関係になります。
この2つがかみ合うことで、はじめて柔軟で壊れにくい検索式が完成します。
この組み合わせを1つの型として覚えると、VLOOKUPより柔軟に表引きできます。
最初は少し長く感じますが、「返す列をINDEXで指定し、行番号をMATCHで作る」という流れだけ押さえれば十分です。
縦1本の型(行だけMATCH→INDEX)
縦方向の表引きの基本形は、=INDEX(返したい列, MATCH(検索値, 検索列, 0)) です。
この形は、実務で最も出番が多い“王道パターン”です。
たとえばA列が商品コード、B列が価格なら、価格を返したいので返したい列はB2:B100のように指定します。
検索列は商品コードなのでA2:A100、検索値は入力セル(例:E2)を指定します。
MATCH(E2,A2:A100,0) が「何行目か」を返し、その数字をINDEXが受け取ってB列から価格を返します。
このように、MATCHの結果がそのままINDEXの行番号に入る、という流れを理解することが重要です。
この型を使うと、検索列が左でも右でも、返したい列を自由に選べます。
つまり、検索列と返す列の位置関係に縛られないため、表のレイアウトが変わっても柔軟に対応できます。
行と列を両方MATCHする(クロス検索)
見出し行と見出し列の両方をMATCHで探すと、表のど真ん中の値も取れます。
これは「行番号」と「列番号」の両方を動的に作るイメージです。
基本形は、=INDEX(表全体, MATCH(行見出し, 行見出し列, 0), MATCH(列見出し, 列見出し行, 0)) です。
たとえば「氏名×月」の表から値を取りたいときに、行のMATCHで氏名の行番号、列のMATCHで月の列番号を作れます。
このとき、行と列をそれぞれ独立して探している点がポイントです。
どちらか一方の並びが変わっても、見出しが一致していれば正しい交点を取得できます。
この形は“見出しで引く”ので、列の並びが変わっても壊れにくいのが強みです。
帳票のレイアウト変更が多い業務では、このクロス検索の考え方が特に役立ちます。
絶対参照($)とコピーのコツ
同じ式を下や右にコピーするなら、範囲は$で固定しておくと崩れにくいです。
数式をコピーしたときに参照がずれてしまうと、正しい範囲を見に行かなくなるため注意が必要です。
たとえば検索列や返す列は$A$2:$A$100のように絶対参照にし、検索値だけを相対参照にするのが定番です。
「どこを固定し、どこを動かすのか」を意識して式を組み立てると、コピー後のトラブルを防げます。
まずは「固定するのは表の範囲、動かすのは入力セル」と覚えると整理できます。
慣れてきたら、列だけ固定($A2)や行だけ固定(A$2)なども使い分けられるようになると応用が広がります。
IFERROR等はどこに巻く?
見つからないときの#N/Aを見せたくないなら、IFERRORで外側から包むのが扱いやすいです。
たとえば=IFERROR(INDEX(…),\”\”)のようにすると、エラー時に空白にできます。
IFERRORはあくまで“最後に見た目を整えるための処理”として使うのが基本です。
途中でエラーを隠してしまうと、どこで問題が起きているのか分かりにくくなります。
ただし、原因が見えなくなるので、最初はエラーを出して原因を直す運用の方が安全です。
式が正しく動くことを確認してから、必要に応じてIFERRORで整える、という順番を意識するとトラブルを減らせます。
VLOOKUPとの違い|INDEX・MATCHが優れている点
VLOOKUPは手軽で分かりやすく、初心者でも比較的すぐに使える関数です。
しかし実務では、「表の構造が後から変わる」「引きたい列が検索列の左側にある」といったケースが頻繁に発生します。
そのたびに式を修正したり、列番号を数え直したりしていると、小さなミスが積み重なりやすくなります。
INDEX・MATCHは少し長い式になりますが、その分だけ自由度と保守性が上がります。
“今は動く”だけでなく、“将来も壊れにくい”という視点で見ると、INDEX・MATCHの強みがはっきりしてきます。
左方向検索ができる(検索方向の自由度)
VLOOKUPは、検索列より右側しか返せないという制約があります。
そのため、検索列の左側にあるデータを取りたい場合は、列を入れ替えるか、別の関数を使う必要があります。
一方でINDEX・MATCHは、返したい列をINDEXで自由に指定できるので、左方向の検索も自然に行えます。
検索列と返す列を独立して指定できるため、表のレイアウトに縛られません。
つまり、表の並びに縛られずに“取りたい列を取りにいける”のが大きな違いです。
この柔軟性は、既存の表をそのまま活かしたいときや、他部署から受け取ったデータを加工せずに使いたいときに特に役立ちます。
列番号が不要で、列の追加・移動に強い
VLOOKUPは第3引数で「何列目を返すか」を数字で指定します。
この列番号は、表の左から数えた位置を基準にしているため、列が増減すると意味が変わってしまいます。
列を追加したり並べ替えたりすると、その数字が意図しない列を指してしまい、気づきにくいミスにつながります。
とくに列が多い表では、「3列目だったか4列目だったか」を見失いやすくなります。
INDEX・MATCHは列番号をMATCHで見出しから取得できるので、表の構造変更に強いです。
見出しを基準にして列を特定すれば、列の順番が変わっても正しい列を参照できます。
長期運用するファイルほど、この“列番号に依存しない設計”のメリットが大きくなります。
複数条件に発展しやすい
INDEX・MATCHは「探すための行番号」を自由に作れるので、複数条件に発展しやすいです。
行番号を作るロジックを工夫すれば、「氏名かつ月」「商品コードかつ店舗」などの複合条件にも対応できます。
VLOOKUPでも工夫はできますが、条件が増えると補助列が必要になったり、式が読みにくくなりがちです。
拡張性という点では、INDEX・MATCHの方が柔軟に設計できます。
テーブル/動的範囲との相性
Excelのテーブル(行が増えても範囲が自動で広がる仕組み)と組み合わせると、参照のメンテナンスが楽になります。
INDEX・MATCHは返す列と検索列を個別に指定できるため、テーブル構造との相性が良いです。
動的に増減する表ほど、列番号に頼らないINDEX・MATCHのメリットが出ます。
将来的にデータ量が増えることが分かっている業務では、最初からINDEX・MATCHで設計しておくと、後の修正コストを抑えられます。
使い分けの判断基準|どちらを選ぶ?
結論として、単純な用途ならVLOOKUP、壊れにくさや拡張性を重視するならINDEX・MATCHが向いています。
ただし、これは「どちらが優れているか」という話ではなく、「どんな状況で使うか」によって最適解が変わるという意味です。
大切なのは、関数の名前で選ぶのではなく、「表の構造は今後変わるか」「共有や引き継ぎはあるか」といった運用面まで含めて判断することです。
「どちらが上」というより、場面に応じて自然に選べるようになるのが理想です。
すぐ使いたい・単純な表ならVLOOKUP
検索列が左端にあり、返す列が右側で固定なら、VLOOKUPは短く書けて便利です。
式も比較的シンプルで、Excelに慣れていない人でも読みやすいのが利点です。
一時的な集計や、表の構造が変わらない前提の作業では、VLOOKUPで十分なことも多いです。
また、既存ファイルがすでにVLOOKUP中心で作られている場合は、無理に書き換えず統一感を保つという判断も現実的です。
変更が多い帳票・テンプレならINDEX・MATCH
毎月使う帳票や、列の追加・並び替えが起きやすいテンプレは、列番号のズレが事故になりやすいです。
とくに複数人で更新するファイルでは、知らないうちに列が追加され、VLOOKUPの列番号だけがずれてしまうケースもあります。
「列が変わっても壊れにくい仕組み」を最初から作るなら、INDEX・MATCHが向いています。
見出しを基準に列を特定する設計にしておけば、将来的な変更にも強くなります。
長期運用する帳票や、業務の基幹ファイルほど、壊れにくさを優先する価値があります。
チーム共有での注意(読みやすさ・引き継ぎ)
INDEX・MATCHは式が長くなる傾向があるため、そのままだと読みづらく感じることがあります。
その場合は、範囲に名前を付けたり、見出しを統一したりして、式の意味がひと目で分かるように工夫します。
コメントを残したり、検索列と返す列を明示的に整理しておくことも、引き継ぎでは重要です。
最終的には、チーム全体で「どういう場面ではどの関数を使うか」という共通ルールを持つことが、トラブルを減らす近道になります。
実務でよくあるパターン集
ここでは、実務で出番が多い形を“完成形”としてまとめます。
単なるサンプルではなく、そのまま業務に転用できるレベルの「型」として紹介します。
必要なら自分の表に合わせて、範囲とセル参照だけ置き換えて使えます。
まずは動く形を真似し、そのあとで自分の業務に合わせて少しずつ調整するのが上達の近道です。
商品コード→価格など「キー検索」
キー(商品コードやID)から1つの項目を返すなら、縦1本の型が最も使いやすいです。
これは「1つの検索値に対して、対応する1つの結果を返す」という、もっとも基本的な検索パターンです。
=INDEX(価格列, MATCH(商品コード, コード列, 0)) の形にしておくと、列の位置が変わっても調整しやすいです。
VLOOKUPと違い、検索列がどこにあっても対応できるため、表のレイアウトに縛られにくいのが強みです。
見出しがある表なら、価格列も見出しからMATCHして取りにいくとさらに壊れにくくできます。
たとえば価格という見出しをMATCHで探し、その列番号をINDEXに渡せば、列の並び替えにも強い設計になります。
横持ちデータ(見出し行から列を特定)
月別の売上など、横方向に見出しが並ぶ表では、列番号をMATCHで作るのがコツです。
横持ちデータでは「どの月の列か」を自動で特定できるかどうかが、式の安定性を左右します。
=INDEX(表全体, MATCH(行キー, 行見出し列, 0), MATCH(月, 見出し行, 0)) のようにすると、列の順番が変わっても月で引けます。
この形にしておけば、列を追加したり並び替えたりしても、見出しさえ正しければ正確な値を返せます。
見出しの表記ゆれがあると一致しないので、見出しはなるべく統一します。
全角半角や余計なスペースがあると一致しないこともあるため、データ入力ルールを整えておくことも重要です。
範囲が増減する表での参照の考え方
行が増える表では、テーブル化して参照が自動で広がる状態にすると管理が楽です。
テーブルを使えば、新しい行を追加しても数式の範囲を手動で修正する必要がありません。
テーブルが使えない場合は、見積もって広めの範囲を取り、空白が入っても問題ない設計にします。
ただし、やみくもに列全体を指定すると計算が重くなることもあるため、業務で想定される最大行数を考えて範囲を決めます。
このように、式そのものだけでなく「表の設計」まで含めて考えることが、実務で壊れにくい仕組みを作るコツです。
複数条件検索にチャレンジ(発展編)
複数条件は非常に便利ですが、式が長くなりやすく、環境差や設定ミスでつまずきやすい分野でもあります。
そのため、ここでは“発展編”として位置づけ、基本の1条件検索がしっかり書けることを前提に話を進めます。
まずは1条件の型を確実に使いこなせるようにしてから挑戦すると、式の意味が分からなくなるリスクを減らせます。
「いきなり複雑な式を組む」のではなく、「考え方を分解して組み立てる」意識が大切です。
2条件(例:氏名+月)で特定する発想
考え方の基本は「2つの条件を同時に満たす行番号を作る」ことです。
つまり、氏名が一致し、かつ月も一致する“その行”を特定し、その行番号をINDEXに渡します。
たとえば氏名列と月列があるなら、それぞれの列で条件を満たすかどうかを判定し、両方が真になる位置を探します。
実装方法はいくつかありますが、考え方としては「行番号をどうやって作るか」に集中すると整理しやすいです。
また、可能であれば“行見出しと列見出しをMATCHで引ける表設計”に寄せることで、式をシンプルに保ちやすくなります。
表の設計段階で複数条件を意識しておくと、後から無理に複雑な式を組まずに済む場合もあります。
配列数式の注意(環境差・重くなる)
複数条件を1つの数式で処理しようとすると、配列数式になるケースがあります。
古いExcelでは入力時に特別な操作(Ctrl+Shift+Enter)が必要な場合があり、環境によって挙動が変わることがあります。
そのため、共有ファイルでは「どのバージョンで開くか」を事前に確認することが重要です。
また、範囲が大きすぎると計算量が増え、ファイルが重くなる原因になります。
必要以上に広い範囲を指定せず、業務で実際に使う範囲に絞るのが基本です。
パフォーマンスが気になる場合は、補助列を使って条件を整理する方法も検討できます。
代替案(FILTER/ピボット等で解く)
条件が増えるほど、1つのセルに無理に詰め込むよりも、別の機能を使った方が分かりやすい場合があります。
たとえばFILTER関数を使えば、複数条件に合う行をまとめて抽出でき、式の構造も比較的読みやすくなります。
検索結果が1件とは限らない場合は、FILTERの方が自然な設計になることもあります。
また、集計や分析が目的なら、ピボットテーブルで条件を切り替える方が安全で速いこともあります。
「すべてを関数で解決する」のではなく、「目的に合った機能を選ぶ」視点を持つことが、実務ではとても重要です。
XLOOKUP・FILTERとも比較|今どれを使う?
最近のExcelでは、XLOOKUPやFILTERのように、より直感的で高機能な関数も使えるようになっています。
とくにMicrosoft 365などの新しい環境では、従来のVLOOKUPやINDEX・MATCHを置き換えられる場面も増えています。
ただし、職場の環境や共有ファイルの互換性によって、使える関数が変わる点に注意が必要です。
自分のPCで使えても、相手の環境ではエラーになることがあるため、チーム運用では事前確認が欠かせません。
XLOOKUPの強みと注意点(使える環境か)
XLOOKUPは左検索ができ、列番号も不要で、VLOOKUPの弱点を多く解消しています。
検索範囲と返す範囲をそれぞれ指定する構造なので、式の意味も読み取りやすいのが特徴です。
さらに、見つからない場合の値をあらかじめ指定できるため、IFERRORで包まなくてもエラー処理ができます。
一方で、古いExcel環境では使えない場合があるので、共有前提なら互換性を確認します。
社内でバージョンが混在している場合は、あえてINDEX・MATCHを選ぶ方が安全なケースもあります。
使える環境なら、表引きの第一候補として検討する価値があります。
FILTERの向き不向き(結果が複数になる)
FILTERは条件に合う行をまとめて返すので、検索結果が複数になり得る場面で便利です。
たとえば「今月の売上データだけを抽出する」「特定の担当者の案件を一覧表示する」といった用途に向いています。
一方で、1つの値だけを返す表引きとは目的が少し違うので、用途に合わせて選びます。
単一のセルに1つの値を返したいだけなら、XLOOKUPやINDEX・MATCHの方が構造がシンプルです。
結局のおすすめ(状況別の一行結論)
迷ったら、使える環境ならXLOOKUP、互換重視や長期運用を考えるならINDEX・MATCHを選ぶと判断が早いです。
まとめ|検索が安定するとExcelがラクになる
表引きが安定すると、帳票の修正やデータの追加が発生しても、毎回式を直すストレスが大きく減ります。
「なぜか数字が合わない」「どこが壊れたのか分からない」と慌てる回数が減るだけでも、日々の業務はかなり楽になります。
INDEX・MATCHは最初だけ難しく見えますが、基本の型を一度理解してしまえば、長く使い続けられる“再利用できる武器”になります。
とくに、表の構造が変わりやすい実務環境では、壊れにくい検索方法を持っていることが大きな安心材料になります。
本記事のまとめ(3〜5点)
INDEXは「指定した行・列から値を取り出す」関数であり、表の中の住所を指定して中身を返す役割を持っています。
MATCHは「値が何番目にあるか」を返し、INDEXに渡す行番号や列番号を自動で作る補助役です。
INDEX・MATCHを組み合わせることで、左方向の検索ができ、列の追加や移動にも強い“壊れにくい式”を作れます。
VLOOKUPは単純な表なら手軽で便利ですが、構造変更が起きやすい場面では注意が必要です。
大切なのは優劣ではなく、場面に応じて適切な関数を選べるようになることです。
練習の小さな課題(縦検索→左検索→クロス)
まずは縦1本の型で「コード→価格」を引く式を作り、MATCHの結果をINDEXに渡す流れを確認してみます。
次に、検索列の右と左で返す列を変え、VLOOKUPでは難しい左検索を実際に体験してみます。
左検索が自然に書けることを体感すると、INDEX・MATCHの強みがはっきり分かります。
最後に、行見出しと列見出しをMATCHして、クロス検索で値を取る練習をします。
見出しを頼りに値を取得できれば、列の並びが変わっても壊れにくい設計ができるようになります。
次にやること(見直しポイント)
式が動かないときは、まず範囲のズレがないか、照合の型が0(完全一致)になっているかを最初に見直します。
次に、検索値と検索範囲のデータ形式(数値か文字列か、余計な空白がないか)も確認します。
慣れてきたら、見出しで列を特定する形に寄せて、列番号に依存しない壊れにくいテンプレに育てていきます。
最終的には、自分の業務でよく使う表をINDEX・MATCH型に置き換えてみることで、理解がさらに深まります。