Excelで「ある条件に合うデータを取り出したい」と思ったとき、多くの人が最初に思い浮かべるのは VLOOKUP関数 ではないでしょうか。
しかし、実務で使い込んでいくと VLOOKUP には限界があります。そこで真価を発揮するのが、今回ご紹介する INDEX関数 と MATCH関数 の組み合わせです。
「なんだか難しそう…」と思った方、ご安心ください。この記事では、Excelを触り始めたばかりの方でも理解できるように、ひとつずつ丁寧に解説していきます。
1. まずは単独で理解しよう ― INDEX関数とは?
INDEX関数の役割
ひとことで言うと、INDEX関数は 「表の中から、◯行目・◯列目にある値を取り出す」 ための関数です。
座席表を思い浮かべてください。「3列目の2番目の席」と言われれば、誰が座っているか特定できますよね。INDEX関数はまさにそれと同じ動きをします。
基本の書き方
=INDEX(範囲, 行番号, 列番号)
| 引数 | 意味 |
|---|---|
| 範囲 | データが入っている表全体 |
| 行番号 | 上から何番目か |
| 列番号 | 左から何番目か |
例1:1列だけの表から取り出す
下のような商品リストがあるとします。
| A列 | |
|---|---|
| 1行目 | りんご |
| 2行目 | みかん |
| 3行目 | バナナ |
| 4行目 | ぶどう |
「2番目の商品(=みかん)」を取り出したいときは、こう書きます。
excel
=INDEX(A1:A4, 2)
→ 結果:みかん
A1からA4の範囲のうち、上から2番目を取り出した、というシンプルな動きです。
例2:表(行と列)から取り出す
今度はもう少し本格的な表です。
| A列(商品名) | B列(価格) | C列(在庫) | |
|---|---|---|---|
| 1行目 | りんご | 100 | 50 |
| 2行目 | みかん | 80 | 30 |
| 3行目 | バナナ | 120 | 20 |
「2行目・3列目の値(=みかんの在庫)」を取り出すには:
excel
=INDEX(A1:C3, 2, 3)
→ 結果:30
このように、INDEX関数は 「住所」を指定すれば、その場所にある値を持ってきてくれる 関数なのです。
2. もう一つの主役 ― MATCH関数とは?
MATCH関数の役割
INDEX関数は「◯行目・◯列目」と数字で指定する必要がありました。でも、実務では「『みかん』が何行目にあるか」なんて、毎回数えていられません。
そこで登場するのが MATCH関数 です。MATCH関数は 「探したい値が、範囲の中で何番目にあるかを教えてくれる」 関数です。
基本の書き方
=MATCH(探したい値, 範囲, 照合の種類)
| 引数 | 意味 |
|---|---|
| 探したい値 | 見つけたい文字や数字 |
| 範囲 | 探す対象の列または行 |
| 照合の種類 | 基本は「0」(完全一致)を指定 |
💡 ポイント:照合の種類は「0」と覚えてOK。1や-1もありますが、初心者のうちは「0:完全一致」だけ使えれば困りません。
例1:列の中から探す
| A列 | |
|---|---|
| 1行目 | りんご |
| 2行目 | みかん |
| 3行目 | バナナ |
| 4行目 | ぶどう |
「『バナナ』は何番目にある?」と聞きたいとき:
excel
=MATCH("バナナ", A1:A4, 0)
→ 結果:3
A列の中で、バナナは上から3番目にある、という意味です。
例2:見出し行から探す
| A列 | B列 | C列 | |
|---|---|---|---|
| 1行目 | 商品名 | 価格 | 在庫 |
「『在庫』という見出しは何列目?」と聞きたいとき:
excel
=MATCH("在庫", A1:C1, 0)
→ 結果:3
MATCH関数は 「位置(番号)」を返す関数 だと覚えておきましょう。
3. いよいよ本題 ― INDEX × MATCHの組み合わせ
ここまでの2つを合体させると、すごいことが起きます。
- MATCH関数:値の「位置」を見つける
- INDEX関数:位置から「値」を取り出す
つまり、MATCHが調べた位置を、INDEXに渡してあげる という連携プレーです。
基本パターン
=INDEX(取り出したい列, MATCH(検索値, 検索する列, 0))
例1:商品名から価格を取り出す
| A列(商品名) | B列(価格) | |
|---|---|---|
| 1行目 | りんご | 100 |
| 2行目 | みかん | 80 |
| 3行目 | バナナ | 120 |
| 4行目 | ぶどう | 300 |
「『バナナ』の価格を知りたい」場合:
excel
=INDEX(B1:B4, MATCH("バナナ", A1:A4, 0))
→ 結果:120
動きを分解してみましょう:
MATCH("バナナ", A1:A4, 0)→ 「バナナ」は3番目だから 3 を返すINDEX(B1:B4, 3)→ B列の3番目を取り出して 120 を返す
このように、2つの関数が連携して目的の値を取り出してくれます。
例2:社員番号から名前を取り出す
| A列(社員番号) | B列(氏名) | C列(部署) | |
|---|---|---|---|
| 1行目 | 1001 | 佐藤 | 営業部 |
| 2行目 | 1002 | 鈴木 | 経理部 |
| 3行目 | 1003 | 高橋 | 総務部 |
| 4行目 | 1004 | 田中 | 営業部 |
「社員番号 1003 の人の氏名は?」を調べる:
excel
=INDEX(B1:B4, MATCH(1003, A1:A4, 0))
→ 結果:高橋
例3:部署を取り出したいとき(C列が答え)
同じ表で「社員番号 1002 の部署は?」を調べる:
excel
=INDEX(C1:C4, MATCH(1002, A1:A4, 0))
→ 結果:経理部
取り出したい列を変えるだけで、簡単に応用できます。
4. なぜVLOOKUPより便利なの?
「VLOOKUPでも同じことできるのでは?」と思った方、鋭いです。確かに似たことができます。しかし、INDEX×MATCHには次のような VLOOKUPにない強み があります。
強み①:左方向にも検索できる
VLOOKUPは「検索する列」より右側の列しか取り出せません。一方、INDEX×MATCHは どの方向でもOK です。
例えば、こんな表で「氏名から社員番号を逆引きしたい」場合:
| A列(社員番号) | B列(氏名) | |
|---|---|---|
| 1行目 | 1001 | 佐藤 |
| 2行目 | 1002 | 鈴木 |
| 3行目 | 1003 | 高橋 |
excel
=INDEX(A1:A3, MATCH("鈴木", B1:B3, 0))
→ 結果:1002
VLOOKUPではこの「右から左への検索」はできません。
強み②:列を挿入しても壊れない
VLOOKUPは「左から何列目」と数字で指定するため、表の途中に列を追加すると数式が壊れがちです。INDEX×MATCHは「列そのもの」を指定するので、列の挿入・削除に強いのです。
強み③:動作が軽い
大量データを扱う場合、INDEX×MATCHのほうがVLOOKUPより処理が速いと言われています。
5. 実践例:縦横どちらからも検索する(クロス検索)
INDEX×MATCHの真骨頂、「縦と横の両方から検索」 をご紹介します。
下のような月別売上表があるとします。
| A列 | B列(4月) | C列(5月) | D列(6月) | |
|---|---|---|---|---|
| 1行目 | 商品名 | 4月 | 5月 | 6月 |
| 2行目 | りんご | 1,000 | 1,200 | 1,500 |
| 3行目 | みかん | 800 | 900 | 1,100 |
| 4行目 | バナナ | 1,500 | 1,700 | 2,000 |
「みかんの5月の売上は?」を取り出すには:
excel
=INDEX(A1:D4, MATCH("みかん", A1:A4, 0), MATCH("5月", A1:D1, 0))
→ 結果:900
動きの解説:
MATCH("みかん", A1:A4, 0)→ みかんは3行目 → 3MATCH("5月", A1:D1, 0)→ 5月は3列目 → 3INDEX(A1:D4, 3, 3)→ 表の3行3列目 → 900
縦と横を同時に検索できる、これがVLOOKUPでは難しい高度な使い方です。
6. つまずきやすいポイント
ポイント①:範囲はしっかり揃える
INDEX関数の取り出し範囲と、MATCH関数の検索範囲は 行数を揃える のが鉄則です。
❌ 間違い:
excel
=INDEX(B1:B10, MATCH("バナナ", A1:A4, 0))
範囲がズレているため、正しく取り出せません。
⭕ 正解:
excel
=INDEX(B1:B4, MATCH("バナナ", A1:A4, 0))
ポイント②:照合の種類は「0」を忘れない
MATCH関数の最後の引数「0」を省略すると、想定外の結果になることがあります。完全一致で検索したいなら 必ず「0」をつける ようにしましょう。
ポイント③:絶対参照を上手に使う
数式を下の行にコピーしたい場合は、範囲を 絶対参照($マーク) にします。
excel
=INDEX($B$1:$B$4, MATCH(D2, $A$1:$A$4, 0))
これで数式をコピーしても、参照範囲がズレません。
7. まとめ
| 関数 | 役割 |
|---|---|
| INDEX | 指定した位置の値を取り出す |
| MATCH | 値が何番目にあるかを返す |
| INDEX × MATCH | 検索して取り出す万能コンビ |
最初は「2つの関数を組み合わせるなんて難しそう…」と感じるかもしれませんが、一度仕組みを理解してしまえば、VLOOKUPよりもずっと柔軟に使えるようになります。
ぜひ手元のExcelで、実際に手を動かしながら試してみてください。
💼 経理マンの一言
経理の現場では、毎月のように 「勘定科目別の集計表」「部門別予実管理表」「取引先別の売上明細」 など、似たような表をひっくり返してデータを引っ張る作業が発生します。
私が新人の頃はVLOOKUPばかり使っていましたが、ある日、先輩から「経理ならINDEX×MATCHを覚えておけ」と言われました。理由を聞くと、実務ではこんな場面が頻発するからだそうです。
- 試算表のレイアウトが毎月微妙に変わる(列が増減する)
- 取引先コードから過去の売上を逆引きしたい(右から左の検索)
- 勘定科目×月のクロス集計から特定の値を引っ張りたい
VLOOKUPでは対応しきれないこれらの場面で、INDEX×MATCHは本当に頼りになります。最初は面倒に感じるかもしれませんが、決算の繁忙期に「列が一つズレただけで数式が全部壊れた…」という悲劇を防ぐためにも、今のうちにマスターしておくことを強くおすすめします。
経理という仕事は 「正確さ」と「スピード」 の両立が命です。INDEX×MATCHは、その両方を支えてくれる強力な味方になりますよ。



コメント