Step 35:INDEX+MATCH関数(VLOOKUPの上位互換)

🚀 Step 35: INDEX+MATCH関数(VLOOKUPの上位互換)

VLOOKUPより柔軟で高速な検索をマスターしよう!

📋 このステップで学ぶこと

  • INDEX関数の基本
  • MATCH関数の基本
  • INDEX+MATCHの組み合わせ方
  • VLOOKUPとの違いと使い分け
  • 実務での活用例

🎯 1. なぜINDEX+MATCHを使うのか

VLOOKUPは便利ですが、いくつかの制限があります。INDEX+MATCHを使えば、これらの制限を克服できます。

📊 VLOOKUPの制限とINDEX+MATCHの利点

❌ VLOOKUPの制限
  • 左側の列しか検索できない
    検索キーは必ず一番左の列にある必要がある
  • 列番号を数える必要がある
    列が増減すると数式を修正する必要がある
  • 処理が比較的遅い
    大量データでは遅くなることがある
  • 列を挿入・削除すると壊れる
    列番号が変わると正しく動作しない
✅ INDEX+MATCHの利点
  • どの列からでも検索できる
    右側の列から左側の列を取得可能
  • 列番号を指定しない
    列の挿入・削除に強い
  • 処理が高速
    大量データでも快適に動作
  • 柔軟な検索が可能
    縦横両方向の検索も可能

📝 2. INDEX関数の基本

INDEX関数は、指定した位置のセルの値を取り出す関数です。

📋 INDEX関数の構文(※横スクロールできます)

【INDEX関数の構文】 =INDEX(範囲, 行番号, 列番号) 例: =INDEX(A1:C5, 2, 3) → A1:C5の範囲の2行目、3列目(C2セル)の値を返す

📊 INDEX関数の動作イメージ

=INDEX(A1:C5, 3, 2)
A列
(1列目)
B列
(2列目)
C列
(3列目)
1行目 商品A 100 在庫
2行目 商品B 200 在庫
3行目 商品C 300 完売
4行目 商品D 400 在庫
5行目 商品E 500 在庫
結果
300
3行目の2列目(黄色のセル)の値を取得

📊 INDEX関数の使用例(※横スクロールできます)

【INDEX関数の使用例】 データ範囲(A1:C5): A列 B列 C列 1 商品A 100 在庫 2 商品B 200 在庫 3 商品C 300 完売 4 商品D 400 在庫 5 商品E 500 在庫 数式と結果: =INDEX(A1:C5, 1, 1) → 商品A(1行目1列目) =INDEX(A1:C5, 3, 2) → 300(3行目2列目) =INDEX(A1:C5, 5, 3) → 在庫(5行目3列目)
💡 INDEX関数のポイント

✓ 行番号と列番号で座標を指定してセルの値を取得
✓ 範囲の中での相対的な位置を指定する
✓ 単独では使いにくいが、MATCHと組み合わせると強力

📝 3. MATCH関数の基本

MATCH関数は、検索値が何番目にあるかを返す関数です。

📋 MATCH関数の構文(※横スクロールできます)

【MATCH関数の構文】 =MATCH(検索値, 検索範囲, 照合の種類) 照合の種類: 0 = 完全一致(通常はこれを使う) 1 = 検索値以下の最大値 -1 = 検索値以上の最小値 例: =MATCH(“商品C”, A1:A5, 0) → 「商品C」がA1:A5の中で何番目かを返す(答え: 3)

📊 MATCH関数の動作イメージ

=MATCH(“商品C”, A1:A5, 0)
検索値
商品C
⬇️
位置
1 商品A
2 商品B
3 商品C ← 見つかった!
4 商品D
5 商品E
結果
3
「商品C」は3番目にあります

📊 MATCH関数の使用例(※横スクロールできます)

【MATCH関数の使用例】 データ範囲(A1:A5): A列 1 商品A 2 商品B 3 商品C 4 商品D 5 商品E 数式と結果: =MATCH(“商品A”, A1:A5, 0) → 1(1番目) =MATCH(“商品C”, A1:A5, 0) → 3(3番目) =MATCH(“商品E”, A1:A5, 0) → 5(5番目) =MATCH(“商品Z”, A1:A5, 0) → #N/A(見つからない)
💡 MATCH関数のポイント

✓ 検索値が何番目にあるかを返す
✓ 通常は照合の種類に0(完全一致)を使う
✓ 単独ではあまり使わず、INDEXと組み合わせると強力

🔗 4. INDEX+MATCHの組み合わせ

INDEX関数とMATCH関数を組み合わせることで、VLOOKUPと同じことができ、さらに柔軟な検索が可能になります。

📋 INDEX+MATCHの基本構文(※横スクロールできます)

【INDEX+MATCHの基本構文】 =INDEX(取得したい列の範囲, MATCH(検索値, 検索する列の範囲, 0)) 例: =INDEX(B2:B10, MATCH(“商品C”, A2:A10, 0)) 動作の流れ: 1. MATCH(“商品C”, A2:A10, 0) → 「商品C」が何番目かを探す(例: 3番目) 2. INDEX(B2:B10, 3) → B列の3番目の値を取得

