0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Excel VBA】DateAdd関数|日付や時間を加算・減算する方法と注意点

Last updated at Posted at 2025-07-14

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でよく使う関数一覧&基本の使い方

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?