Excelの2列同時検索を完全制覇|VLOOKUP限界派が次に学ぶべき4つの方法
「東京支店の田中さんの売上を調べたい」——そう思ってVLOOKUPを書いたら、大阪支店の田中さんのデータが返ってきた。 こんな経験はありませんか?
1列だけでは絞り込めないデータは実務に溢れています。支店×担当者、年月×商品名、部署×社員番号……どれも「2つの条件が揃って初めて一意に特定できる」ケースです。
この記事を読み終えると、4つのアプローチを状況に応じて使い分け、複合キー検索を自在に扱えるようになります。 古いExcelユーザーも、最新の365ユーザーも、自分の環境に合った最適解がわかります。
前提:なぜ2列検索が必要なのか
以下のサンプルテーブルを使います。「田中」という担当者が東京・大阪の両支店に存在する点に注目してください。
| 支店名 | 担当者 | 売上 | 目標 | 達成率 |
|---|---|---|---|---|
| 東京 | 田中 | 120 | 100 | 120% |
| 東京 | 佐藤 | 95 | 100 | 95% |
| 大阪 | 田中 | 80 | 100 | 80% |
| 大阪 | 鈴木 | 110 | 100 | 110% |
| 名古屋 | 佐藤 | 75 | 90 | 83% |
| 名古屋 | 田中 | 130 | 120 | 108% |
「東京」かつ「田中」の売上(120) を取得することが今回のゴールです。支店名だけでもなく、担当者名だけでもなく、2列の組み合わせで一意に絞り込むのが複合キー検索の本質です。
⚠️ 全方法共通の重要注意:区切り文字を必ず入れよう
4つの方法を紹介する前に、すべてに共通する落とし穴をお伝えします。
A2&B2 のように2列を単純に連結すると、意図しない誤マッチが起きることがあります。
- 「東京田」+「中」→「東京田中」
- 「東京」+「田中」→「東京田中」
上記2つは連結すると同じ文字列になってしまいます。これを防ぐため、データに含まれない文字(アンダースコアなど)を区切り文字として挟むのが鉄則です。
❌ 危険: E2&F2, A2:A5&B2:B5 ✅ 安全: E2&"_"&F2, A2:A5&"_"&B2:B5
以降のすべての数式例は、この安全な書き方で統一します。
方法①:INDEX × MATCH(配列数式)【全バージョン対応】
最も歴史が長く、古いExcelでも動作する王道手法です。
=INDEX(C2:C7, MATCH(E2&"_"&F2, A2:A7&"_"&B2:B7, 0))
MATCHの検索値と検索範囲をそれぞれ&で連結し、2条件を1つの文字列に変換して比較します。
⚠️ Excel 365以外では Ctrl+Shift+Enter で配列数式として入力が必要です。
この方法を選ぶとき
- Excel 2016以前など、古いバージョンを使っている
- 職場でファイルを共有しており、受け取る相手のバージョンが不明
方法②:INDEX × XMATCH【365/2021推奨・Ctrl+Shift+Enter不要】
Excel 365 / 2021以降で使えるXMATCHを採用したモダン版です。書き方はほぼ同じながら、配列数式の入力(Ctrl+Shift+Enter)が不要になります。
=INDEX(C2:C7, XMATCH(E2&"_"&F2, A2:A7&"_"&B2:B7))
MATCHとXMATCHの主な違い
| 機能 | MATCH | XMATCH |
|---|---|---|
| 配列数式不要 | ❌ | ✅ |
| 逆順(末尾から)検索 | ❌ | ✅ |
| ワイルドカード検索 | ✅ | ✅ |
| 見つからない時のエラー処理 | ❌ | ✅ |
XMATCHは単なる「新しいMATCH」ではなく、逆順検索やエラー処理など実務で痒いところに手が届く機能が追加されています。
方法③:XLOOKUP(2列連結パターン)【365/2021推奨・最もシンプル】
ルックアップ系関数の最新版XLOOKUPでも同じ発想で書けます。INDEX+XMATCHをさらに1つの関数にまとめたイメージです。
=XLOOKUP(E2&"_"&F2, A2:A7&"_"&B2:B7, C2:C7, "該当なし")
数式の読み方
E2&"_"&F2:検索値(例:「東京_田中」)A2:A7&"_"&B2:B7:検索範囲(「東京田中」「東京佐藤」…という配列)C2:C7:返す値の範囲"該当なし":見つからなかった場合の代替値(省略可)
エラー処理を数式の外に書かなくてよいのがXLOOKUPの大きな魅力。IFERRORでラップする手間がなくなります。
方法④:XLOOKUP × CHOOSECOLS【365/2021推奨・複数列を一括取得】
売上だけでなく、目標・達成率も同時に取り出したい場合に活躍する組み合わせです。
CHOOSECOLSは「指定した列番号の列だけを抜き出す」関数です。XLOOKUPの戻り値範囲として渡すことで、複数列を柔軟に返せます。
=XLOOKUP(E2&"_"&F2, A2:A7&"_"&B2:B7, CHOOSECOLS(C2:E7, 1, 2, 3))
この数式1つで「売上・目標・達成率」の3列がスピルで横方向に自動展開されます。
使いどころ
- 検索結果として複数の属性をまとめて取り出したいとき
- 列の順番を入れ替えて返したいとき(
CHOOSECOLS(C2:E7, 3, 1, 2)のように自由に並び替え可能)
方法比較まとめ
| 方法 | 数式の簡潔さ | 配列入力不要 | 複数列返却 | 対応バージョン |
|---|---|---|---|---|
| INDEX + MATCH | △ | ❌ | △ | 全バージョン |
| INDEX + XMATCH | ○ | ✅ | △ | 365 / 2021 |
| XLOOKUP | ◎ | ✅ | ○ | 365 / 2021 |
| XLOOKUP + CHOOSECOLS | ◎ | ✅ | ◎ | 365 / 2021 |
選び方の早見表:
- 古いExcel(2016以前)を使っている → INDEX + MATCH
- 365/2021でシンプルに書きたい → XLOOKUP
- 複数列をまとめて返したい → XLOOKUP + CHOOSECOLS
その他の実務Tips
大文字・小文字を区別したい場合
XLOOKUPはデフォルトで大文字小文字を区別しません。「ABC」と「abc」を別物として扱いたい場合は、EXACT関数と配列数式を組み合わせた以下の構文を使います。
=INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, E2) * EXACT(B2:B7, F2), 0))
EXACTが完全一致(大文字小文字区別あり)を返し、*でAND条件を表現します。入力は Ctrl+Shift+Enter が必要です。
まとめ
2列検索は、「2つの条件を1つの文字列に連結する」 というシンプルな発想が軸です。この考え方さえ掴めば、INDEX+MATCHでもXLOOKUPでも同じアプローチで解決できます。
まずは手元のデータで方法③のXLOOKUPから試してみてください。「1列検索の壁」を越えた瞬間、Excelでのデータ分析の幅が一気に広がります。
📌 このシリーズの他の記事も合わせてどうぞ → Lookupシリーズ一覧