(Excel)XLOOKUP関数で見つからない場合の値を指定する方法

 XLOOKUP関数で探している値が見つからない場合に、代わりの値を指定して表示させる方法です。
 具体的には「検索値(第1引数)が見つからない場合」と「検索値は見つかるが戻り値がない(空白セル)場合」が考えられるので、それぞれ紹介します。

検索値が見つからない場合

特定の値を指定する例

 次の画像では、F3セルに「=XLOOKUP(E3,B3:B7,C3:C7)」という数式を入力しています。
 これはE3セルの値(検索値=レモン)をB列から検索し、値段(戻り値)をC列から取得する式です。
 しかし検索値である「レモン」がB列に存在しないので、結果は#N/Aエラーとなっています。

 



 しかしエラー値では意味が分かりにくいので、次の式では代わりに「該当なし」という文字を表示させています。

 F3セル

=XLOOKUP(E3,B3:B7,C3:C7,"該当なし")

 第4引数を「”該当なし”」としています。
 このように、検索値が見つからない場合に表示させる値を第4引数で指定することができます。
 VLOOKUP関数だと「=IFNA(VLOOKUP(E3,B3:C7,2,FALSE),"該当なし")」としなければならないところですが、XLOOKUP関数では専用の引数が用意されているのでだいぶ簡単に済ませることができます。



 空白(空文字列)を表示させたい場合は次の画像のように「=XLOOKUP(E3,B3:B7,C3:C7,"")」とします。

もう1つのXLOOKUP関数を指定する例(複数列検索)

 第4引数には上記のように特定の値(文字列や数値)を指定するほかに関数を使うこともできますが、面白い例としてさらにXLOOKUP関数を使う例が考えられます。
 「検索値が見つからない場合に別の列を検索する」というのがその目的ですが、次の画像がその具体例です。

 G3セル

=XLOOKUP(F3,B3:B7,D3:D7,XLOOKUP(F3,C3:C7,D3:D7,"該当なし"))

 この式は次のような順序で機能し、担当者「小久保」に対応する担当地区「品川」を返しています。

  1. (外側のXLOOKUP関数)F3セルの検索値(小久保)をB列から検索する
  2. 見つからないので第4引数(内側のXLOOKUP関数)に移行する
  3. (内側のXLOOKUP関数)F3セルの検索値(小久保)をC列から検索する
  4. 見つかったので対応するD列の戻り値(品川)を返す

 同様に3列以上を検索しようとするとさらにネスト(入れ子)が深くなって式が長くなりますし、XLOOKUP関数本来の「上から順に検索する」という機能には沿いませんが、実用上はさほど問題にならないだろうと思います。

 なお、このように複数列の検索を行う方法については、次の記事で別の例を紹介しています。

(Excel)XLOOKUP関数で検索範囲に複数列を指定する - いきなり答える備忘録

戻り値がない(空白セル)場合

 上記の例と似て非なるものが「検索値は見つかるが戻り値がない(空白セルである)」という例です。
 次の画像では、F3セルに「=XLOOKUP(E3,B3:B7,C3:C7,"該当なし")」という式を入力しています(最初の例の2番目の画像と同じ)。
 しかし検索値(みかん)はB列で見つかるものの、対応する値段が空白セルなので結果は「0」となっています。このようなケースでは第4引数に何を指定しても結果は「0」です。

 


 そこで、次の画像では数式を工夫し、空白セルによる「0」を別の文字列(未設定)に置き換えています。

 F3セル

=XLOOKUP(E3,B3:B7,IF(C3:C7="","未設定",C3:C7),"該当なし")

 第3引数(戻り範囲)を「IF(C3:C7="","未設定",C3:C7)」としています。これにより検索値を検索する前に空白セルが「未設定」の文字に置き換えられるので、「0」が返ることはないというわけです。



 E3セルの検索値を「レモン」に置き換えると結果は「該当なし」となります。
 このように「検索値が見つからない場合」と「検索値は見つかるが戻り値がない場合」を区別して結果を表示することができます。