いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)XLOOKUP関数の使い方

 Googleスプレッドシートで2022年秋ごろに導入されたXLOOKUP関数の基本的な使用例についてです。
 簡単に言って表引きを行う関数ですが、従来使用されていたVLOOKUP関数より扱いやすく機能も充実しています。

  • XLOOKUP関数を使うことで、VLOOKUP関数よりも容易かつ柔軟に表引き(表からの検索による値の取得)を行うことができます。

機能と構文

 XLOOKUPの基本的な機能は「検索キーの値を検索範囲から探し、結果の範囲からその位置に対応する値を返す」といったものです。
 構文は次のとおりで、最大6つの引数を指定できます。

XLOOKUP(検索キー, 検索範囲, 結果の範囲[, 見つからない場合の値, 一致モード, 検索モード])

 最初の3つの引数が必須です。
 詳細については実例を見た方が早いので、以下では最初の3つの引数を使った基本的な抽出例を紹介したあと、第4引数以降の引数の設定例をみてみます。

基本的な使用例

 最初の3つの引数(検索キー, 検索範囲, 結果の範囲)だけを使ったシンプルな例です。
 次の画像ではG3セルにXLOOKUP関数を使った式を入力し、F3セルに入力された県名に一致する県の面積を表(B3:D8)から取得しています。

 G3セル

=XLOOKUP(F3,B3:B8,D3:D8)

 F3が検索キー、B3:B8が検索範囲、D3:D8が結果の範囲となります。
 検索キーの値を検索範囲から探し、見つかった位置(この例では上から2行目)に対応する結果、つまり「結果の範囲」のうち上から2行目を取得しています。
 慣れないとこれでも難しいですが、VLOOKUP関数よりも式の内容が簡略化され、SUMIF関数などと近い感覚で使えるようになっています。
 なお、検索範囲内に検索キーの値が複数ある場合は、基本的に最も上にあるものから値を取得します(第6引数の設定により変更可)。すべての値を取得する場合はFILTER関数を使うのが適当です。


 VLOOKUP関数では基本的にできなかった「検索キーより左側の値を取得する」ということも簡単です。
 次の画像は上の例と異なり、検索範囲(D3:D8)が表内の最も右の列にありますが、その左側にある結果の範囲(C3:C8)から面積を取得できています。検索範囲と結果の範囲をそのまま記述すればよいだけで、それらの位置関係や方向を意識する必要がありません。ただし2つの範囲の行数は一致している必要があります。


 また、結果の範囲として複数の列を指定すれば複数の値を一度に取得することができます。
 次の画像では結果の範囲を「C3:D8」と指定することで2つの戻り値を取得しています(G3,H3セル)。式を入力しているのはG3セルだけで、H3セルには何も入力していません。


 さらにXLOOKUP関数では横並びの表(データが増えると横に伸びていく形)からでも値を取得できます。
 VLOOKUP関数とHLOOKUP関数のように関数の使い分けを考慮する必要がなくなっています。


 いくつか例を見てきましたが、最初の3つの引数のはたらきを理解できればXLOOKUP関数はほぼ使いこなせます。構文上は引数が6つあるので大変に見えますが、実際に第4引数以降を使うケースは多くありません。

第4引数(見つからない場合の値)の効果と使用例

 画像は第3引数までしか使っていないケースですが、このように検索キーが検索範囲内にない場合には、XLOOPUP関数はエラー値「#N/A」を返します。

 このエラーを表示させたくない場合は、代わりの値を第4引数で指定します。
 この例では「該当なし」という文字列を指定し、表示させています。

