doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Excelの2列同時検索を完全制覇|VLOOKUP限界派が次に学ぶべき4つの方法

スポンサーリンク


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, "該当なし")

数式の読み方

  1. E2&"_"&F2:検索値(例:「東京_田中」)
  2. A2:A7&"_"&B2:B7:検索範囲(「東京田中」「東京佐藤」…という配列)
  3. C2:C7:返す値の範囲
  4. "該当なし":見つからなかった場合の代替値(省略可)

エラー処理を数式の外に書かなくてよいのが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シリーズ一覧