Accessで日付指定の方法をお探しですね。

広告

Accessで日付を抽出する方法を分かりやすく解説!Between演算子の使い方と注意点

Accessで売上日や受注日、入金日といった日付データを扱っていると、「今月分だけ見たい」「この期間のデータだけ抽出したい」という場面がよくありますよね。

そんなときに便利なのが、クエリの抽出条件で使う**Between演算子**です。

ただし、Accessの日付条件には「#で囲む」「開始日と終了日を含む」「時刻付きデータでは終了日の扱いに注意する」といった独自のルールがあります。

この記事では、Accessクエリで日付を抽出する基本から、Betweenを使った期間指定、パラメータ入力、フォーム参照、よくあるエラー対策まで、初心者にも分かりやすく解説していきます。

Accessクエリで日付を抽出する基本ルール

Accessクエリで日付を抽出するには、まず日付型の条件式の書き方を覚えておく必要があります。

Accessでは、文字列はダブルクォーテーション(`””`)で囲みますが、**日付は「#」で囲む**のが基本ルールです。

たとえば、売上日が2025年1月10日のレコードだけを抽出したい場合は、対象の日付フィールドの「抽出条件」行に `#2025/01/10#` と入力します。

このルールを間違えて日付をダブルクォーテーションで囲んだり、#を付け忘れたりすると、意図しない結果になったり、「データ型が一致しません」といったエラーが出たりすることがあります。

クエリの抽出条件は、デザインビューで設定するのが一般的です。

対象のクエリをデザインビューで開き、抽出したい日付フィールドをデザイングリッドに追加して、その列の「抽出条件」行に条件式を入力します。

たとえば、テーブルに「売上日」という日付/時刻型フィールドがある場合、その列の抽出条件に日付条件を入れることで、該当するレコードだけを表示できます。

SQLビューで書く場合は、`WHERE 売上日 = #2025/01/10#` のようにWHERE句で条件を指定します。

日付抽出で特に重要なのが、**対象フィールドのデータ型**です。

見た目が「2025/01/10」のように日付に見えていても、フィールドのデータ型が短いテキストになっていると、日付として正しく比較できない場合があります。

日付の範囲指定や大小比較を安定して行いたいなら、テーブル設計の段階で**「日付/時刻型」**にしておくことが大切です。

Excelからインポートしたデータでは、日付が文字列として取り込まれているケースもあるので、抽出条件が合っているのに結果がおかしい場合は、まずフィールドのデータ型を確認してみましょう。

日付の完全一致はシンプルですが、実務では「1日だけ」よりも「月初から月末まで」「指定した開始日から終了日まで」のような**期間指定**の方がよく使われます。

そこで役立つのがBetween演算子です。

Betweenを使うと、開始日と終了日を1つの条件式で分かりやすく書けるため、クエリが見やすくなります。

ただし、Betweenには境界日を含むという特徴があるので、次の見出しで基本構文と注意点を詳しく見ていきましょう。

Betweenを使った期間指定の書き方

Accessクエリで日付の範囲を指定する場合、Between演算子を使うと簡潔に条件を書けます。

基本構文は `Between 開始日 And 終了日` です。

日付を直接指定する場合は、それぞれの日付を#で囲みます。

たとえば2025年1月1日から2025年1月31日までの売上を抽出したい場合は、抽出条件に次のように入力します。

“`
Between #2025/01/01# And #2025/01/31#
“`

この条件は「2025年1月1日以上、2025年1月31日以下」という意味になり、**開始日と終了日の両方が抽出対象に含まれます**。

同じ条件は、不等号を使って書くこともできます。

たとえば `>=#2025/01/01# And <=#2025/01/31#` と書けば、Betweenとほぼ同じ意味になります。

Betweenは読みやすく、期間指定であることがひと目で分かるのがメリットです。

一方で、「終了日を含めたくない」「翌月1日未満にしたい」といった細かい指定をしたい場合は、不等号の方が向いています。

つまり、通常の期間抽出ではBetween、境界の含め方を細かく制御したい場合は不等号、と使い分けると実務で扱いやすくなります。

具体例をいくつか挙げると、日付条件は次のように使えます。

