概要
| この記事の結論 Accessで日付/時刻型を期間抽出するときは、開始日時以上・終了の翌日未満という条件にすると、終了日の午後も含められます。表示が日付だけでも時刻が保存されている可能性があるため、保存値で判断してください。 |
この記事でわかること
- 列の型と日付の書き方を確認する
- 特定日と固定期間を指定する
- 今日・昨日・今月・先月を指定する
- 入力された期間をパラメーターで受け取る
この記事の主な内容
- 日付抽出は開始以上と終了未満が基本
- 列の型と日付の書き方を確認する
- 特定日と固定期間を指定する
- 今日・昨日・今月・先月を指定する
- 入力された期間をパラメーターで受け取る
- 境界値と索引への影響を確認する
- よくある質問
想定読了時間:約9分
1 日付抽出は開始以上と終了未満が基本
Accessで日付/時刻型を期間抽出するときは、開始日時以上・終了の翌日未満という条件にすると、終了日の午後も含められます。
表示が日付だけでも時刻が保存されている可能性があるため、保存値で判断してください。
例えば2026年9月分は、9月1日0時以上、10月1日0時未満です。
月末の日数を固定で書かず、DateSerialで境界を作ると月による違いにも対応できます。

2 列の型と日付の書き方を確認する
日付を文字列として保存している列は、並び順や比較が日時の意図と一致しないことがあります。
まずテーブルのデザインビューで日付/時刻型か確認します。
文字列の変換は、変換できない値を洗い出してから行います。
SQLの日付リテラルは#で囲みますが、地域形式の読み違いを避けたい例ではDateSerialを使えます。
文字列の引用符で囲んだ日付と混同しないでください。

3 特定日と固定期間を指定する
9月19日の10時と15時30分を両方取得するには、次の条件を受注日時列の抽出条件行へ入れます。
19日の0時に等しいという条件では、これらの値は対象になりません。

設定例と確認点
| 対象 | 抽出条件 |
|---|---|
| 2026年9月19日 | >=DateSerial(2026,9,19) And <DateSerial(2026,9,20) |
| 2026年9月 | >=DateSerial(2026,9,1) And <DateSerial(2026,10,1) |
| 2026年 | >=DateSerial(2026,1,1) And <DateSerial(2027,1,1) |

4 今日・昨日・今月・先月を指定する
Date()は現在の日付、Now()は現在の日時です。
「直近24時間」と「昨日1日」は違う範囲になるため、業務の集計単位に合わせて選びます。
月初はDateSerialの年月日を使って作れます。
設定例と確認点
| 対象 | 抽出条件 |
|---|---|
| 今日 | >=Date() And <Date()+1 |
| 昨日 | >=Date()-1 And <Date() |
| 今月 | >=DateSerial(Year(Date()),Month(Date()),1) And <DateSerial(Year(Date()),Month(Date())+1,1) |
| 先月 | >=DateSerial(Year(Date()),Month(Date())-1,1) And <DateSerial(Year(Date()),Month(Date()),1) |

5 入力された期間をパラメーターで受け取る
開始日と終了日を日付/時刻型として宣言します。
次の例は終了日を日付単位で入力し、その翌日0時未満までを対象にする想定です。
入力値に時刻を含める運用なら、終了境界をどのように扱うかを別に定義します。
サンプルコードと式
PARAMETERS [開始日] DateTime, [終了日] DateTime;
SELECT * FROM [T_受注]
WHERE [受注日時]>=[開始日]
AND [受注日時]<DateAdd(“d”,1,[終了日]);

既存Accessへの影響を判断できない場合
本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。
6 境界値と索引への影響を確認する
月末23時台、翌月0時、2月29日、Nullの行を試します。
日付の列そのものをFormatで文字列化して比較するより、列はそのままで開始と終了を比較する方が、索引を使える構成を保ちやすくなります。
条件が正しくても結果が出ない場合は、元クエリの条件、結合による除外、フィルター、時刻やタイムゾーンの取扱いを確認します。
Accessの日付/時刻の値自体にタイムゾーンの意味を任せず、連携時のルールを明示しましょう。

7 よくある質問
終了日0時を上限にしていないか確認し、翌日未満にします。
両端を含みます。
日時の終了境界を明確にしたい場合は、開始以上・終了未満が扱いやすいです。
型が異なります。
変換できない値を確認したうえで、日時として扱う設計へ整えます。
まとめ
条件が正しくても結果が出ない場合は、元クエリの条件、結合による除外、フィルター、時刻やタイムゾーンの取扱いを確認します。
Accessの日付/時刻の値自体にタイムゾーンの意味を任せず、連携時のルールを明示しましょう。
本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。
参考情報
Microsoft公式資料を参照しています。サンプルは説明用の架空データです。
Windows版Accessの実機検証は未実施のため、適用前に対象環境のコピーで結果を確認してください。
Microsoft:日付条件の例
https://support.microsoft.com/en-us/access/examples-of-using-dates-as-criteria-in-access-queries
Microsoft:DateSerial
https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/dateserial-function
Microsoft:PARAMETERS
https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/parameters-declaration-microsoft-access-sql