- +演算子を使った演算を併用することで、XLOOKUP関数の検索範囲に複数列を指定した結果を得ることができます。
- COUNTIF関数等を併用する方法もあります。検索範囲の列が多くても式が長くなりません。
+演算子を使用する方法
次の画像では、F3セルに入力されている検索キー(井上)をB列、C列の両方から検索して、対応する担当地区の値を得ています。
G3セル
=XLOOKUP(1,(B3:B6=F3)+(C3:C6=F3),D3:D6)
「(B3:B6=F3)+(C3:C6=F3)」の部分により、データの4つの行がそれぞれ0(「井上」を含まない行)または1(「井上」を含む行)の数値に変換されます。
これをXLOOKUP関数の第2引数(検索範囲)とし、さらに第1引数(検索値)を「1」とすることで、「井上」を含む行の担当地区の値が得られます。ややトリッキーですが、要は複数条件(OR条件)による検索の一種です。
なお、同じ行に「井上」という値が2つある場合は足し算の結果が「2」になってしまうのでうまく取得できませんが、普通そんなデータはないと思われるので考慮しないものとします。ただし必要な場合は第2引数をSIGN関数で囲む(プラスの値がすべて1に変換される)といった方法が考えられます。
ちなみに「(B3:B6=F3)+(C3:C6=F3)」の部分だけ実行すると次のようになります。3行目が「1」になっている(「井上」を含むから)ため、あとは上記の式ようにXLOOKUP関数を重ねれば「C地区」が返されるのがわかると思います。
注意点として、データがこのような形式になっている場合に「空白セル」にマッチする値を取得してしまうことが起こりやすい、という点が挙げられます。
画像では「B地区」を担当する担当者が1人しかおらずC3セルが空白セルになっており、さらにF3セルが空白セルであるため結果的に「B地区」が取得されています。
これは意図しない検索結果といえます。
そこで次の画像では、検索キーが空白なら何も値を返さない、という式にしています。
G3セル
=IF(F3="","",XLOOKUP(1,(B3:B6=F3)+(C3:C6=F3),D3:D6))
ただし以降ではこのような(検索キーが空白の場合の)対応については省略します。
また、この方法の弱点は、検索キーが複数ある場合にスピルで対応しにくいことです。
そこで次の画像では、絶対参照と式のコピーを使って3つの検索キー(担当者)に対応する検索結果(担当地区)を得ています。
G3セル(下方にコピー)
=XLOOKUP(1,(B$3:B$6=F3)+(C$3:C$6=F3),D$3:D$6)
COUNTIF/BYROW/LAMBDA関数を併用する方法
上記の例では検索範囲が2列だったのでまだ式が短く済んでいますが、5列とか10列に増えた場合には長くなり入力が面倒です。
そこで次の画像では複数列を一括して検索できるようにしています。
I3セル
=XLOOKUP(1,BYROW(B3:E6,LAMBDA(a,COUNTIF(a,H3))),F3:F6)
BYROW/LAMBDA関数を使って検索範囲であるB3:E6の範囲にaと名付け、その1行ごとにCOUNTIF関数を実行しています。これにより各行に検索キー(クマ)がそれぞれいくつ含まれるかが数えられます(具体的には最初の例の2番目の画像と同様に0,0,1,0の4つの値が得られます)。これをXLOOKUP関数の第2引数(検索範囲)とすることで「1」に対応する行の「分類」を得ています。
ただしこの方法も、検索キーのスピルに対応できないのが弱点です。
そこで次の画像では、絶対参照と式のコピーを使用して、3つの検索キー(名称)に対応する分類を取得しています。
I3セル(下方にコピー)
=XLOOKUP(1,BYROW(B$3:E$6,LAMBDA(a,COUNTIF(a,H3))),F$3:F$6)