XLOOKUP関数で複数条件を扱う方法|FILTER・INDEXとの違いもわかりやすく解説

XLOOKUP関数で複数条件を扱う方法|FILTER・INDEXとの違いもわかりやすく解説

「XLOOKUP関数」は、従来のVLOOKUPに代わる新しい検索関数として注目されており、柔軟な設定や読みやすい構文が魅力です。
実際に、基本的な使い方を覚えれば「左右どちらにも検索できる」「エラー時の処理が簡単」など、多くの場面で役立ちます。

しかし、実務でよくある「複数の条件でデータを検索したい」という場面では、
「XLOOKUPって複数条件に対応していないの?」「思った通りに動いてくれない……」とつまずいてしまうことも少なくありません。

本記事では、XLOOKUP関数で複数条件を扱う方法や注意点、FILTER関数やINDEX+MATCHとの違いまで、
中級者の方が実務で活用するために知っておきたい応用テクニックをわかりやすく解説します。

複数条件をスマートに処理して、関数の力をもっと活かしてみたい方は、ぜひ参考にしてみてください!

XLOOKUP関数で複数条件を扱う基本と仕組み


XLOOKUPは本来「1条件」での検索に特化した関数

XLOOKUP関数は、指定した検索値に一致するデータを探し、対応する値を返す関数です。
構文もシンプルで、検索範囲・戻り値範囲をそれぞれ指定するだけで済むため、非常に扱いやすい関数といえます。

ただし、XLOOKUPは**「検索値1つに対して検索列も1つ」**という基本構造になっているため、
複数の条件を直接渡すことができないという制限があります。

たとえば、「部署が営業部かつ社員名が田中さん」のようなAND条件での検索は、
そのままXLOOKUPに渡しても動作せず、構文エラーや一致しない結果になるケースが多いです。


「&演算子」で複数条件を結合して使う方法

このような場合には、複数の条件を文字列として結合し、1つの検索キーにすることでXLOOKUPに対応させる方法がよく使われます。

▼構文例:

=XLOOKUP(A2&B2,E2:E11&F2:F11,G2:G11)

このように、検索値と検索列の両方を「&(アンパサンド)」で結合することで、
「部署+氏名」や「商品コード+日付」など、複数の条件を1つの文字列として扱うことができます。

XLOOKUP関数で複数条件例

▼活用シーンの例:

  • 部署ごとの社員一覧から、氏名と部署を指定して該当者のIDを取得

  • 商品+出荷日の組み合わせで、在庫や価格を取得

このように、複数の要素を“ひとつのキー”に変換するという考え方を覚えると、XLOOKUPの応用力が一気に広がります。


データ結合時の注意点とエラー例

検索値と検索列を結合する際は、次のような点に注意する必要があります。

① 空白や全角・半角の違い

たとえば、「山田太郎」と「山田 太郎」(←スペース入り)は別の文字列として扱われ、
検索がうまく機能しないことがあります。

スペースによる表記ゆれ

→ 対策:SUBSTITUTE関数で余分な空白を削除する、全角→半角の統一など

表記ゆれスペース対策

関数による文字整形例
  • SUBSTITUTE関数:文字対象の文字を置換
    • 使用例:
       =SUBSTITUTE(SUBSTITUTE(セル, " ", ""), " ", "")

    • 処理内容:全角スペース・半角スペースをすべて削除

    • 整形前:山田_太郎(全角スペース)

    • 整形後:山田太郎


  • ✅SUBSTITUTE関数+ASC関数:全角→半角にしてから置換
    • 使用例:
       =SUBSTITUTE(ASC(セル), " ", "")

    • 処理内容:全角文字を半角化+半角スペース削除

    • 整形前:山田_太郎(全角スペース)

    • 整形後:山田太郎


  • ASC関数:全角文字を半角文字に変換
    • 使用例:
       =ASC(セル)

    • 処理内容:全角スペース → 半角スペースへ

    • 整形前:山田_太郎(全角スペース)

    • 整形後:山田_太郎


  • TRIM関数:半角スペースを整える
    • 使用例:
       =TRIM(セル)

    • 処理内容:連続した半角スペースを1つに整形

    • 整形前:山田____太郎(スペースが複数)

    • 整形後:山田 太郎

②数値・日付を検索条件に含めるときの注意点

複数条件に日付や数値を含める場合は、検索値と検索範囲で「値の形式(データ型)」が一致しているかを確認することが重要です。

Excelでは、日付は内部的には「シリアル値(連番の数値)」として管理されています。
そのため、検索値の方を TEXT(G2, "yyyy/m/d") のように文字列に変換すると、検索対象がシリアル値のままでは一致しないことがあり、#N/A エラーになるケースも少なくありません。

日付が絡む検索比較(日付のままOR文字列)

✅ 対処法の例:

方法 説明
検索値を変換しない(そのまま使う) =XLOOKUP(氏名&G2, 結合済み検索列, 戻り値列) のように、日付をそのままシリアル値で検索するのが最も確実
検索対象もTEXT関数で文字列にする 両者を TEXT(..., "yyyy/m/d") でそろえれば一致するが、表示形式の違いに注意が必要

補足:目に見える表示と内部の「値」は違う

セルに表示されている日付が「2018/4/1」となっていても、内部的には「43210」のような数値として保持されています。
この「見た目」と「中身」のズレが原因で一致しないことがあるため、特にTEXT関数を使うときは、検索対象と検索値の型を揃えることを意識しましょう。

③ 関数が長くなりすぎるときはIFERRORでエラー処理を追加

=IFERROR(XLOOKUP(...), "該当なし")

