【EXCEL VBA】日付や時間の計算をしたい

日付や時間を計算する方法を紹介します。10秒後、3分前、1時間後、一昨日、半年後、去年、10年後などですね。VBAにはDateAddという便利な関数が用意されています。うるう年も考慮してくれる優れものです。

DatAdd関数で解決する

DateAdd関数では、第1引数に日時間隔を指定します。指定できる日時間隔は以下となります。第2引数には計算したい数値を指定します。正の数値は未来、負の数値は過去を表します。

注意事項としては、年の演算は”y”ではなく”yyyy”を指定する必要があることです。

日時間隔説明
yyyy
q四半期
m
y通年での日数
d
w平日
ww
h
n
s

サンプルプログラムを確認する(コピペOK)

Sub sample()
    ' 秒の演算
    Debug.Print DateAdd("s", 1, "2019/6/15 13:10:5")        '2019/06/15 13:10:06
    Debug.Print DateAdd("s", 61, "2019/6/15 13:10:5")       '2019/06/15 13:11:06
    Debug.Print DateAdd("s", -1, "2019/6/15 13:10:5")       '2019/06/15 13:10:04
    
    ' 分の演算
    Debug.Print DateAdd("n", 1, "2019/6/15 13:10:5")        '2019/06/15 13:11:05
    Debug.Print DateAdd("n", 61, "2019/6/15 13:10:5")       '2019/06/15 14:11:05
    Debug.Print DateAdd("n", -1, "2019/6/15 13:10:5")       '2019/06/15 13:09:05
    
    ' 時の演算
    Debug.Print DateAdd("h", 1, "2019/6/15 13:10:5")        '2019/06/15 14:10:05
    Debug.Print DateAdd("h", 12, "2019/6/15 13:10:5")       '2019/06/16 1:10:05
    Debug.Print DateAdd("h", -1, "2019/6/15 13:10:5")       '2019/06/15 12:10:05
    
    ' 日の演算
    Debug.Print DateAdd("d", 1, "2019/6/15")        '2019/06/16
    Debug.Print DateAdd("d", 3, "2019/6/30")        '2019/07/03
    Debug.Print DateAdd("d", -1, "2019/7/1")        '2019/06/30
    
    ' 月の演算
    Debug.Print DateAdd("m", 1, "2019/6/15")        '2019/07/15
    Debug.Print DateAdd("m", 1, "2019/5/31")        '2019/06/30
    Debug.Print DateAdd("m", 2, "2019/12/31")       '2020/02/29
    Debug.Print DateAdd("m", -1, "2019/3/31")       '2019/02/28
    
    ' 年の演算は'yyyy' 注意
    Debug.Print DateAdd("yyyy", 1, "2019/12/31")    '2020/12/31
    Debug.Print DateAdd("yyyy", 1, "2020/2/29")     '2021/02/28

End Sub