初心者向け解説シリーズ

Accessでの日付・時間の扱い方:日付型の計算とフォーマット

nanikatoaccess

以下では、「Accessでの日付・時間の扱い方:日付型の計算とフォーマット」をテーマに、Microsoft Accessでよくある日付・時刻に関する取り扱いを整理します。日付型フィールドの設定や計算式、表示形式のカスタマイズ、使用時の注意点などを把握しておくと、システム開発やレポートの作成がスムーズになります。ぜひ参考にしてみてください。


1. 日付型とは?Accessでの基本概念

  • 日付/時刻型 (Date/Time)
    – Accessが扱う標準の日付型で、年月日時分秒を一体として保持
    – 内部的にはシリアル値(小数点以下は時刻を表す)として管理され、表示や計算時にフォーマットを当てる
    – バージョンによっては「日付/時刻拡張型 (Date/Time Extended)」が追加されているが、通常は従来のDate/Timeを使う

: 2023/05/01 10:30:00 といったデータを、Access内部では数値44700.4375(仮の例)として保持


2. フィールド設定:テーブルデザインでのポイント

ないものはない!お買い物なら楽天市場

2.1 データ型:日付/時刻型

  • テーブルデザインビューでフィールドを「日付/時刻型」に設定
  • 入力必須なら Required = Yes にし、Nullを許容しない仕組みも可

2.2 書式(Format) と入力マスク(Input Mask)

  • 書式 (Format)
    – 実際のデータはシリアル値だが、表示時に「yyyy/mm/dd」「yyyy年m月d日」「mm/dd/yy」などカスタマイズ可能
    – フォームやレポートのプロパティでも書式を指定できる
  • 入力マスク (Input Mask)
    – フォーム上での日付入力を補助(例:0000/00/00
    – 入力時に桁数や区切り文字を強制できるが、ユーザーが柔軟に入力できなくなる場合もあるため運用を考慮

3. 日付型の計算例:DateAdd, DateDiff, DateValueなど

3.1 DateAdd( )

  • 目的: 指定した期間分だけ日付を進めたり戻したりする
  • : 1か月後を求めるvbコピーするDateAdd("m", 1, #2023/05/01#) ' → #2023/06/01#
  • パラメータ:
    • “m”(月), “d”(日), “yyyy”(年)など
    • 数値がマイナスなら過去方向

3.2 DateDiff( )

  • 目的: 2つの日付の差を特定の単位で算出する
  • : 何日差があるかvbコピーするDateDiff("d", #2023/05/01#, #2023/05/15#) ' → 14
  • 単位には “d”(日), “m”(月), “yyyy”(年), “h”(時), “n”(分) などがある

3.3 DateValue( ), TimeValue( ), CDate( )

  • DateValue(文字列): “2023/05/01” など文字列を日付値に変換(時刻は 0:00 になる)
  • TimeValue(文字列): “14:30:00” など文字列を時刻値に変換(日付は日付0相当)
  • CDate(オブジェクト): 文字列や数値を日付型にキャストする

4. 書式(Format) 関数を使った表示例

AccessのVBAやクエリで、Format(値, 書式文字列) を使えば、様々な表示スタイルが作れます。

Format(#2023/05/01#, "yyyy/mm/dd") ' "2023/05/01"
Format(#2023/05/01 14:30#, "yyyy年m月d日(ddd) hh:nn")
' "2023年5月1日(月) 14:30"

主要な書式コード

  • yyyy / yy : 西暦4桁 / 2桁
  • mm / dd : 月 / 日を2桁表示
  • m / d : 月 / 日を1~2桁
  • hh : 時(00~23)
  • nn : 分(00~59)
  • ss : 秒
  • ddd : 曜日 (月, 火, 水, …)

クエリで Format関数を使う例

SELECT 顧客ID, 
Format(注文日, "yyyy/mm/dd hh:nn") AS 注文日時
FROM tbl_注文;
  • “注文日時”列で見やすい文字列として表示
  • 内部的には日付型だが、文字列出力となる点に注意

5. 時刻だけ/日付だけ扱いたい場合のコツ

  1. 日付部分だけ: DateValue(フィールド) で取り出すか、書式で表示しないようにする
  2. 時刻だけ: TimeValue(フィールド) で取り出すか、書式で “hh:nn” 等にして日付を隠す
  3. 0:00相当の時刻: DateValueで日付だけ切り出すと時刻は00:00:00になる

6. 桁ズレ/誤変換防止の注意点

  1. 年/月/日の順序
    • AccessやWindowsの地域設定が “m/d/yyyy” なのに対し、ユーザーは “yyyy-mm-dd” と書くなど不一致でエラー
    • 可能なら**#yyyy/mm/dd#** の形式で書き、OSのロケールに左右されないようにする
  2. 2桁年問題
    • “01/05/23” が 2023年か1923年か? Windowsの地域設定次第
    • 安全を期すなら4桁年か、DateValueの中で"2023/05/01"のように明示
  3. Excelの日付と混在
    • Excelの日付シリアルは1900年開始 + 独自のずれ(1900年うるう問題)がある
    • Accessで取り込む際はCDateDateSerialなどで再変換し、正確な日付値に

7. 日付を使ったよくあるクエリ例

' 1) 日付範囲指定
SELECT *
FROM tbl_注文
WHERE 注文日 BETWEEN #2023/01/01# AND #2023/12/31#;

' 2) 月だけ抽出
SELECT *
FROM tbl_注文
WHERE Month(注文日) = 5; ' 5月のデータ

' 3) 当日から 7日前まで
SELECT *
FROM tbl_注文
WHERE 注文日 >= DateAdd("d", -7, Date());
  • 日付リテラルは**#で囲む**(Access独自)
  • 関数 Month(), Year(), Day() などで年月日を切り出し抽出も可能

8. まとめ:日付/時刻の計算&表示を使いこなそう

  1. フィールド型: テーブルの該当列を「日付/時刻型」に設定
  2. DateAdd/DateDiff: 日付を加減算したり、差を求めたりできる
  3. Format: 表示を "yyyy/mm/dd" など自在にカスタマイズ
  4. 部分取り出し: DateValue(), TimeValue(), Year(), Month(), Day() などで柔軟に切り分け
  5. 誤変換防止: #~# や 4桁年の徹底、地域設定の確認
  6. クエリやフォーム、レポート: 必要に応じて日付表記や範囲絞り込みを上手に使う

Accessでの日付・時間の扱い方を理解すれば、売上日別集計予約システムのように、日付が絡む多くの業務アプリをシンプルに実装できます。ぜひ基本を押さえ、思い通りの書式表示や計算を活用してみてください。


関連記事

日付と時刻はビジネスアプリケーションの要です。Accessの独自ルール(#で囲む、ワイルドカードとの相性など)を理解して、柔軟かつ正確な日付操作を行いましょう。

DMM
ABOUT ME
まー
まー
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。 月30万の高配当投資も行っています。最新の銘柄情報もお届けしていきます。
googleアドセンス
記事URLをコピーしました