Excelで日付・期間を検索する方法|XLOOKUP・VLOOKUPの近似一致

Excelで日付・期間を検索する方法|XLOOKUP・VLOOKUPの近似一致

指定日が含まれる期間の料金を探すなら、XLOOKUPの一致モードを -1 にします。「指定日と一致する開始日、なければ指定日より前で最も近い開始日」を探す近似一致です。同じ日付の行だけを探す完全一致とは使い分けます。

練習用Excelファイル(無料ダウンロード)
日付を数値として保存した「VLOOKUP」「開始日と終了日」の2シート入り。B2を変えて料金の切り替わりを確認できます。XLOOKUPの近似一致は本文の式をB3に入力して試せます。ボタンをクリック/タップして保存し、Excelで開いてください。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り
目次

日付検索の早見表|完全一致・期間の検索・全行抽出の使い分け

やりたいこと方法
指定日と同じ日付の1件を探すXLOOKUPの完全一致、VLOOKUPのFALSE
料金表の開始日から、その日の料金を探すXLOOKUPの-1、VLOOKUPのTRUE
開始日から終了日までの全行を抽出FILTERで上下限の条件を指定

この記事では、開始日ごとに料金が変わる表を使います。入力する日付は「8/10~」という文字列ではなく、年を含むExcelの日付にしてください。

まず動かしてみよう|この記事のサンプルをその場で試せます

練習用ファイルをダウンロードしなくても、記事と同じデータ・同じセル番地のサンプルをここで動かせます。黄色いセルを書き換えると、結果がその場で変わります。各解説の最後にある「▶ この式を試す」を押すと、このツールの該当セルへ移動します。

XLOOKUPで日付が入る期間の料金を求める(いつから適用か)

B2に利用日、A6:A8に開始日、B6:B8に料金を入力します。例として同じ年の8月1日・10日・16日から、それぞれ1,200円・2,200円・1,000円になる表を用意します。

B3に入力:指定日に適用される料金(XLOOKUPの近似一致)
数式=XLOOKUP(B2,$A$6:$A$8,$B$6:$B$8,"対象期間外",-1)
ひとことで利用日以前で、いちばん近い開始日を探し、その料金を返す
B2
検索値です。利用日を入力するセルです(サンプルは 8/11)
$A$6:$A$8
探す範囲です。料金が切り替わる「開始日」の一覧です
$B$6:$B$8
返す範囲です。開始日ごとの料金です。検索範囲と同じ行数にそろえます
"対象期間外"
見つからないとき(最初の開始日より前など)に表示する文字です
-1
第5引数の一致モード。-1 は「同じ日付がなければ、利用日より前で最も近い開始日」を選ぶ指定です(近似一致)
データの流れ
① 開始日の一覧から、8/11以前でいちばん近い日を探す(黄色)
A68/1A78/10A88/16
▼
② 同じ行の料金を返す結果
B32,200

B3に入力すると、8月11日の料金は2,200円です。8月11日そのものは開始日一覧になくても、直前の8月10日が選ばれます。文字の一部を探す「部分一致」ではなく、日付の大小を使う「近似一致」です。

日付から期間の料金を検索する(VLOOKUPの近似一致)式 =IFNA(VLOOKUP(B2,$A$6:$B$8,2,TRUE),"対象期間外") の解説図。B3に入力する
B3に =IFNA(VLOOKUP(B2,$A$6:$B$8,2,TRUE),"対象期間外") を入力。8/11 以下で最も近い開始日は 8/10 → その料金 2,200

境界の日付で確かめる

利用日結果理由
7月31日対象期間外最初の開始日より前
8月1日1,200円開始日と一致
8月9日1,200円8月1日以上・8月10日未満
8月10日2,200円新しい料金へ切り替わる日
8月16日1,000円最後の開始日と一致
ポイントこの表では最後の料金が8月16日以降にも適用されます。最終営業日などの終了条件がある場合は、次の節のように終了日も判定してください。