📊 INDEX+MATCHの動作の流れ

=INDEX(B2:B10, MATCH(“商品C”, A2:A10, 0))
ステップ1: MATCHで位置を探す
MATCH(“商品C”, A2:A10, 0)
A列(検索範囲)
商品A
商品B
商品C ← 3番目に見つかった!
結果: 3
ステップ2: INDEXで値を取得
INDEX(B2:B10, 3)
B列(取得範囲)
100
200
300 ← 3番目の値を取得!
結果: 300
✅ 最終結果
300
「商品C」の価格は300円
🎯 覚え方のコツ

MATCH = 「どこにあるか」を探す(行番号を返す)
INDEX = その番号を使って「値を取り出す」

2つを組み合わせると:
「探して(MATCH)」→「取り出す(INDEX)」

⚖️ 5. VLOOKUPとの比較

📊 VLOOKUPとINDEX+MATCHの比較

項目 VLOOKUP INDEX+MATCH
検索方向 左から右のみ どの方向でもOK
列の挿入・削除 数式が壊れる可能性 影響を受けにくい
処理速度 普通 高速
数式の長さ 短い やや長い
理解しやすさ 簡単 やや難しい
柔軟性 低い 高い

📊 同じ結果を得る数式の比較(※横スクロールできます)

【同じ結果を得る数式の比較】 データ: A列 B列 C列 1 商品コード 商品名 単価 2 A001 ノートPC 80000 3 A002 マウス 2000 4 A003 キーボード 3500 「A002」の単価を取得する場合: ■ VLOOKUP: =VLOOKUP(“A002”, A2:C4, 3, FALSE) ■ INDEX+MATCH: =INDEX(C2:C4, MATCH(“A002”, A2:A4, 0)) どちらも結果は同じ: 2000
🔑 使い分けの目安

VLOOKUPを使う場合:
✓ シンプルな検索(左から右)
✓ 他の人と共有するファイル(分かりやすさ重視)

INDEX+MATCHを使う場合:
✓ 右から左への検索が必要
✓ 大量データの処理(速度重視)
✓ 列の挿入・削除が頻繁にある
✓ より高度な検索が必要

💼 6. 実務での活用例

📊 例1: 右から左への検索(※横スクロールできます)

【例1: 右から左への検索】 データ(VLOOKUPでは不可能): A列 B列 C列 1 単価 商品コード 商品名 2 80000 A001 ノートPC 3 2000 A002 マウス 4 3500 A003 キーボード 商品コード「A002」の単価を取得: =INDEX(A2:A4, MATCH(“A002”, B2:B4, 0)) 結果: 2000 VLOOKUPでは不可能(検索キーが右側にあるため)

📊 例2: 複数列から選択的に取得(※横スクロールできます)

【例2: 複数列から選択的に取得】 データ: A列 B列 C列 D列 1 商品コード 商品名 単価 在庫 2 A001 ノートPC 80000 10 3 A002 マウス 2000 50 4 A003 キーボード 3500 30 ■ 商品名を取得: =INDEX(B2:B4, MATCH(“A002”, A2:A4, 0)) 結果: マウス ■ 単価を取得: =INDEX(C2:C4, MATCH(“A002”, A2:A4, 0)) 結果: 2000 ■ 在庫を取得: =INDEX(D2:D4, MATCH(“A002”, A2:A4, 0)) 結果: 50 メリット: ・取得する列の範囲だけを変更すればOK ・列の挿入・削除に強い

📊 例3: エラー処理を追加(※横スクロールできます)

【例3: エラー処理を追加】 基本形: =INDEX(B2:B10, MATCH(“A002”, A2:A10, 0)) エラー処理を追加: =IFERROR(INDEX(B2:B10, MATCH(“A002”, A2:A10, 0)), “未登録”) 見つからない場合は「未登録」と表示

📝 練習問題

練習 1
初級

INDEX+MATCHを使って商品名を取得してください

データ(A1:B5): A列 B列 1 商品コード 商品名 2 P001 りんご 3 P002 みかん 4 P003 バナナ 検索値: P002 INDEX+MATCHで商品名を取得する数式を作成してください

数式:

=INDEX(B2:B4, MATCH(“P002”, A2:A4, 0))

結果: みかん

解説:

1. MATCH(“P002”, A2:A4, 0) → A2:A4の中で「P002」を探す → 2番目
2. INDEX(B2:B4, 2) → B2:B4の2番目の値を取得 → 「みかん」

練習 2
中級

右から左への検索をしてください

データ(A1:C4): A列 B列 C列 1 単価 商品コード 商品名 2 150 P001 りんご 3 100 P002 みかん 4 200 P003 バナナ 商品コード「P003」の単価を取得してください (VLOOKUPでは不可能な右から左への検索)

数式:

=INDEX(A2:A4, MATCH(“P003”, B2:B4, 0))

結果: 200

解説:

