📋 このステップで学ぶこと
- 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)
⬇️
| 位置 |
値 |
| 1 |
商品A |
| 2 |
商品B |
| 3 |
商品C ← 見つかった! |
| 4 |
商品D |
| 5 |
商品E |
📊 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
🎯 覚え方のコツ
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)
結果:
解説: 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(完全一致)です。
artnasekai
#artnasekai #学習メモ