(Excel)XLOOKUP関数で一致したら〇にする方法

 ExcelのXLOOKUP関数で、検索値に一致する値が見つかったら「○」を表示させる方法についてです。
 基本的に筋のいい判定方法ではないのですが、一応の対応策とともにIF/COUNTIF関数を使う代替案についても紹介します。

失敗例

 次の画像では、E3セルにXLOOKUP関数を使った数式を入力し、D3セルの値(ラーメン)に一致するものがB列(B3:B9)で見つかったら「○」を、そうでなければ空白(空文字列)を表示させようとしています。
 しかし結果はエラーとなっています。

 E3セル(エラー)

=XLOOKUP(D3,B3:B9,"○","")

 第3引数(戻り範囲)に「"○"」を、第4引数(見つからない場合の値)に「""」を指定しています。
 確かにこうできれば便利な気はするものの、第3引数は第2引数(検索範囲=B3:B9)と行数が等しい配列でなければならないためエラーとなります。

対応例

 そこで次の画像では、第3引数を少しいじって対応しています。
 「ラーメン」はB5セルの値と一致するので結果は「○」となります。

 E3セル

=XLOOKUP(D3,B3:B9,LEFT("○"&B3:B9),"")

 第3引数を「LEFT("○"&B3:B9)」とする(○とセルの値を結合し、最初の1文字を取得することで○だけになる)ことで○だけの配列を得ています。ムリヤリですが、これで検索値が見つかったら○となります。
 一時的な用途であれば値がない部分を参照して「"○"&A3:A9」とすれば簡単ですが、基本的にはおすすめしません。



 次の画像ではE3セルの数式だけで、D3~D5セルの3つの値について一括判定しています。

 E3セル

=XLOOKUP(D3:D5,B3:B9,LEFT("○"&B3:B9),"")

 第1引数(検索値)を「D3:D5」とすることで3つの戻り値を一括して取得しています(スピル)。



 この方法の欠点として、基本的に複数列を検索できないことが挙げられます。
 次の画像では検索範囲と戻り範囲を2列に拡張していますが、結果はエラーとなっています。

 F3セル(エラー)

=XLOOKUP(E3,B3:C9,LEFT("○"&B3:C9),"")

 構文的には上記の例と同じですが、XLOOKUP関数の第2引数は1列(横方向に検索させる場合は1行)でなければならないのでエラーになります。
 その他にもXLOOKUP関数では全角と半角を区別しない(=同一視する。大文字と小文字も区別しませんがこれは他の関数と同様)、エラー値をカウントできない(エラー値を検索値にすると結果はエラーになる)といった点にも注意が必要です。

IF/COUNTIF関数を使う代替案

 次の画像では、IF関数とCOUNTIF関数を組み合わせることで上記の例と同様の結果を得ています。

 E3セル

=IF(COUNTIF(B3:B9,D3),"○","")

 COUNTIF関数を使い、D3セルの値がB列(B3:B9)にいくつあるかカウントしています。
 さらにIF関数を使い、COUNTIF関数の結果が1以上だったら(「>0」などと加えた方がわかりやすいですが省略)「○」を、そうでなければ空白(空文字列)を表示させています。



 次の画像は一括判定の例です。

 E3セル

=IF(COUNTIF(B3:B9,D3:D5),"○","")

 第2引数(条件)を「D3:D5」とすることで複数の結果を得ています(スピル)。
 スピル機能のないバージョンでは「=IF(COUNTIF($B3:B$9,D3),"○","")」と入力してE5セルまでフィルコピーする必要があります。
 


 この方法の大きなメリットとして複数列を検索できる点が挙げられます。また、全角と半角を区別し、エラー値を検索することもできます。
 次の画像ではエラー値「#DIV/0!」をB,C列から検索し、一致するセルがあったら○を表示させるようにしています。

 F3セル

=IF(COUNTIF(B3:C9,E3),"○","")

 ただしエラー値については種別ごとの判定しかできないのでさほど実用的ではないです。