VBA DateAdd 関数:日付や時間を計算する

はじめに

Excel VBA マクロの DateAdd 関数から日付や時間を計算する方法を紹介します。

DateAdd 関数は、日時に指定した日付や時間を加算して返します。

DateAdd("d", 7, Date) のようにして、1 週間後の日付を取得できます。

DateAdd("h", -10, Time) のようにして、10 分前の時刻を取得できます。

1 週間後の日付を取得したいときや、10 分前の時刻を取得したいときに使用します。

日付を計算するには「日付を計算する」をご覧ください。
  • 目次
    • DateAdd 関数
    • 解説
    • 使用例

DateAdd 関数

DateAdd(単位, 加算時間, 日時)
日時単位加算時間を計算した結果を取得します。

引数「単位」引数「加算時間」の単位を表す文字を指定します。
引数「加算時間」引数「日時」に加算する時間を数値で指定します。
引数「日時」元になる日時を指定します。
戻り値の型日付型 (Date)

引数「単位」

単位の文字 説明
yyyy
m
d
h
n
s
q四半期
y通年での日数
w平日
ww

解説

引数「単位」が d なら日を、h なら時を加えた日時を返します。

日にちを計算するなら単位 d (日) を使用します。 y (通年での日数) や w (平日) は使いません。

引数「単位」が q (四半期) のとき、引数「加算時間」が 1 なら 3 ヵ月後の日付を返します。3 ヵ月後にその日がない時 (31日など) は、その月の最後の日付を返します。1月31日の 3 ヵ月後は 4月30日です。

引数「単位」が ww (週) のとき、引数「加算時間」が 1 なら 7 日後の日付を返します。

引数「加算時間」が負の値なら、引数「日時」より過去の日時を返します。

引数「日時」が時刻なら、その日付は日付型の初期値 1899/12/30 になります。

計算後の日時が日付型の範囲 西暦100年1月1日 ~ 西暦9999年12月31日 を超えるときは「エラー 5 プロシージャの呼び出し、または引数が不正です。」が発生します。

演算子で計算

演算子」を使用して 日付型 + 1 で明日の日付を、日付型 + 時間 で時間を計算できます。

日付を計算するには「日付を計算する」をご覧ください。

Excel の関数で計算

Excel の「エクセル 日付を自動で入力する」の方法で、1 日や月末など好きな日付を取得できます。

Excel の関数を使用するには「WorksheetFunction」をご覧ください。

使用例

日付や時間を計算する。

Dim dt As Date
dt = "2013/10/01 2:04:06"

Dim d As Date
d = DateAdd("yyyy", 1, dt) ' 1 年後
Debug.Print(d) ' 2014/10/01 2:04:06

d = DateAdd("m", 1, dt)    ' 1 月後
Debug.Print(d) ' 2013/11/01 2:04:06

d = DateAdd("d", -1, dt)   ' 昨日
Debug.Print(d) ' 2013/09/30 2:04:06

d = DateAdd("h", -1, dt)   ' 1 時間前
Debug.Print(d) ' 2013/10/01 1:04:06

d = DateAdd("n", 10, dt)   ' 10 分後
Debug.Print(d) ' 2013/10/01 2:14:06

d = DateAdd("s", 10, dt)   ' 10 秒後
Debug.Print(d) ' 2013/10/01 2:04:16

d = DateAdd("d", 1, "1:2:3")
Debug.Print(d) ' 1899/12/31 1:02:03

演算子で日付を計算

演算子」を使用して、日付や時間を計算できます。

Dim dt As Date
dt = "2013/10/01 2:04:06"

Dim d As Date
d = dt + 1
Debug.Print(d) ' 2013/10/02 2:04:06

d = dt + #1:00:00#
Debug.Print(d) ' 2013/10/01 3:04:06

1 日や月末

Excel の「エクセル 日付を自動で入力する」の方法で、1 日や月末など好きな日付を取得できます。

Excel の関数を使用するには「WorksheetFunction」をご覧ください。
Dim 対象 As Date
対象 = "2013/1/15"

Dim d As Date

' 1 日
d = DateSerial(Year(対象), Month(対象), 1)
Debug.Print(d) ' 2013/01/01

' 月末
d = WorksheetFunction.EoMonth(対象, 0)
Debug.Print(d) ' 2013/01/31