検索関数:VLOOKUP・INDEX-MATCH・XLOOKUP
3つの必須検索関数でテーブル間のデータを自在に連携させる。それぞれの使い分けとAIでの生成法を学ぶ。
会話できない2つのスプレッドシート
営業チームは「顧客注文」と「商品価格表」を別々のスプレッドシートで管理していた。毎月、インターンが1つずつ商品を手引きし、価格を注文シートに手入力していた。300商品、1,000件の注文。40時間のエラーだらけの手作業。
VLOOKUPの数式1つで、40時間が4秒になった。
🔄 前のレッスンでデータをフラットテーブルに整理した。クリーンで一貫性のあるデータが重要な理由を覚えているだろうか?検索関数はクリーンなデータに依存する。「ウィジェット」と「ウィジェット 」(末尾にスペース)はマッチしない。レッスン3の整理がレッスン4を機能させる。
VLOOKUP:定番の検索関数
VLOOKUPは範囲の最左列で値を検索し、指定した列の値を返す。
構文: =VLOOKUP(検索値, 範囲, 列番号, [検索方法])
例: 商品IDから価格を取得:
=VLOOKUP(A2, 商品表!A:C, 3, FALSE)
A2—— 検索する値(商品ID)商品表!A:C—— 検索範囲(商品表シートのA〜C列)3—— 3列目(価格)の値を返すFALSE—— 完全一致(ほぼ常にFALSEを使う)
よくあるVLOOKUPミス:
| ミス | 問題 | 対処法 |
|---|---|---|
| FALSEの付け忘れ | 近似値を返し、誤った結果になる | 完全一致にはFALSEを必ず指定 |
| 列番号の間違い | 別の列のデータが返る | 列数を慎重にカウント |
| 検索列が最左列でない | #N/Aエラー | テーブル再構成かINDEX-MATCHを使用 |
| データの余計なスペース | 「同じ値」なのに#N/A | 検索値とデータの両方にTRIMを適用 |
✅ Quick Check: VLOOKUPが#N/Aを返すが、テーブルにその値は確かに存在する。最も可能性の高い3つの原因は?
INDEX-MATCH:柔軟な最強コンビ
2つの関数の組み合わせで動作する:
MATCH —— 範囲内で値の位置(行番号)を見つける INDEX —— 指定した位置の値を返す
構文: =INDEX(返す範囲, MATCH(検索値, 検索範囲, 0))
例: 先ほどのVLOOKUPと同じ処理:
=INDEX(商品表!C:C, MATCH(A2, 商品表!A:A, 0))
商品表!C:C—— 値を返す列(価格)A2—— 検索する値(商品ID)商品表!A:A—— 検索する列0—— 完全一致
INDEX-MATCHが優れている理由
- どの方向にも検索可能。 VLOOKUPは右方向のみ。INDEX-MATCHは左にも右にも、完全に別のテーブルにも検索できる。
- 列の挿入で壊れない。 VLOOKUPの列番号は列を挿入するとずれる。INDEX-MATCHは列参照を使うためずれない。
- 大規模データで高速。 10万行以上のデータセットでINDEX-MATCHの方がパフォーマンスが良い。
2つのテーブル間でデータを検索したい:
テーブル1(注文表):注文ID、商品ID、数量、顧客名
テーブル2(商品表):商品ID、商品名、単価、カテゴリ
注文表に商品名と単価を引っ張りたい。
VLOOKUPとINDEX-MATCHの両方の数式を書いて、
この場面でどちらが適しているか理由とともに説明してください。
XLOOKUP:モダンな解決策
Excel 365とGoogleスプレッドシートで使える。VLOOKUPとINDEX-MATCHの両方を置き換えるシンプルな構文。
構文: =XLOOKUP(検索値, 検索範囲, 返す範囲, [見つからない場合])
例:
=XLOOKUP(A2, 商品表!A:A, 商品表!C:C, "該当なし")
A2—— 検索値商品表!A:A—— 検索する場所商品表!C:C—— 返す値"該当なし"—— マッチしない場合の表示(エラー処理内蔵)
✅ Quick Check: 古いバージョンのExcelを使う人にもシートを共有する場合、XLOOKUPを使うべきか?安全な代替策は?
使い分けガイド
| 場面 | 推奨関数 | 理由 |
|---|---|---|
| 手早い一回限りの検索 | VLOOKUP | 書くのが最速 |
| 本番の共有スプレッドシート | INDEX-MATCH | 最も互換性が高く堅牢 |
| Excel 365 / Googleスプレッドシート限定 | XLOOKUP | 最もシンプル、エラー処理内蔵 |
| 検索列が最左列でない | INDEX-MATCH / XLOOKUP | VLOOKUPは左方向に検索できない |
| 大規模データ(10万行超) | INDEX-MATCH | 最高のパフォーマンス |
複数条件の検索
商品「ウィジェット」かつ地域「北海道」の価格を検索したいとき。
方法1:ヘルパー列で結合
ヘルパー列を追加:=A2&B2 で「ウィジェット北海道」を作り、VLOOKUPで検索。
方法2:INDEX-MATCHの配列数式
=INDEX(C:C, MATCH(1, (A:A="ウィジェット")*(B:B="北海道"), 0))
※配列数式:ExcelではCtrl+Shift+Enter。Googleスプレッドシートではそのまま動作。
Key Takeaways
- VLOOKUPは最もシンプルだが、右方向のみ検索でき、列挿入で壊れやすい
- INDEX-MATCHはより柔軟で堅牢。本番スプレッドシートにはこちらが安全
- XLOOKUPは両方の長所を兼ね備えるが、Excel 365 / Googleスプレッドシートが必要
- VLOOKUPではほぼ常にFALSE(完全一致)を指定すること
- IFERRORでラップして、検索値が見つからない場合のエラーをハンドルする
- AIにデータ構造を日本語で説明すれば、最適な検索数式を生成できる
Up Next
レッスン5:ピボットテーブルでは、スプレッドシート最強の機能を学ぶ。数千行のデータを数クリックで集計・比較・分析——数式を書かずに。
理解度チェック
まず上のクイズを完了してください
レッスン完了!