今回は、ExcelのXLOOKUP関数を使用して、複数の条件に一致するデータを正確に検索・抽出する方法について紹介します。
XLOOKUP関数と複数条件検索の必要性
Excelで別の表からデータを引っ張ってくる際、長年VLOOKUP関数が標準的に使われてきました。
しかし、VLOOKUP関数には「検索値は1つしか指定できない」という仕様上の大きな弱点があります。
実務においては、「商品名」だけで検索すると同じ名前でサイズ違いの商品が複数ヒットしてしまい、「商品名」と「サイズ」の両方が一致する単価を探したい、といった「複数条件での検索」が頻繁に求められます。
従来は、作業列を作って2つの条件を結合したり、INDEX関数とMATCH関数を複雑に組み合わせたりといった工夫が必要でしたが、新しい関数であるXLOOKUP関数を使えば、作業列なしで、しかも直感的な数式で複数条件の検索を実現できます。
XLOOKUP関数の基本的な構文
まずはXLOOKUP関数の基本形を確認します。
=XLOOKUP(検索値, 検索範囲, 戻り値の範囲, [見つからない場合], [一致モード], [検索モード])
VLOOKUP関数とは異なり、「どこを検索するか(検索範囲)」と「どこを抽出するか(戻り値の範囲)」を別々に指定できるのが最大の特徴です。
この柔軟な構造により、検索範囲を複数組み合わせるという高度なテクニックが可能になります。
アンパサンド(&)を使った複数条件の設定
XLOOKUP関数で複数の条件を指定する最もシンプルで実用的な方法は、「&(アンパサンド)」記号を使って検索値と検索範囲をそれぞれ結合してしまう方法です。
検索値と検索範囲をそれぞれ結合する
例えば、A列に「店舗名」、B列に「商品名」、C列に「売上」が入力されているデータ表があるとします。
別シートで、「東京本店」の「商品X」の売上を抽出したい場合、検索値は2つになります。
このとき、XLOOKUP関数の第1引数(検索値)を「”東京本店” &
“商品X”」のようにアンパサンドで繋ぎます。(実際の数式では、それぞれが入力されているセル番地「G2 & H2」のように指定します)
そして、第2引数(検索範囲)も同じように、データ表の「店舗名の列(A列)」と「商品名の列(B列)」をアンパサンドで繋ぎ、「A:A & B:B」と指定します。
数式にすると以下のようになります。
=XLOOKUP(G2 & H2, A:A & B:B, C:C)
この数式により、Excel内部で一時的に「東京本店商品X」という仮想の検索値と、「東京本店商品X」という仮想の検索列が作られ、それらが完全に一致する行のC列(売上)の値を返してくれます。
3つ以上の条件にも対応可能
このアンパサンドを使った結合テクニックは、2つの条件だけでなく、3つでも4つでも応用が利きます。
「店舗名」&「商品名」&「担当者名」で検索したい場合は、第1引数を「G2 & H2 & I2」、第2引数を「A:A & B:B &
C:C」と繋いでいくだけです。
作業列をわざわざ作らなくても、数式の中だけで完結するため、元の表のレイアウトを一切変更せずに済むのが大きなメリットです。
論理式(配列数式)を使った複数条件の設定
アンパサンドでの結合は簡単ですが、データの組み合わせによっては「東京 本店(スペース入り)」と「東京本
店」が結合後に同じ「東京本店」になってしまい、誤判定を起こすというごく稀なリスクが存在します。
より厳密でプロフェッショナルな複数条件検索を行いたい場合は、論理式(1と0を使った配列の掛け算)を使用する方法があります。
「1」を検索値とする高度なテクニック
この方法では、XLOOKUP関数の第1引数(検索値)に、あえて「1」という数値を指定します。
そして第2引数(検索範囲)に、複数の条件式をカッコで括り、「*(アスタリスク)」で掛け合わせたものを指定します。
=XLOOKUP(1, (A:A=G2) * (B:B=H2), C:C)
この数式の仕組みを少し分解して解説します。
「(A:A=G2)」という部分は、A列の中でG2(東京本店)と一致する行を「TRUE(1)」、一致しない行を「FALSE(0)」として判定します。
「(B:B=H2)」の部分も同様に、B列の中でH2(商品X)と一致する行を「TRUE(1)」と判定します。
これらを「*」で掛け合わせると、両方の条件を満たしている(1 * 1)行だけが「1」となり、どちらか一方でも満たしていない(1 * 0
など)行は「0」になります。
結果として、第2引数の検索範囲の中には、すべての条件をクリアしたたった1つの行にだけ「1」が存在することになります。
そこで、第1引数の検索値で「1」を探すよう指示することで、複数の条件を完全に満たした行のデータを正確に抽出できるというわけです。
エラー処理と見つからない場合の対応
複数条件での検索は、条件が厳しくなる分、「該当するデータが存在しない」という結果になる確率も高くなります。
XLOOKUP関数は、この点においても従来より進化しています。
第4引数でエラー表示をコントロール
VLOOKUP関数でデータが見つからない場合、「#N/A」というエラーが表示されてしまうため、IFERROR関数を組み合わせて空白にする処理が必要でした。
しかし、XLOOKUP関数には最初から「見つからない場合」の引数(第4引数)が用意されています。
=XLOOKUP(G2 & H2, A:A & B:B, C:C, “該当なし”)
このように、第4引数に表示させたい文字(空白にしたい場合は「””」)を指定しておくだけで、IFERROR関数を使わずにスマートなエラー処理が完了します。
複数条件検索の複雑な数式を、さらにIFERROR関数で囲む必要がなくなるため、数式全体の可読性が大きく向上します。
まとめ
ExcelのXLOOKUP関数を使って、複数の条件を指定してデータを検索・抽出する方法について解説しました。
作業列を作らなくても、「&(アンパサンド)」を使って検索値と検索範囲をそれぞれ結合するだけで、直感的に複数条件検索を実現できるのがXLOOKUPの大きな強みです。
さらに厳密な判定が求められる場面では、検索値を「1」とし、論理式を「*(アスタリスク)」で掛け合わせる高度なテクニックも有効です。
商品名とサイズ、日付と担当者など、実務のデータ分析において条件が1つで済むケースはむしろ少数派と言えます。
従来のVLOOKUP関数と作業列の組み合わせに煩わしさを感じていた方は、このXLOOKUP関数の複数条件検索をマスターすることで、シートの構造をクリーンに保ちながら、より高度で正確なデータ抽出を行ってみてはいかがでしょうか。