【Access関数】DateDiff関数の使い方|構文・具体例

入門講習

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

DateDiff関数とは

DateDiff関数は、2つの日付や時刻の差を、指定した単位で数値として返す関数です。

例えば
「ある日付から今日まで何日経過しているか」
「2つの日付の間に何か月あるか」等を求めたいときに使用します。

構文

DateDiffの構文

DateDiff(単位,日時1,日時2[,週の開始曜日][,年の最初の週])

各構成要素の内容は次のとおりです。

引数必須/任意内容
単位必須間隔の差を求める日付・時間単位。設定値は【表1】を参照
日時1必須間隔を計算する1つ目の日付/時刻
日時2必須間隔を計算する2つ目の日付/時刻
週の開始曜日任意週の開始曜日。設定値は【表2】を参照  
年の最初の週任意年の最初の週。設定値は【表3】を参照

本関数を使用する多くの場合、時間間隔日時1日時2のみを使うケースがほとんどです。

【表1】時間間隔の設定値

設定値内容内容例
yyyy2つの日付間の年数
q四半期四半期単位での差
m月数の差
y年間通算日年始からの日数(365日基準)
d日数の差
w週日特定曜日がいくつあったか
ww週数の差
h時間の差
n分数の差
s秒数の差

【表2】週の開始曜日の設定値(※本引数を省略した場合は、vbSundayが規定値。)

定数名内容
vbUserSystem0システム既定値
vbSunday1日曜始まり
vbMonday2月曜始まり
vbTuesday3火曜始まり
vbWendneday4水曜始まり
vbThursday5木曜始まり
vbFriday6金曜始まり
vbSaturday7土曜始まり

既定は日曜日が週の始まりだけど、会社のカレンダーによっては月曜始まりにしたい場合などに設定します。

【表2】年の最初の週の設定値(※本引数を省略した場合は、vbFirstJan1が規定値。)

定数名内容
vbUserSystem0システム既定値
vbFirstJan111月1日を含む週を第1週とする
vbFirstFourDays24日以上含む最初の週を第1週とする
vbFirstFullWeek3新年に完全に含まれる最初の週を第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 文の抽出条件として「最終更新から〇か月以上経過しているもの」などの区分でデータを取得する際に使える。

タイトルとURLをコピーしました