DateAdd関数の使い方と注意点
DateAdd関数は、指定した日付に対して指定した単位の期間を加算(または減算)する関数です。
日付の加減算を簡単に行えます。
構文
DateAdd(単位, 数値, 日付)
-
単位 : 加算する期間の単位を表す文字列。以下のような指定があります。
設定 説明 "yyyy" 年 "q" 四半期 "m" 月 "y" 通年での日数 "d" 日 "w" 曜日単位(日曜日から土曜日) "ww" 週 "h" 時 "n" 分 "s" 秒 -
数値 : 加算(正の値)または減算(負の値)する数値(整数または小数)
-
日付 : Date型の値、または日付として解釈可能な文字列
-
戻り値 : 計算結果の日付(Date型)
使用例
日付に1年を加算する
Sub Sample()
Dim MyDate As Date
MyDate = #2025/01/02#
Debug.Print DateAdd("yyyy", 1, MyDate)
End Sub
▶ 出力結果
2026/01/02
日付から3ヶ月を減算する
Sub Sample()
Dim MyDate As Date
MyDate = #2025/05/10#
Debug.Print DateAdd("m", -3, MyDate)
End Sub
▶ 出力結果
2025/02/10
時刻に90分を加算する
Sub Sample()
Dim MyTime As Date
MyTime = #15:30:00#
Debug.Print DateAdd("n", 90, MyTime)
End Sub
▶ 出力結果
17:00:00
⚠️注意
単位文字列は正確に指定する必要がある
間違った単位文字列を使うとエラーになります。
例えば "mn" や "minute" のような指定は無効です。
Sub Sample()
On Error Resume Next
Err.Clear
Debug.Print DateAdd("minute", 90, Now)
If Err.Number <> 0 Then Debug.Print "minute : エラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果
minute : エラー:プロシージャの呼び出し、または引数が不正です。
上記ではエラー発生時にエラーを無視して次の処理を実行するよう記述していますが、
エラーを無視する記述が無い場合、エラー時に処理が止まってしまいます。
引数に渡す内容には注意しましょう。
小数を加算しても時刻が加わるとは限らない
DateAdd 関数に小数を渡しても、単位によっては小数点以下が無視(切り捨て)されることがあります。
たとえば"d"(日)単位では小数点以下が無視され、時刻は加算減算前のままになります。
Sub Sample()
Dim Mydatetime As Date
Mydatetime = DateAdd("d", 1.5, #2025/7/10#)
Debug.Print Mydatetime
Debug.Print Format(Mydatetime, "yyyy/mm/dd hh:nn:ss")
End Sub
▶ 出力結果
2025/07/11
2025/07/11 00:00:00
文字列の日付を渡す場合は解釈できる形式にする
Sub Sample()
On Error Resume Next
Err.Clear
Debug.Print DateAdd("d", 1, "2025.07.10") ' ピリオド区切り
If Err.Number <> 0 Then Debug.Print "2025.07.10 : エラー:" & Err.Description
Err.Clear
Debug.Print DateAdd("d", 1, "2025年13月1日") ' 存在しない月
If Err.Number <> 0 Then Debug.Print "2025年13月1日 : エラー:" & Err.Description
Err.Clear
Debug.Print DateAdd("d", 1, "来週") ' 自然言語
If Err.Number <> 0 Then Debug.Print "来週 : エラー:" & Err.Description
Err.Clear
Debug.Print DateAdd("d", 1, "2025/07/32") ' 存在しない日付
If Err.Number <> 0 Then Debug.Print "2025/07/32 : エラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果
2025.07.10 : エラー:型が一致しません。
2025年13月1日 : エラー:型が一致しません。
来週 : エラー:型が一致しません。
2025/07/32 : エラー:型が一致しません。
上記ではエラー発生時にエラーを無視して次の処理を実行するよう記述していますが、
エラーを無視する記述が無い場合、エラー時に処理が止まってしまいます。
引数に渡す内容には注意しましょう。
関連するVBA関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方