=XLOOKUP(F3,B3:B8,D3:D8,"該当なし")

 VLOOKUP関数ではこの機能がなかったため、IFNA関数もなかった頃は「=IF(ISNA(VLOOKUP(~),"",VLOOKUP(~))」といった長い式がよくみられましたが、XLOOKUP関数では簡潔にまとめることができます。

第5引数(一致モード)の効果と使用例

 第5引数には次の4種の値を指定でき、省略した場合は0を指定したものとみなされます。

効果
0完全一致検索をする(既定値)。
1完全一致検索をし、値がなければ検索キーより大きい直近の値を検索する。
-1完全一致検索をし、値がなければ検索キーより小さい直近の値の値を検索する。
2ワイルドカードを使った文字列検索をする。
ワイルドカードとして使える文字は「*」(0文字以上の文字),「?」(任意の1文字),「~」(*?~の3種の文字を検索する際のエスケープ用)の3種です。

 以下では0以外を指定した例を見てみます。


 まず1を指定する例です。
 ここでは人口を検索キーとして県名を取得しています。
 検索キーである105は検索範囲(C3:C8)に存在しませんが、第5引数を1とすることにより(一致する値がない場合に)検索キーより大きい直近の値を検索するので、結果として人口が118の「岩手県」を取得しています。
 なお、表を人口順にソートしておく必要はありません(次の例も同様)。

 G3セル

=XLOOKUP(F3,C3:C8,B3:B8,,1)


 次に-1を指定する例で、ここでも人口を検索キーとして県名を取得しています。
 検索キーである105は検索範囲(C3:C8)に存在しませんが、第5引数を-1とすることにより(一致する値がない場合に)検索キーより小さい直近の値を検索するので、人口が104の「山形県」を取得しています。

 G3セル

=XLOOKUP(F3,C3:C8,B3:B8,,-1)


 こちらは2を指定する例です。
 県名から面積を取得する例ですが、第5引数を2するとともに検索キーを「*島*」と指定しています。
 「*」は0文字以上の文字を意味するワイルドカードとして解釈されるので「*島*」は「島」の字を含む文字列という意味になり、結果的に福島県の面積である13784を取得しています。

 G3セル

=XLOOKUP(F3,B3:B8,D3:D8,,2)


第6引数(検索モード)の効果と使用例

 第6引数には次の4種の値を指定でき、省略した場合は1を指定したものとみなされます。

効果
1検索範囲内を先頭(上)から順に検索する(既定値)。
-1検索範囲内を末尾(下)から順に検索する。
2検索範囲内をバイナリ検索で検索する。
検索範囲の値が昇順になるように表を並べ替えておく必要があります。
-2検索範囲内をバイナリ検索で検索する。
検索範囲の値が降順になるように表を並べ替えておく必要があります。

 2や-2を指定したときの効果がわかりにくいですが、これは検索を高速に行うためのもので、詳しくは「二分探索」でググれば理解できると思います。ただし、よほど大量のデータを扱わない限り必要ないので実例は省略します。


 よってここでは-1を指定する例をみてみます。
 画像は県名を検索キーとして市町村名を取得する例ですが、検索キーである「岩手県」が検索範囲内に3つあります。
 普通に検索すると「釜石市」を取得しますが、第4引数を-1(検索範囲内を末尾(下)から順に検索する)とすることにより、岩手県のうち最も末尾に近い「北上市」を取得しています。

 F3セル

=XLOOKUP(E3,B3:B11,C3:C11,,,-1)

応用例

複数条件(AND,OR)の指定

 基本的に検索値を1つしか指定できないので複数条件の抽出はできないように思われますが、ちょっとした工夫で可能になります。
 詳しくは次の記事で紹介しています。

www.officeisyours.com

クロス抽出

 行と列が交差するセルにある値を抽出する方法です。従来はINDEX/MATCH関数が多用されていましたがXLOOKUP関数を使用することでより簡潔な式にすることができます。
 詳しくは次の記事で紹介しています。

www.officeisyours.com

複数行複数列の戻り値を得る方法

 検索キーと結果の範囲を広げたときに複数行複数列の戻り値を得られない、という問題がありますが次の記事で対応しています。

www.officeisyours.com