いきなり答える備忘録

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

(Excel)XLOOKUP関数で数値・日付をワイルドカード検索する

 ExcelのXLOOKUP関数ではワイルドカードを使った検索ができますが、基本的に検索対象が数値や日付の場合は検索できません。
 そこで少し工夫して検索できるようにする例を紹介します。

  • XLOOKUP関数の第2引数内で検索対象を文字列に変換してしまえばワイルドカードによる検索ができます。
  • ワイルドカードを使うとき第5引数を「2」とするのを忘れてはいけません。

数値を検索する場合

 次の画像では、左側の表のうち身長の下1桁の値が「1」である者の氏名をXLOOKUP関数とワイルドカードを使って抽出しています。
 該当する者は2人いますが、XLOOKUP関数の機能により最も上の位置にあるものの名前が抽出されています。

 E3セル

=XLOOKUP("*1",TEXT(C3:C8,"@"),B3:B8,,2)

 XLOOKUP関数の第2引数(検索範囲)を「TEXT(C3:C8,"@")」としています。
 これによりC列の数値をすべて文字列に変換した結果が得られますので、これを対象としてワイルドカードによる検索ができるというわけです。
 ただし第5引数(一致モード)を「2」とするのを忘れるとうまくいきません。

 なお、このぐらい単純な条件なら「=XLOOKUP("1",RIGHT(C3:C8),B3:B8)」でも済みますが、「1桁目が~で最後の桁が~」といった条件になる場合はワイルドカードの方が使える場合もあると思われます。



 また、第2引数でTEXT関数を使う代わりに「ASC(C3:C8)」とか、単に「C3:C8&""」としても文字列に変換できるので同じ結果になります(下記画像)。
 ただし(上記の方法を含め)いずれも日付に使用すると誤った結果になるので注意してください(「36042」といったシリアル値の文字列に変換されるため)。

日付を検索する場合

 次の画像では、左側の表のうち生年月日の下1桁(「日」の1の位)が「1」である者の名前を抽出しています。
 こちらも該当する者が2人いますが最も上の位置にある者の名前が抽出されています。

 E3セル

=XLOOKUP("*1",TEXT(C3:C8,"yyyy/m/d"),B3:B8,,2)

 XLOOKUP関数の第2引数(検索範囲)を「TEXT(C3:C8,"yyyy/m/d")」としています。
 これでC列の日付をすべて文字列に変換した結果が得られますので、これを対象としてワイルドカードによる検索ができます。
 なお「"yyyy/mm/dd"」とすると「1998/09/04」のように月も日も2桁固定の文字列になるので、本来「0」を含まない日付でも「0」を含むものと判定されることとなります。どのようなパターンを指定するとどのような文字列に変換されるのか熟知しておく必要があります。



 ちなみに、この例では日付のみ条件を課しているので、下記のようにTEXT関数の第2引数を単に「"d"」としても同じ結果になります。