1. MATCH(“P003”, B2:B4, 0) → B列で「P003」を探す → 3番目
2. INDEX(A2:A4, 3) → A列の3番目の値を取得 → 200

VLOOKUPでは検索キー(商品コード)が右側にあるため不可能ですが、INDEX+MATCHなら簡単に実現できます。

練習 3
上級

エラー処理を含むINDEX+MATCH

データ(A1:C4): A列 B列 C列 1 商品コード 商品名 単価 2 A001 ノートPC 80000 3 A002 マウス 2000 4 A003 キーボード 3500 検索値が見つからない場合は「商品なし」と表示する INDEX+MATCH+IFERRORの数式を作成してください 検索値: A999(存在しない)

数式(商品名を取得):

=IFERROR(INDEX(B2:B4, MATCH(“A999”, A2:A4, 0)), “商品なし”)

数式(単価を取得):

=IFERROR(INDEX(C2:C4, MATCH(“A999”, A2:A4, 0)), 0)

結果:

  • 商品名: 商品なし
  • 単価: 0

解説: IFERROR関数でINDEX+MATCHを囲むことで、検索値が見つからない場合のエラー処理ができます。商品名は「商品なし」、単価は0を返すようにすると、後続の計算でもエラーが発生しません。

練習 4
中級

セル参照を使ったINDEX+MATCH

データ(A1:C4): A列 B列 C列 1 商品コード 商品名 単価 2 A001 ノートPC 80000 3 A002 マウス 2000 4 A003 キーボード 3500 E1セルに検索する商品コードを入力する形式にしてください E1に「A003」が入力されている場合、単価を取得する数式を作成

数式:

=INDEX($C$2:$C$4, MATCH(E1, $A$2:$A$4, 0))

結果: 3500

解説:

  • 検索値を直接入力ではなくセル参照(E1)にすることで、E1の値を変えるだけで結果が変わる
  • 範囲は絶対参照($)にして、数式をコピーしても範囲がずれないようにする

📝 Step 35 のまとめ

✅ このステップで学んだこと
  • INDEX関数: 指定位置の値を取得
  • MATCH関数: 検索値の位置を取得
  • INDEX+MATCH: 2つを組み合わせた強力な検索
  • VLOOKUPとの違い: 柔軟性と速度で優位
  • 使い分け: 状況に応じた適切な選択
  • 実務活用: 右から左の検索、エラー処理
🎯 次のステップの予告

INDEX+MATCH関数をマスターしました!次のSTEP 36では、「SUMIF/SUMIFS関数(条件付き合計)」を学びます。特定の条件を満たすデータだけを合計する強力な関数です。

❓ よくある質問

Q1: INDEX+MATCHは本当にVLOOKUPより速いですか?
はい、特に大量データ(数千行以上)では顕著な差が出ます。VLOOKUPは左端の列から順番に検索しますが、INDEX+MATCHは効率的に検索するため高速です。ただし、数百行程度なら体感できるほどの差はありません。
Q2: INDEX+MATCHの方が優れているなら、VLOOKUPは使わない方がいいですか?
いいえ、シンプルな検索ならVLOOKUPで十分です。INDEX+MATCHは柔軟で高速ですが、数式がやや複雑で理解しにくいというデメリットもあります。他の人と共有するファイルでは、分かりやすさを優先してVLOOKUPを使うのも良い選択です。
Q3: INDEX関数やMATCH関数を単独で使うことはありますか?
MATCH関数は単独ではあまり使いませんが、INDEX関数は単独で使うこともあります。例えば、「リストの3番目の値を取得」のような場合は INDEX(A1:A10, 3) のように使います。ただし、実務では圧倒的にINDEX+MATCHの組み合わせが多いです。
Q4: 列番号を数えなくていいというのは本当ですか?
はい、本当です。VLOOKUPでは「3列目」のように列番号を指定しますが、INDEX+MATCHでは取得したい列の範囲だけを指定します。例えば C列を取得したいなら INDEX(C2:C10, …) のように指定するので、列の挿入・削除があっても数式が壊れません。
Q5: Googleスプレッドシートでも使えますか?
はい、全く同じ構文でGoogleスプレッドシートでも使えます。ExcelとGoogleスプレッドシートでINDEX+MATCHの動作に違いはありません。
Q6: XLOOKUPという関数を聞いたことがありますが、INDEX+MATCHとどちらを使うべきですか?
XLOOKUPはExcel 365(Microsoft 365)専用の新しい関数で、INDEX+MATCHの利点を1つの関数で実現できます。ただし、Excel 2019以前のバージョンでは使用できないため、互換性を重視する場合はINDEX+MATCHを使用してください。
Q7: MATCHの第3引数(照合の種類)はいつ0以外を使いますか?
1(検索値以下の最大値): 成績評価など、点数に応じてランクを決める場合に使用(データが昇順に並んでいる必要あり)
-1(検索値以上の最小値): 逆に降順のデータで同様の処理をする場合
ただし、実務では99%以上が0(完全一致)です。
📝

学習メモ

Excel・Googleスプレッドシート完全マスター - Step 35

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE