「氏名と日付の両方が一致する行の金額を取り出したい」など、2つ以上の条件を同時に満たすデータを検索したい場面はよくあります。結論から言うと、XLOOKUP関数と条件式の掛け算を組み合わせれば、作業列を作らずに1つの数式だけで複数条件の検索ができます。この記事では、基本の数式の形、仕組み、実際のサンプルデータを使った手順、エラーが出たときの対処法まで順番に解説します。
XLOOKUPで複数条件を指定する基本の数式
複数条件のXLOOKUPは、次の形が基本です。
=XLOOKUP(1, (条件範囲1=条件1)*(条件範囲2=条件2), 戻り範囲, "該当なし")
ポイントは2つです。
- 検索値には「1」を指定する(探したい値そのものではありません)
- 検索範囲には条件式同士を「*」で掛け算したものを指定する
4つ目の引数(見つからない場合の値)はXLOOKUPに元から用意されている機能で、該当データがないときにエラーの代わりに表示する値を指定できます。IFERROR関数で包む必要がないのもXLOOKUPの利点です。
なぜ「条件式の掛け算」で複数条件検索ができるのか
Excelでは、TRUEは1、FALSEは0として計算されます。「(A2:A6=E2)」のような条件式は、範囲の各行についてTRUE(1)かFALSE(0)を並べた配列を返します。
2つの条件式を掛け算すると、両方ともTRUE(1×1=1)の行だけが1になり、それ以外の行は0になります。つまり「すべての条件を満たす行だけに1が立った配列」ができるので、その配列の中から「1」をXLOOKUPで探せば、実質的にAND条件の検索になる、という仕組みです。
具体例:氏名と日付の2つの条件で金額を検索する
次のような売上表(A1:C6)で、「佐藤さんの2026/7/2の金額」を取り出してみます。
| A(氏名) | B(日付) | C(金額) | |
|---|---|---|---|
| 2 | 佐藤 | 2026/7/1 | 12,000 |
| 3 | 鈴木 | 2026/7/1 | 8,500 |
| 4 | 佐藤 | 2026/7/2 | 15,300 |
| 5 | 田中 | 2026/7/2 | 9,800 |
| 6 | 鈴木 | 2026/7/3 | 11,200 |
検索条件をE2セル(氏名=佐藤)、F2セル(日付=2026/7/2)に入力しておき、次の数式を入力します。
=XLOOKUP(1, (A2:A6=E2)*(B2:B6=F2), C2:C6, "該当なし")
結果は「15,300」になります。氏名が「佐藤」の行は2行ありますが、日付の条件も同時に満たすのは4行目だけなので、その行の金額が返ります。
条件を3つ以上にしたい場合
条件式の掛け算を増やすだけです。たとえば「商品」列(D列)の条件を足すなら次のようになります。
=XLOOKUP(1, (A2:A6=E2)*(B2:B6=F2)*(D2:D6=G2), C2:C6, "該当なし")
XLOOKUPの複数条件検索でエラーが出るときの対処法
「該当なし」やエラーになる:条件に一致する行がない
まず条件セルの値と表の値が本当に一致しているか確認してください。特に多いのは、見た目は同じでも末尾に空白が入っている、日付が文字列として入力されているケースです。TRIM関数で空白を除去する、日付セルの表示形式を確認する、で解決することがほとんどです。
動作が重い:列全体の参照を避ける
「(A:A=E2)*(B:B=F2)」のように列全体を指定すると、100万行以上を対象に配列計算が走るため動作が非常に重くなります。A2:A1000のようにデータのある範囲だけを指定するのがおすすめです。
XLOOKUPが使えない:Excelのバージョンが古い
XLOOKUPはExcel 2021以降・Microsoft 365で利用できる関数です。それより古いバージョンでは、INDEX関数とMATCH関数の配列数式や、SUMPRODUCT関数で同様の複数条件検索ができます。
該当するデータが複数あるときはFILTER関数を検討
XLOOKUPは条件を満たす行が複数あっても最初に見つかった1件しか返しません。「条件を満たす行をすべて取り出したい」場合は、FILTER関数を使うと該当行を一覧で抽出できます。1件だけ欲しいのか、全件欲しいのかで関数を使い分けましょう。
まとめ
XLOOKUPの複数条件検索は、「条件式を掛け算して1を探す」というひと工夫だけで実現できます。VLOOKUPの時代には作業列が必要だったAND条件の検索が、1つの数式で完結するのは大きな進歩です。
なお、「条件を満たすデータだけを対象に計算する」という考え方は検索以外にも応用が利きます。当ブログでは条件付きで中央値(MEDIAN)を計算する方法やMEDIAN関数で0を無視して計算する方法も同じ考え方で解説していますので、あわせて参考にしてください。





