- XLOOKUP関数を使うことでVLOOKUP関数よりも簡単に表引き(表からの検索による値の取得)を行うことができ、機能もより充実しています。
機能と構文
XLOOKUPの機能は「検索値を検索範囲から探し、結果範囲からその位置に対応する値を返す」というものです。
構文は次のとおりです。最大6つの引数を指定でき、最初の3つの引数が必須とされています。
XLOOKUP(検索値, 検索範囲, 結果範囲[, 見つからない場合, 一致モード, 検索モード])
最初の3つの引数を使えればほとんどの場合に対応できますので、まずは3つの引数を使った基本的な抽出例を紹介したあと、第4引数以降の引数の設定例を紹介します。
基本的な使用例
最初の3つの引数(検索値, 検索範囲, 結果範囲)だけを使った例です。
次の画像ではG3セルにXLOOKUP関数を使った式を入力し、F3セルに入力された県名に一致する県の面積を表(B3:D6)から取得しています。
式の内容をデータと照らし合わせて見てみます。
G3セル
=XLOOKUP(F3,B3:B6,D3:D6)
F3が検索値、B3:B6が検索範囲、D3:D6が結果範囲となります。
検索値を検索範囲から探し、見つかった位置(この例では上から2行目)に対応する結果、つまり「結果範囲」のうち上から2行目を取得しています。
VLOOKUP関数よりも式の内容が簡略化され、SUMIF関数などと同様の感覚で使えるようになっています。
なお、検索範囲内に検索値が複数ある場合は、基本的に最も上にあるものから値を取得します(第6引数の設定により変更可)。該当するすべての値を取得したい場合はFILTER関数を使うのが適当です。
VLOOKUP関数ではできなかった「検索値より左側の値を取得する」ことも簡単にできます。
次の画像は上の例と異なり、検索範囲(D3:D6)が表内の最も右の列にありますが、その左側にある結果範囲(C3:C6)から面積を取得できています。検索範囲と結果範囲をそのまま記述すればよく、それらの位置関係が障害になることはありません。ただし2つの範囲の行数は一致している必要があります。
また、結果範囲として複数の列を指定すれば複数の値を一度に取得することができます。
次の画像では結果範囲を「C3:D6」と指定することで2つの戻り値を取得しています(G3,H3セル)。式を入力しているのはG3セルだけで、H3セルには何も入力していません。
さらにXLOOKUP関数では横並びの表(データが増えると横に伸びていく形)からでも値を取得できます。
VLOOKUP関数とHLOOKUP関数のように関数を使い分ける必要がなくなっています。
いくつか例を見てきましたが、最初の3つの引数のはたらきを理解できればXLOOKUP関数はほぼ使いこなせます。構文上は引数が6つあるものの実際に第4引数以降を使うケースは多くありません。
第4引数(見つからない場合)の効果と使用例
次の画像は第3引数までしか使っていないケースですが、このように検索値が検索範囲内で見つからない場合、XLOOPUP関数はエラー値「#N/A」を返します。
このエラーを表示させたくない場合に、代わりの値を第4引数で指定します。
この例では「該当なし」という文字列を指定し、表示させています。
G3セル
=XLOOKUP(F3,B3:B6,D3:D6,"該当なし")
VLOOKUP関数ではこの機能がなかったため、IFNA関数もなかった頃はIF関数とVLOOKUP関数を組み合わせた長い式がよくみられましたが、XLOOKUP関数では簡潔にまとめることができます。
第5引数(一致モード)の効果と使用例
第5引数には次の4種の値を指定でき、省略した場合は0を指定したものとみなされます。
値 | 効果 |
---|---|
0 | 完全一致検索をする(既定値)。 |
1 | 完全一致検索をし、見つからなければ検索値より大きい直近の値を検索する。 |
-1 | 完全一致検索をし、見つからなければ検索値より小さい直近の値の値を検索する。 |
2 | ワイルドカードを使った文字列検索をする。 ワイルドカードとして使える文字は「*」(0文字以上の任意の文字),「?」(任意の1文字),「~」(*?~の3種の文字を検索する際のエスケープ用)の3種です。 |
以下では0以外を指定した例を見てみます。
まず1を指定する例です。
ここでは人口を検索値として県名を取得しています。
G3セル
=XLOOKUP(F3,C3:C6,B3:B6,,1)
検索値である「100」は検索範囲(C3:C6)に存在しませんが、第5引数を1とすることにより(一致する値がない場合に)検索値より大きい直近の値を検索するので、結果として人口が133の「愛媛県」を取得しています。
なお、表を人口順にソートしておく必要はありません(次の例も同様)。
次に-1を指定する例で、ここでも人口を検索値として県名を取得しています。
G3セル
=XLOOKUP(F3,C3:C6,B3:B6,,-1)
検索値である「100」は検索範囲(C3:C6)に存在しませんが、第5引数を-1とすることにより(一致する値がない場合に)検索値より小さい直近の値を検索するので、人口が95の「香川県」を取得しています。
続いて2を指定する例です。
こちらは県名から面積を取得する例です。
G3セル
=XLOOKUP(F3,B3:B6,D3:D6,,2)
第5引数を2するとともに検索値を「*知*」と指定しています。
「*」は0文字以上の文字を意味するワイルドカードとして解釈されるので「*知*」は「『知』の字を含む文字列」という意味になり、結果的に高知県の面積である7104を取得しています。
第6引数(検索モード)の効果と使用例
第6引数には次の4種の値を指定でき、省略した場合は1を指定したものとみなされます。
値 | 効果 |
---|---|
1 | 検索範囲内を先頭(上)から順に検索する(既定値)。 |
-1 | 検索範囲内を末尾(下)から順に検索する。 |
2 | 検索範囲内をバイナリ検索で検索する。 検索範囲の値が昇順になるように表を並べ替えておく必要があります。 |
-2 | 検索範囲内をバイナリ検索で検索する。 検索範囲の値が降順になるように表を並べ替えておく必要があります。 |
2や-2を指定したときの効果ですが、これは二分検索というアルゴリズムで検索を高速に行うためのものです。ただし、よほど大量のデータを扱わない限り必要ないので実例は省略します。
よってここでは-1を指定する例をみてみます。
画像は県名を検索値として市町村名を取得する例ですが、検索値である「香川県」が検索範囲内に3つあります。
F3セル
=XLOOKUP(E3,B3:B11,C3:C11,,,-1)
普通に検索すると「丸亀市」を取得しますが、第4引数を-1(検索範囲内を末尾(下)から順に検索する)とすることにより、香川県のうち最も末尾に近い「さぬき市」を取得しています。
応用例
複数条件の指定
検索値を1つしか指定できないのでAND/OR検索ができないように思われますが、工夫すれば可能です。
詳しくは次の記事で紹介しています。
範囲参照に用いる
XLOOKUP関数は参照演算子(コロンや半角スペース)と組み合わせて範囲を参照することができます。
次の記事で例を紹介しています。
縦横にスピルさせる
本記事では詳しく触れていませんが、XLOOKUP関数で検索値と結果範囲を両方とも広げるとスピルの結果が自然なものになりません。
次の記事でこの現象と対応について紹介しています。