事前にデータを整えておくことで、XLOOKUPの複数条件も安定して使えるようになります。

IFERROR関数でのエラー回避例


次章では、これらの仕組みを踏まえて、実際の業務で役立つ複数条件の応用テクニックを紹介していきます。


実務で役立つXLOOKUPの複数条件応用テクニック


実例① 商品×日付で単価を取得する

実務では「同じ商品でも出荷日によって単価が異なる」といったケースがあります。
このようなとき、商品名と出荷日の2つの条件で単価を検索できると便利です。

▼使用例:

商品名 出荷日 単価
りんご 2024/5/1 120円
りんご 2024/5/2 130円
みかん 2024/5/1 100円

この表から「りんご × 2024/5/2」の単価を取得したい場合、次のように検索列を結合し、検索値側も同様に結合します。

=XLOOKUP(E2&F2,A2:A5&B2:B5,C2:C5)

※E2:商品名、F2:出荷日
※A列:商品名、B列:出荷日、C列:単価

XLOOKUP複数条件_活用例1果物在庫

💡ポイント:

  • 出荷日が「日付形式(シリアル値)」として正しく扱われていれば、TEXT関数を使わなくても一致します。
    ただし、検索値と検索対象の型(数値 or 文字列)が一致していない場合はエラーになるため、事前に「日付形式」でそろっているかを確認しましょう。

たとえば、検索値側が =TEXT(F2,”yyyy/mm/dd”) のように文字列化されていると、 B列が日付のままでは一致しません(= #N/A エラーになる)。
日付の表示形式違い(比較)
  • 不安な場合は、検索対象もTEXT関数で文字列化することで型をそろえることができます:

=XLOOKUP(E2&TEXT(F2,"yyyy/m/d"),A2:A5&TEXT(B2:B5,"yyyy/mm/dd"), C2:C5)

XLOOKUP関数複数条件_日付文字列化


FILTER関数との比較・使い分け

XLOOKUPが1件の結果を返すのに対し、FILTER関数は条件に合うすべての行を抽出できます。

▼使用例(売上が1万円以上かつ営業部):

=FILTER(A2:B11,(A2:A11="東京")*(B2:B11>=10000))

✅使い分けの目安:

シーン おすすめ関数
条件に合う1件だけ取得したい XLOOKUP
条件に合う複数の行を取り出したい FILTER

INDEX+MATCHとの比較・使い分け

複数条件の検索には、昔からあるINDEX+MATCHの組み合わせも非常に有効です。
特に旧バージョンのExcelを使っている方や、処理の軽さを求める方におすすめです。

▼構文例(部署×名前で出勤状況を検索):

=INDEX(G2:G11, MATCH(1, (E2:E11="営業部")*(F2:F11="田中"), 0))

※配列数式として Ctrl + Shift + Enter が必要な場合あり

INDEX&MATCHを利用して複数条件検索

XLOOKUP+MATCH連携については以下の記事をご参考ください。

INDEX・MATCH関数の使い方とVLOOKUPとの違い|柔軟な検索をやさしく解説!

✅特徴比較:

項目 XLOOKUP INDEX+MATCH
バージョン Excel 365以降 すべて対応
可読性 わかりやすい 複雑だが柔軟性あり
処理の軽さ やや重め 比較的軽い
複数条件対応 結合が必要 直接AND条件にできる

結合列を事前に作成して処理を軽くするコツ

検索列や検索値を数式内で結合していると、関数が長くなり可読性も下がります。
また、大量データでは処理が重くなる原因にもなります。

そこでおすすめなのが、あらかじめ「検索キー列」を追加しておく方法です。

▼事前に作成する例:

商品名 出荷日 検索キー
りんご 2024/5/1 りんご2024/5/1
りんご 2024/5/2 りんご2024/5/2

そのうえで、以下のように検索します:

=XLOOKUP(検索値1&検索値2, 検索キー列, 戻り値範囲)

こうしておくと、XLOOKUP側は非常にシンプルになり、保守・再利用性も高まります。

検索用結合列を作成して複数検索をする例

結合列(C列)の結合例:
=A2&TEXT(B2,”YYYY/M/D”)

検索例:
=XLOOKUP(F2&TEXT(G2,”YYYY/M/D”),C2:C5,D2:D5)

※上の図では出荷日についてはTEXT関数を利用して文字列化しています。TEXT関数を利用する場合は、検査値と検索範囲の表示形式を合わせるように意識しましょう。


(補足)関数の使い分けが気になる方へ

本記事では主にXLOOKUPの応用を扱っていますが、FILTER関数やINDEX+MATCH関数と迷う場面も多いと思います。

それぞれの関数の得意分野や使い分けの考え方については、
別記事「XLOOKUP・FILTER・INDEX+MATCHの違いと実例まとめ」で詳しくご紹介を予定しております。

まとめ|XLOOKUP関数で複数条件をスマートに扱おう

XLOOKUP関数は、通常1条件での検索に特化した関数ですが、
&演算子を使って検索値を結合することで、2つ以上の条件にも対応できます。

ただし、日付やスペースを含む文字列など、型や整形の違いによる不一致には注意が必要です。
また、複数条件においては、FILTER関数やINDEX+MATCHの方が適している場合もあります。

必要に応じて、関数ごとの得意分野を使い分けることで、より柔軟なデータ検索が可能になります。

【関連記事】

XLOOKUP関数の使い方まとめ|対応バージョン・エラー対策・複数条件検索もやさしく解説!

XLOOKUPで値が見つからない原因と対処法まとめ|#N/Aや空白エラーを防ぐには?

INDEX・MATCH関数の使い方とVLOOKUPとの違い|柔軟な検索をやさしく解説!