ExcelのXLOOKUP関数で「~以上~以下」や「~超~未満」の数値・日付を検索する方法についてです。
第5引数(一致モード)の設定により検索値を分類・ランク分けするのではなく、XLOOKUP関数内で最小値と最大値の両方を指定するというのが趣旨です。
実用的にはあまり使う機会がなさそうですが参考まで。
第5引数(一致モード)の設定により検索値を分類・ランク分けするのではなく、XLOOKUP関数内で最小値と最大値の両方を指定するというのが趣旨です。
実用的にはあまり使う機会がなさそうですが参考まで。
- 「*」演算子を使ってAND条件を設定することによりXLOOKUP関数で「~以上~以下」や「~超~未満」にマッチする値を検索することができます。
手順
次の画像では左側の表のうち身長の値が170以上かつ175以下の者の氏名を、XLOOKUP関数を使って抽出しています。
該当する者は2人いますがXLOOKUP関数の機能により最も上の位置にある者が抽出されています。
E3セル
=XLOOKUP(TRUE,(C3:C8>=170)*(C3:C8<=175)>0,B3:B8)
XLOOKUP関数の第2引数(検索範囲)を「(C3:C8>=170)*(C3:C8<=175)>0」とすることで両方の条件に該当する行をTRUE、そうでない行をFALSEに変換した配列を生成しています。第1引数(検索値)をTRUEとすることで配列中のTRUEの行を特定し、対応する氏名を取得しています。
要は「*」演算子を使った複数条件(AND条件)の設定例です。
複数条件の設定については次の記事でもいくつか例を紹介しているのでご確認ください。
次の画像は日付を対象とし、さらに「~超~未満」を条件としている例です。
具体的には生年月日が1992/7/5よりも後で、かつ1992/7/25よりも前の者の氏名を抽出しています。
該当する者は3人いますが、最も上の位置にあるの者の氏名が抽出されています。
E3セル
=XLOOKUP(TRUE,(C3:C8>DATEVALUE("1992/7/5"))*(C3:C8<DATEVALUE("1992/7/25"))>0,B3:B8)
不等号を「>」や「<」とすることで両端の日付を含まない条件にしていることと、日付を指定するときに文字列をDATEVALUE関数で変換していることがポイントです。