概要
「コードが見つからなかったときにだけ『未登録』と表示したい」
「検索失敗の #N/A を、そのまま見せずに 0 や空白にしたい」
こういう “検索に失敗したときの既定値” を、関数そのものに内蔵できるのが
XLOOKUP(エックスルックアップ) の大きな強みです。
VLOOKUP のように IFERROR で包まなくても、
XLOOKUP の引数の中で「見つからないときの値」を直接指定できます。
ここでは、検索失敗時の既定値にフォーカスして、XLOOKUP をかみ砕いて解説します。
XLOOKUP の基本形
基本の書式
XLOOKUP の代表的な形はこうです。
=XLOOKUP(検索値, 検索範囲, 戻り範囲, 見つからないときの値)
それぞれの意味はこうです。
検索値
探したい値(例:商品コード、社員番号など)
検索範囲
検索値を探しに行く範囲(例:コード一覧の列)
戻り範囲
見つかったときに返してほしい値が入っている範囲(例:商品名の列)
見つからないときの値
検索に失敗したとき(通常なら #N/A)に代わりに返す値
検索失敗時の既定値を設定したいときは、
この「見つからないときの値」を活用します。
検索失敗時に「未登録」と表示する
商品コードが見つからないときの既定値
前提:
A2:検索したい商品コード
D列:商品コード一覧(D2:D100)
E列:商品名(E2:E100)
XLOOKUP の基本形はこうです。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, "未登録")
動きは次の通りです。
A2 が D2:D100 のどこかで見つかった場合
対応する E列の「商品名」を返す
A2 が D2:D100 に見つからなかった場合
「未登録」と表示(本来は #N/A になる場面)
VLOOKUP なら IFERROR との組み合わせが必要でしたが、
XLOOKUP なら 1 行の中で「見つからないときの既定値」まで完結できます。
検索失敗時に空白や 0 を返す
空白にして「存在しないだけ」の行を目立たせない
検索に失敗したときは、
エラーではなく単に何も表示したくない場面も多いです。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, "")
見つからないときは空白が返るので、
画面が #N/A だらけになるのを防げます。
0 を返して集計に使いやすくする
「見つからないときは 0」として扱いたいなら、こうします。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, 0)
例えば、ポイント残高・在庫数など、
値が見つからない場合は「0」として計算に含めたいときに便利です。
IFERROR 版との違いとメリット
VLOOKUP+IFERROR との比較
VLOOKUP だと、検索失敗時に既定値を返したいときはこう書きます。
=IFERROR(VLOOKUP(A2, $D$2:$E$100, 2, FALSE), "未登録")
XLOOKUP なら、同じことをシンプルに書けます。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, "未登録")
メリットは次のような点です。
IFERROR を二重に書かなくてよい
「検索失敗だけ」を自然に扱える(書式ミスなどその他エラーは別)
数式の読みやすさが上がる
検索失敗時の既定値という観点では、
XLOOKUP の第4引数に「見つからないときの値」を素直に書けるのが大きな利点です。
検索失敗時に別の文字列や計算結果を返す
メッセージを変える
「未登録」以外にも、好きなメッセージを返せます。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, "コード不明")
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, "該当データなし")
社内ルールに合わせた文言にしておくと、
見る人にとっても分かりやすくなります。
既定値として「別セルの値」を返す
「見つからないときは、F2 に入っている共通値を返す」
ということも可能です。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, $F$2)
第4引数には、
文字列だけでなくセル参照や計算式も書けます。
例題
問題1
A2 に商品コードが入っています。
D2:D100 に商品コード、E2:E100 に商品名が入っているとき、
XLOOKUP を使って商品名を取得し、
見つからなかった場合は「未登録」と表示する式を書いてください。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, "未登録")
問題2
A2 の社員番号を、D2:D200 の社員番号一覧から探し、
E2:E200 の氏名を返したいとします。
見つからなかった場合は空白(””)を返す XLOOKUP の式を書いてください。
=XLOOKUP(A2, $D$2:$D$200, $E$2:$E$200, "")
問題3
A2 の商品コードを D2:D100 から探し、F2:F100 の在庫数を返します。
検索に失敗したときは在庫 0 とみなしたいです。
XLOOKUP を使って、そのような式を書いてください。
=XLOOKUP(A2, $D$2:$D$100, $F$2:$F$100, 0)
問題4
A2 の得意先コードを D2:D100 から探し、E2:E100 の得意先名を返します。
見つからなかったときは「コード不明」と表示したいです。
XLOOKUP の式を書いてください。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, "コード不明")
問題5
A2 の商品コードを D2:D100 から探し、E2:E100 の商品名を返します。
見つからなかったときは、セル G2 に入っている文字列を既定値として返したいです。
XLOOKUP の式を書いてください。
=XLOOKUP(A2, $D$2:$D$100, $E$2:$E$100, $G$2)
まとめ
XLOOKUP で「検索失敗時の既定値」を扱うときのポイントは、たった 1 つです。
第4引数「見つからないときの値」を必ずセットすること
型はこの形を覚えておけば十分です。
=XLOOKUP(検索値, 検索範囲, 戻り範囲, 見つからないときの値)
VLOOKUP+IFERROR のように二重構造にしなくても、
XLOOKUP 1 本で「検索」「結果」「失敗時の既定値」まで完結できます。
普段 VLOOKUP を使っている検索処理を、
一度 XLOOKUP に置き換えてみてください。
検索失敗時の扱いが、かなり素直で読みやすくなるはずです。
