更新日:、 作成日:
VBA DateAdd 関数:日付や時間を計算する
はじめに
Excel VBA マクロの DateAdd 関数から日付や時間を計算する方法を紹介します。
DateAdd 関数は、日時に指定した日付や時間を加算して返します。
DateAdd("d", 7, Date) のようにして、1 週間後の日付を取得できます。
DateAdd("h", -10, Time) のようにして、10 分前の時刻を取得できます。
1 週間後の日付を取得したいときや、10 分前の時刻を取得したいときに使用します。
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 日や月末など好きな日付を取得できます。
使用例
DateAdd 関数の使用例を紹介します。
日数や時間を計算する
日数や時間を計算します。
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 日や月末など好きな日付を取得できます。
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
スポンサーリンク