VLOOKUPで日付・期間の料金を求める(近似一致 TRUE)

対応バージョンExcel 2019・2016などではVLOOKUPでも計算できます。A6:A8を古い日付から新しい日付へ並べます。
B3に入力:VLOOKUPで期間の料金(Excel 2019・2016向け)
数式=IFNA(VLOOKUP(B2,$A$6:$B$8,2,TRUE),"対象期間外")
ひとことで開始日と料金の表から、利用日以前で最も近い開始日の行の料金を返す
B2
検索値です。利用日を入力するセルです
$A$6:$B$8
開始日(左端)と料金が並んだ表です。検索する開始日の列は、範囲の左端に置きます
2
表の左から2列目(料金)を返します
TRUE
近似一致の指定です。同じ日付がなければ、利用日以下で最も大きい開始日の行を使います。開始日は昇順に並べておきます
"対象期間外"
最初の開始日より前だとVLOOKUPが #N/A になるので、IFNAで「対象期間外」に置き換えます
データの流れ
① 開始日の列から、8/11以下でいちばん大きい日を探す(黄色)
A68/1A78/10A88/16
▼
② 同じ行の2列目(料金)を返す結果
B32,200
ポイント第3引数の2は、A:Bの2列目である料金を返す指定です。TRUEの近似一致では、検索列の昇順が必要です。並べ替えるときは料金列も一緒に動かします。
ポイントXLOOKUPの通常検索では、一致モード -1 だけを理由に並べ替えが必須になるわけではありません。ただし確認しやすいよう開始日順にそろえると便利です。XLOOKUPで検索モード2・-2のバイナリ検索を指定するときは、指定方向への並べ替えが必要になります。
練習用Excelファイル(無料ダウンロード)
VLOOKUPシートで利用日を変えて試せますB2の利用日を変えると、8/10から2,200円に切り替わるのを確認できます。VLOOKUPと、開始日・終了日の2シート入りです。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

開始日と終了日の両方を持つ表から探す

別の表としてA6:A8=開始日、B6:B8=終了日、C6:C8=料金を用意する場合です。利用日が開始日以上・終了日以下の行を探します。

B3に入力:開始日と終了日の両方で判定
数式=XLOOKUP(1,(B2>=A6:A8)*(B2<=B6:B8),C6:C8,"対象期間外")
ひとことで利用日が「開始日以上」かつ「終了日以下」の行を探し、その料金を返す
(B2>=A6:A8)*(B2<=B6:B8)
利用日が開始日以上、かつ終了日以下の行だけが 1 になります(* は「かつ」)
1
検索値の 1:上の判定が 1 になった行を探します
C6:C8
返す範囲です。期間ごとの料金です
"対象期間外"
どの期間にも入らないときに表示する文字です
データの流れ
① 各期間に入るかを判定(利用日 8/11)
1行目02行目13行目0
▼
② 1になった行の料金を返す結果
B32,200
注意各期間に重複がないことが前提です。重なる期間があると通常は最初の行が返るため、どちらの料金を採用するか先に決めます。表内の日付と利用日は、時刻を含まない日付にそろえてください。

特定の日付のデータを検索・抽出する(完全一致とFILTER)

売上一覧などでB2と同じ日付の1行を検索するなら、一致モードを0にします。

