DateDiff関数は、指定した2つの日付・時刻の間隔を返してくれる関数です。この記事では、基本的な構文や、具体的な使い方について解説します。
DateDiff関数とは
DateDiff関数は、2つの日付や時刻の差を、指定した単位で数値として返す関数です。

例えば
「ある日付から今日まで何日経過しているか」
「2つの日付の間に何か月あるか」等を求めたいときに使用します。
構文
DateDiff(単位,日時1,日時2[,週の開始曜日][,年の最初の週])
各構成要素の内容は次のとおりです。
| 引数 | 必須/任意 | 内容 |
|---|---|---|
| 単位 | 必須 | 間隔の差を求める日付・時間単位。設定値は【表1】を参照 |
| 日時1 | 必須 | 間隔を計算する1つ目の日付/時刻 |
| 日時2 | 必須 | 間隔を計算する2つ目の日付/時刻 |
| 週の開始曜日 | 任意 | 週の開始曜日。設定値は【表2】を参照 |
| 年の最初の週 | 任意 | 年の最初の週。設定値は【表3】を参照 |

本関数を使用する多くの場合、時間間隔、日時1、日時2のみを使うケースがほとんどです。
【表1】時間間隔の設定値
| 設定値 | 内容 | 内容例 |
|---|---|---|
| yyyy | 年 | 2つの日付間の年数 |
| q | 四半期 | 四半期単位での差 |
| m | 月 | 月数の差 |
| y | 年間通算日 | 年始からの日数(365日基準) |
| d | 日 | 日数の差 |
| w | 週日 | 特定曜日がいくつあったか |
| ww | 週 | 週数の差 |
| h | 時 | 時間の差 |
| n | 分 | 分数の差 |
| s | 秒 | 秒数の差 |
【表2】週の開始曜日の設定値(※本引数を省略した場合は、vbSundayが規定値。)
| 定数名 | 値 | 内容 |
|---|---|---|
| vbUserSystem | 0 | システム既定値 |
| vbSunday | 1 | 日曜始まり |
| vbMonday | 2 | 月曜始まり |
| vbTuesday | 3 | 火曜始まり |
| vbWendneday | 4 | 水曜始まり |
| vbThursday | 5 | 木曜始まり |
| vbFriday | 6 | 金曜始まり |
| vbSaturday | 7 | 土曜始まり |

既定は日曜日が週の始まりだけど、会社のカレンダーによっては月曜始まりにしたい場合などに設定します。
【表2】年の最初の週の設定値(※本引数を省略した場合は、vbFirstJan1が規定値。)
| 定数名 | 値 | 内容 |
|---|---|---|
| vbUserSystem | 0 | システム既定値 |
| vbFirstJan1 | 1 | 1月1日を含む週を第1週とする |
| vbFirstFourDays | 2 | 4日以上含む最初の週を第1週とする |
| vbFirstFullWeek | 3 | 新年に完全に含まれる最初の週を第1週とする |

国や業界によっては「第1週」の定義が違うため、そういった際に明示的に指定することができます。
具体例
DateDiff関数の基本的な例を解説します。
【具体例①】
DateDiff("yyyy", #2020/01/01#,#2025/05/01# )
【結果】
戻り値として5が返されます。
【解説】
単位にyyyyを設定することで、2つの日付間隔を年数として算出する例です。
引数「年の最初の週」を省略していますので、規定値としてvbFirstJan1が設定されています。この場合は、この2つの日付の間に1月1日が何回含まれているかを算出します。事例では2021/01/01~2025/01/01の間(2020/01/01は含みません)に5回含まれていることから、戻り値が5となります。
【具体例②】
DateDiff("d", #2020/01/01#,#2025/05/01# )
【結果】
戻り値として1947が返されます。
【解説】
単位にdを設定することで、2つの日付間隔を日数で算出する例です。
なお、単位をy(年間通算日)にしても同様の結果を得られます。
【具体例③】
DateDiff("m", #2025/01/01#,date() )
【結果と解説】
引数「日付2」には、日付そのものではなくDate関数を、単位にはmを設定しているケースです。Date関数は現時点の日付を返す関数であるため、例えば今が2025/08/30であれば、戻り値は7となります。
使用例
上記は最も基本的な具体例ですが、DateDiff関数はAccess内の様々な場所で使用することができます。ここでは、フォームのコントロールソース、VBA、クエリで使用する例をご紹介します。
フォームのテキストボックスで使用
フォームに配置したテキストボックスのコントロールソースにDateDiff関数を設定することで、他のテキストボックスの値に応じた、結果を取得することができます。
=DateDiff("h", [テキスト1], [テキスト2]) & "時間 " & _
(DateDiff("n", [テキスト1], [テキスト2]) Mod 60) & "分"
【解説】

出社時間と退社時間のテキストボックスに入力された値に応じて、テキスト3のテキストボックスに、勤務時間を表示させることができます。
この事例での工夫ポイントは、結果を「mm:nn」形式で表示している点です。通常「単位」の引数は一種類しか設定できないため、引数mと引数nを設定したDateDiff関数を二つ用意して、それら繋げることで表示しています。

Mod関数を使って、日付1と日付2の差を60で割った余りを「分」として表示しているんですね!
例えば、出社時間9:00、退社時間18:00と入力すると、テキスト3に9が表示されます。
VBA内で使用
VBAでDateDiff関数を使う場合は、取得した値を変数に格納するパターンが多く見受けられます。
Private Sub 遅刻の判定_Click()
Dim startTime As Date
startTime = Me.出社時間
If DateDiff("n", #9:00:00 AM#, startTime) > 0 Then
MsgBox "遅刻です!"
Else
MsgBox "定時または早出です。"
End If
End Sub
【解説】
フォーム上のテキストボックス「出社時間」に入力された値を元に、遅刻かそうでないかを判定する例です。
テキストボックス出社時間に入力された値を、変数startTimeに格納します。
次にIf関数で変数の値を判定し、結果によりメッセージを表示します。startTime
クエリ(SQL)で使用
クエリ(SQL)の抽出条件としても活用することができます。
SELECT *
FROM T_社員情報データ
WHERE DateDiff("m",[最終更新日],Date()) >= 6;
【解説】
WHERE句に上記条件を指定することで、最終更新日から6か月以上経過したデータを抽出することができます。
まとめ
最後に記事の要点をまとめます。
DateDiff関数とは何か
2つの日時(日付/時刻)の間隔を、指定した単位で数値として返す関数。日数・月数・年数などの差を求めたいときに使う。
基本の構文
DateDiff(単位, 日時1, 日時2[, 週の開始曜日][, 年の最初の週])
※「単位」「日時1」「日時2」は必須引数。
※「週の開始曜日」「年の最初の週」は任意で、必要に応じて指定可能。
使用できる場面/使いどころ
・フォーム(テキストボックス等)で、入力された日時同士の差を画面表示する際。
・VBA 内で変数に格納して、条件分岐(例:遅刻の判定など)に使う。
・クエリや SQL 文の抽出条件として「最終更新から〇か月以上経過しているもの」などの区分でデータを取得する際に使える。