| 抽出したい内容 | 抽出条件の例 |
|—|—|
| 2025年1月のデータ | `Between #2025/01/01# And #2025/01/31#` |
| 2025年1月10日以降 | `>=#2025/01/10#` |
| 2025年2月1日より前 | `<#2025/02/01#` |
| 今日のデータ | `Date()` |
| 過去7日間 | `Between Date()-6 And Date()` |

Betweenを使うときは、**開始日と終了日の順番**にも注意が必要です。

`Between #2025/01/31# And #2025/01/01#` のように開始日より終了日が前になっていると、期待した結果が返りません。

パラメータクエリやフォーム入力でユーザーが日付を指定する場合は、開始日と終了日が逆にならないように画面側でチェックするか、運用ルールとして入力順を明確にしておくと安心です。

特に業務用のAccessでは、抽出条件そのものよりも、入力ミスによる空の結果や誤抽出を防ぐ設計が重要になります。

また、複数の条件を組み合わせる場合は、同じ行に条件を書くとAnd条件、別の行に書くとOr条件として扱われる点にも注意しましょう。

たとえば「売上日が1月中」かつ「担当者が田中」のように抽出したい場合は、売上日のBetween条件と担当者の条件を同じ抽出条件行に入力します。

一方、「1月中または2月中」のように複数期間を対象にしたい場合は、次のようにOrでつなぐ方法があります。

“`
Between #2025/01/01# And #2025/01/31# Or Between #2025/02/01# And #2025/02/28#
“`

期間条件と他の条件を組み合わせるときは、Accessがどの条件を同時に満たすものとして解釈するのかを意識して設定しましょう。

日付/時刻型でBetweenを使うときの注意点

Accessの日付/時刻型フィールドは、名前のとおり日付だけでなく**時刻も保持できます**。

この仕様を理解していないと、Betweenで期間指定をしたときに「終了日のデータが一部抽出されない」という問題が起こることがあります。

たとえば、売上日フィールドに `2025/01/31 15:30:00` のような時刻付きデータが入っている場合、条件を `Between #2025/01/01# And #2025/01/31#` とすると、終了日の `#2025/01/31#` は厳密には `2025/01/31 00:00:00` と解釈されます。

そのため、1月31日の午後に登録されたデータは、条件の終了時点を超えていると判断され、抽出されない可能性があります。

この問題を避けるには、**終了日を「翌日の0時より前」として指定する**方法が有効です。

たとえば2025年1月1日から2025年1月31日までを抽出したい場合、時刻付きデータを考慮すると次のように書く方が安全です。

“`
>=#2025/01/01# And <#2025/02/01#
“`

この書き方なら、2025年1月31日の23時59分59秒のデータも含まれ、2025年2月1日以降のデータは除外されます。

月単位や日単位の集計で「なぜか最終日の件数が少ない」と感じた場合は、Betweenそのものではなく、フィールドに時刻が含まれていないかを確認しましょう。

日付の一部だけを取り出して抽出する方法もあります。

たとえば、年に関係なく1月のデータを抽出したい場合は、`Month([売上日])=1` のような条件を使えます。

ただし、フィールドに関数をかける条件は分かりやすい反面、データ量が多いテーブルでは処理が遅くなることがあります。

Accessでもインデックスが設定された日付フィールドを効率よく使いたい場合は、フィールドそのものに関数をかけるより、`Between #2025/01/01# And #2025/01/31#` や `>=#2025/01/01# And <#2025/02/01#` のように範囲で絞る方が実務では扱いやすいです。

**Null値の扱い**にも注意が必要です。

日付フィールドが空欄のレコードは、Betweenの条件には一致しません。

たとえば、未入金のデータで「入金日」が空欄になっている場合、入金日をBetweenで抽出しても空欄レコードは表示されません。

空欄も含めたい場合は、次のようにNullを明示的に条件へ加える必要があります。

“`
Between #2025/01/01# And #2025/01/31# Or Is Null
“`

ただし、日付が入っていないデータを期間集計に含めると意味が変わることもあるので、空欄を含めるべきかどうかは業務上の定義に合わせて判断しましょう。

日付条件でエラーが出る場合は、次の点を確認してみてください。

– 入力した記号が全角になっていないか
– #の位置が正しいか
– フィールドのデータ型が日付/時刻型になっているか