B3に入力:同じ日付の1件を探す(完全一致)
数式=XLOOKUP(B2,A6:A100,B6:B100,"該当なし",0)
ひとことでB2と同じ日付の行を探し、商品名を返す
B2
検索値です。探したい日付を入力するセルです
A6:A100
日付の列です。データが増えてもよいように、広めに指定します
B6:B100
返す範囲(商品名の列)です
"該当なし"
同じ日付が無いときに表示する文字です
0
一致モード 0 は完全一致です(省略しても同じです)
補足同じ日に複数の行があっても、返るのは最初の1件だけです。
ポイント同じ日に複数の明細がある場合、XLOOKUPは通常1件だけです。全行を取り出すにはFILTERを使います。開始日をE2、終了日をF2、明細の日付をA6:A100とすると、次の式で終了日の時刻付きデータまで含められます。E2・F2には時刻を含めません。
E6に入力:開始日から終了日までの全行を取り出す(FILTER)
数式=FILTER(A6:C100,(A6:A100>=E2)*(A6:A100<F2+1),"該当なし")
ひとことで日付がE2〜F2の期間に入る行を、すべて取り出す
A6:C100
取り出す表(日付・商品・金額)です
(A6:A100>=E2)*(A6:A100<F2+1)
日付が開始日(E2)以上、かつ終了日(F2)の翌日より前の行だけを残します。時刻付きのデータでも、終了日の1日分すべてを含められます
"該当なし"
該当する行が無いときに表示する文字です
補足結果は、条件に合う行の数だけ、下へ自動で広がります(スピル)。E2・F2には時刻を含めません。
練習用Excelファイル(無料ダウンロード)
2つのシート(VLOOKUP/開始日と終了日)のB2を変えて、料金の切り替わりを確かめられます。XLOOKUP対応のMicrosoft 365・Excel 2024・2021で開いてください。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

【実機で検証】日付の検索で #N/A になるパターン

同じ日付を探しても、データの持ち方によって見つからないことがあります。Excel の実機で 7 通り試しました。

エクセルのXLOOKUPで文字の日付や時刻付きの日付が見つからず#N/Aになる画面
エクセルのXLOOKUPで文字の日付や時刻付きの日付が見つからず#N/Aになる画面
原因結果直し方
探す値が文字の日付#N/ADATEVALUE や VALUE で日付に変換する
表の日付に時刻が付いている#N/A範囲を INT(A2:A4) にして時刻を切り捨てる
探す日が表の最初の日より前(VLOOKUP の TRUE)#N/AXLOOKUP の 4 番目に「範囲外」などを指定する

時刻が付いた日付は、見た目を日付だけにしていても一致しません。表示形式では見分けられないので、数値に直して確かめます。XLOOKUP に -1 を指定すると、最後の日より後の日付は、最後の行の値を返しました。期間の終わりも決まっている表では、結果を確かめてください。

日付検索ができない・エラーになるときの確認表

症状主な原因確認と対処
同じ日付なのに見つからない(#N/A・該当なし)日付が文字列になっている/一方に時刻が入っているISNUMBER(B2) で数値か確認する。時刻があるときは日付だけにそろえる
結果が 46245 のような数字になる結果のセルの表示形式が日付になっていないセルの表示形式を「日付」にする
「対象期間外」になる最初の開始日より前の日付/年が違う年を含む日付で入力されているか、開始日の一覧と見比べる
料金が1つ前の期間のものになる近似一致(TRUE・-1)で、開始日が古い順になっていない開始日を古い順に並べ替える(料金の列も一緒に動かす)
ポイントISNUMBER(B2)がTRUEなら、B2は数値として保持されています。FALSEなら、見た目だけ日付の文字列かもしれません。表示形式を変更するだけで文字列が日付になるとは限りません。
ポイント「20260811」のような8桁の値は8桁の数字を日付に変換する方法で変換できます。また、同じ日付に見えても一方に時刻があると完全一致しません。日付を検索して返した結果が数字になる場合は、結果セルの表示形式を日付に設定します。

次のステップ:金額や得点の範囲検索を理解する

練習用Excelファイル(無料ダウンロード)
日付を数値として保存した「VLOOKUP」「開始日と終了日」の2シート入り。B2を変えて料金の切り替わりを確認できます。XLOOKUPの近似一致は本文の式をB3に入力して試せます。ボタンをクリック/タップして保存し、Excelで開いてください。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

仕様の確認:Microsoft公式・XLOOKUP関数 / Microsoft公式・VLOOKUP関数

最新の日付のデータを取り出すときは、最新日付のデータを抽出する方法もあわせてご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次