- XLOOKUP関数と参照演算子(コロンや半角スペース)を併用することで、検索値に基づいた範囲参照をすることができます。
- そもそもXLOOKUP関数は直接値を返すのではなくセル番地を返している(と見ることができる)ことが理由です。
手順
まずはXLOOKUP関数の基本的な使用例です(E3セル)。
B列から「徳島県」の文字列を検索し、該当する行の2つの列を同時に取得しています。
こちらでは同様に「高知県」を検索し、該当する行の2つの列を取得しています。
ところで、この2つの式をコロンでつなぐと、徳島県から高知県までの行をすべて取得することができます。
E3セル
=XLOOKUP("徳島県",B3:B9,B3:C9):XLOOKUP("高知県",B3:B9,B3:C9)
ちょっと見ない感じの式ですが、「B5:C8」と参照するのと同じように、XLOOKUP関数をコロンでつないでいます。これにより2つの結果の間にある範囲をすべて参照することができます。
ちなみに、2つある「B3:C9」をそれぞれ「B3:B9」と「C3:C9」に置き換えても同じ結果になります。
次の例では、ある値のうち最初の行と最後の行の間にあるすべての行を取得しています。
E3セル
=XLOOKUP("ラーメン",B3:B11,B3:C11):XLOOKUP("ラーメン",B3:B11,B3:C11,,,-1)
1番目のXLOOKUPでは「ラーメン」が出現する最初(最も上)の行を、2番目のXLOOKUPでは「ラーメン」が出現する最後(最も下)の行を取得しています。これらをコロンでつなぐことにより、2つの行の間にあるすべての行を取得しています。
次の画像は半角スペース(共通部分演算子)の使用例です。
XLOOKUP関数と半角スペースを使用してクロス表からの抽出を行っています。
J3セル
=XLOOKUP(H3,B3:B7,C3:F7) XLOOKUP(I3,C2:F2,C3:F7)
ちょっとわかりにくいですが2つのXLOOKUPの間に半角スペースが挿まれています。
この演算子により、1番目のXLOOKUPで取得した範囲(C4:F4)と、2番目のXLOOKUPで取得した範囲(E3:E7)の共通部分、つまりE4セルの値が求められています。
XLOOKUPのネストで同じ結果が得られますので重要とまでは言えませんが、共通部分演算子の珍しい利用例かもしれません。
備考
次の画像は、最初の画像の式をCELL関数(第1引数=address)で評価した結果です。
これも奇妙な式ですが、きちんとセル番号「$B$5」が返っています(戻り値となる2つのセルのうち左(上)のセルの番号)。
E3セル
=CELL("address",XLOOKUP("徳島県",B3:B9,B3:C9))
つまりこのXLOOKUP関数は値ではなく参照を返し、その結果として値が表示されている、と捉えることができます。
そう考えれば演算子により上記の結果になるのも納得といえるでしょう。