Menu

Excelで複数条件の検索: XLOOKUP、INDEX MATCH、VLOOKUP

=XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7)は、A列がE2に、B列がF2に一致する行の値を返します。INDEX MATCH版、VLOOKUP用の作業列、すべての一致を返すFILTERも学びます。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

=XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7)は、商品がE2でかつサイズがF2の行の価格を返します。各比較がすべての行を調べ、それらを掛け合わせると両方が真の行だけ1になり、XLOOKUPはその1を探します。Excel 2021かMicrosoft 365が必要です。下で紹介するINDEX MATCH版はどのバージョンでも動きます。

商品とサイズで価格を出す
G2
ABCDEFG
1ProductSizePriceProductSizePrice
2CoffeeSmall$2.50TeaLarge$3.00
3CoffeeLarge$3.50
4TeaSmall$2.00
5TeaLarge$3.00
6JuiceSmall$3.00
7JuiceLarge$4.00
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

TeaとLargeは5行目で交わるので、G2は$3.00を返します。JuiceとSmallを選ぶと、別の行からやはり$3.00が返ります。両方に一致する行がない場合に備えて4つ目の引数を加えることもできます:=XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7,"No such item")。

条件を掛け合わせるしくみ

A2:A7=E2はすべての商品をE2と比べ、6つのTRUEかFALSEを返します。そうしたリストを2つ掛け合わせるとTRUEが1、FALSEが0になり、両方で1の行だけが1になります。D列は1つの数式からスピルさせたそのリストです。

XLOOKUPが探す配列
D2
ABCDEFG
1ProductSizePriceBoth matchProductSize
2CoffeeSmall$2.500TeaLarge
3CoffeeLarge$3.500
4TeaSmall$2.000
5TeaLarge$3.001
6JuiceSmall$3.000
7JuiceLarge$4.000
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

1になっているのはD5だけです。F2かG2を変えると、1の位置が動きます。条件を1つ増やすごとに*(範囲=値)を1つ加えます。条件は等しいかどうかでなくてもよく、*(C2:C7<3)で「価格が3未満」を加えられます。すべての範囲は同じ行(A2:A7、B2:B7、C2:C7)にそろえる必要があります。戻り範囲の大きさが条件と違うと、XLOOKUPは#VALUE!を返します。

複数条件のINDEX MATCH

Excel 2019以前では、MATCHで同じ配列から1を探し、INDEXでその位置の価格を返します。

INDEXとMATCHで2つの条件
G2
ABCDEFG
1ProductSizePriceProductSizePrice
2CoffeeSmall$2.50CoffeeLarge$3.50
3CoffeeLarge$3.50
4TeaSmall$2.00
5TeaLarge$3.00
6JuiceSmall$3.00
7JuiceLarge$4.00
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

CoffeeとLargeは配列の2番目の位置なので、INDEXは$3.50を返します。Excel 2019以前ではこれは配列数式で、Enterの代わりにCtrl+Shift+Enter(MacではCmd+Shift+Enter)を押すと、Excelは数式を波かっこで囲んで表示します。そこで普通にEnterを押すと、たいてい#N/Aか#VALUE!が返ります。Excel 365ではEnterだけで十分です。条件が1つの形はINDEXとMATCHのページにあります。

条件をつなげて1つのキーにする

もう1つの方法は、2つの条件をつなげて1つにすることです。VLOOKUPでは、つなげた値を表の先頭の作業列に置く必要があります(その方法はVLOOKUPのページにあります)。XLOOKUPなら数式の中で範囲をつなげられるので、作業列は要りません。

商品とサイズをつなげて1つのキーに
G2
ABCDEFG
1ProductSizePriceProductSizePrice
2CoffeeSmall$2.50JuiceLarge$4.00
3CoffeeLarge$3.50
4TeaSmall$2.00
5TeaLarge$3.00
6JuiceSmall$3.00
7JuiceLarge$4.00
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

A2:A7&"|"&B2:B7はJuice|Largeのような6つのキーを作り、XLOOKUPはその中からJuice|Largeを見つけて$4.00を返します。部分の間には区切り文字を入れてください。区切り文字がないと、「AB」と「C」をつなげたものと「A」と「BC」をつなげたものが同じ「ABC」になり、違う行を返すことがあります。

求める値が数値で、各組み合わせが1回しか出てこないなら、SUMIFSを使えば配列なしで同じ答えが出ます:=SUMIFS(C2:C7,A2:A7,E2,B2:B7,F2)。何も一致しないとエラーではなく0を返すので、打ち間違いが隠れることがあります。

FILTERですべての一致を返す

XLOOKUPとINDEX MATCHは、最初に一致した行を返します。複数の行が一致し、そのすべてが欲しいときは、同じ条件でFILTERを使います。

NorthのPhoneの注文すべて
F2
ABCDEFG
1RegionProductQuarterSalesMatches
2NorthLaptopQ1120Q1210
3NorthPhoneQ1210Q2225
4SouthLaptopQ195Q3240
5NorthPhoneQ2225
6SouthPhoneQ2180
7NorthLaptopQ2135
8NorthPhoneQ3240
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

NorthかつPhoneの行は3つあるので、F2はその四半期と売上をF2:G4にスピルします。A3をSouthに変えると、リストは2行に減ります。一致する行がないとFILTERは#CALC!を返します。3つ目の引数に"None"のような文字列を指定すれば、代わりにそれを表示します。ほかのオプションはFILTERのページにあります。

練習: 3つの条件

地域・商品・四半期別の売上
G4
ABCDEFG
1RegionProductQuarterSalesRegionSouth
2NorthLaptopQ1120ProductLaptop
3NorthLaptopQ2135QuarterQ2
4NorthPhoneQ1210Sales
5SouthLaptopQ195
6SouthPhoneQ2180
7SouthLaptopQ2110
8NorthPhoneQ2225
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: G4に、G1の地域、G2の商品、G3の四半期に対応する売上を返してください。

よくある質問

XLOOKUPで複数の条件を使うには?

条件ごとの比較を掛け合わせ、1を検索します:=XLOOKUP(1,(A2:A7=E2)*(B2:B7=F2),C2:C7)。各比較は行ごとにTRUEかFALSEを返し、その積はすべてがTRUEの行だけ1になり、XLOOKUPはそうした最初の行を返します。

INDEX MATCHで2つの条件を使うには?

MATCHの中で同じように条件を掛け合わせます:=INDEX(C2:C7,MATCH(1,(A2:A7=E2)*(B2:B7=F2),0))。Excel 2019以前では、Ctrl+Shift+Enter(MacではCmd+Shift+Enter)で確定します。

VLOOKUPで2つの条件を使えますか?

直接は使えません。2つの値をつなげる作業列を表の先頭に加え(=A2&"|"&B2など)、つなげた値を検索します:=VLOOKUP(E2&"|"&F2,helper_table,col,FALSE)。

2つの条件での検索をSUMIFSで代わりにできますか?

値が数値で、各組み合わせが1回しか出てこないならできます:=SUMIFS(C2:C7,A2:A7,E2,B2:B7,F2)。一致する行がないと#N/Aではなく0を返し、組み合わせが2回出てくると値を足し合わせます。

ORの条件で検索するには?

条件を掛けるのではなく足します:(A2:A7="Tea")+(A2:A7="Juice")は、どちらかが真の行で1以上になります。0より大きい値を検索します。たとえば=XLOOKUP(TRUE,((A2:A7="Tea")+(A2:A7="Juice"))>0,C2:C7)です。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める