特に `And` の前後に不要な記号が入っていたり、`>=` を `=>` と書いてしまったりすると、Accessが条件式を正しく解釈できません。

また、日付を文字列として扱うLike検索は、月や日の一部に一致するデータまで拾うことがあるため、期間指定には基本的に向きません。

日付を抽出する目的が「一定期間のデータを正確に取り出すこと」であれば、Betweenまたは不等号による範囲指定を優先するのが安全です。

パラメータクエリやフォーム参照で期間指定を便利にする

毎回クエリのデザインビューを開いて日付を書き換えるのは面倒ですよね。

そんな場合は、**パラメータクエリ**を使うと、クエリ実行時に開始日と終了日を入力して期間指定できます。

抽出条件には、たとえば次のように入力します。

“`
Between [開始日を入力してください] And [終了日を入力してください]
“`

クエリを実行すると入力ダイアログが表示され、ユーザーが指定した日付範囲に一致するレコードだけが抽出されます。

簡単な検索用クエリであれば、この方法だけでも十分に実用的です。

ただし、パラメータクエリでは入力値の形式に注意が必要です。

ユーザーが日付ではない文字を入力したり、開始日と終了日を逆に入力したりすると、正しく抽出できないことがあります。

より安定させたい場合は、クエリの「パラメータ」設定で、開始日と終了日のデータ型を日付/時刻型として指定しておくとよいでしょう。

また、定期的に使う検索機能であれば、**フォーム上に開始日と終了日のテキストボックスを用意し、その値をクエリから参照する**方法が便利です。

フォーム参照を使う場合、抽出条件は次のように書きます。

“`
Between [Forms]![検索フォーム]![txt開始日] And [Forms]![検索フォーム]![txt終了日]
“`

ここで「検索フォーム」はフォーム名、「txt開始日」「txt終了日」はフォーム上のコントロール名です。

フォームに日付入力欄と検索ボタンを配置すれば、ユーザーは画面上で期間を指定して、対象データを簡単に絞り込めます。

帳票出力や売上一覧、請求データの確認など、日常的に同じ条件で検索する業務では、フォーム参照の方が操作ミスを減らしやすくなります。

実務でよく使う期間指定には、固定日付だけでなく「今日」「今月」「先月」「過去30日」といった相対的な条件もあります。

AccessではDate関数やDateAdd関数を使うことで、今日を基準にした抽出条件を作れます。

たとえば、過去30日以内のデータを抽出するなら次のように指定できます。

“`
Between DateAdd(“d”,-30,Date()) And Date()
“`

今月分を抽出する場合は、月初から翌月月初の前までを指定する考え方にすると、時刻付きデータにも対応しやすくなります。

たとえば、今月のデータを安定して抽出したい場合は、次のような条件が考えられます。

“`
>=DateSerial(Year(Date()),Month(Date()),1)
And
<DateSerial(Year(Date()),Month(Date())+1,1)
“`

この条件は、今日の日付をもとに「今月1日以上、翌月1日未満」のデータを抽出します。

Betweenで月末日を直接指定する方法より少し長くなりますが、月によって28日、30日、31日と日数が変わる問題を避けられます。

さらに、終了条件を「翌月1日未満」にしているため、時刻付きの日付データでも最終日のレコードを取りこぼしにくいのが利点です。

日付抽出を正確に行いたい場合は、単に条件式を短くするだけでなく、保存されているデータの粒度や業務上の集計単位に合わせて書き方を選びましょう。

まとめ

Accessクエリで日付を抽出するうえで、Betweenは非常に便利な期間指定のテクニックです。

基本は `Between #開始日# And #終了日#` で、開始日と終了日を含む範囲を抽出できます。

一方で、日付/時刻型に時刻が含まれる場合は、終了日を翌日未満で指定する方が安全なケースもあります。

パラメータクエリやフォーム参照と組み合わせれば、毎回条件を書き換えなくても柔軟に期間検索ができるようになります。

まずは固定の日付でBetweenの動きを確認して、慣れてきたらフォームやDate関数を使った実務向けの抽出条件へ発展させてみてください。

Accessでの日付管理が格段に効率化されるはずです!

広告