エクセルバージョン
マイクロソフト365
本日はVBAで何年後や何か月前などの日付や日時を取得するDateAdd関数についてです。
それでは行ってみましょう!
Menu
DateAdd概要
・指定した日付けや現在時刻から何年後、何日後、何時間後や何年前、何日前、何時間前などの日付や日時を取得できます。
・Variant(Date)を返します。
構文
DateAdd(interval, number, date)
引数
DateAdd | 説明 | 必須/省略可 |
interval (第1引数) | 下記intervalの表から選択します。yyyyなら年、nなら分などを指定。 | 必須 |
number (第2引数) | 未来なら→1、何秒後なら→15など。 未来の日時取得は正(+)の値を指定。 | 必須 |
date (第3引数) | Now()とか日付(“2021/1/1”)など。いつから検索するかを指定。 | 必須 |
第1引数のintervalの設定
設定 | 説明 |
yyyy | 年 |
q | 四半期 |
m | 月 |
y | 年間通算日 |
d | 日 |
w | 平日 |
ww | 週 |
h | 時 |
n | 分 |
s | 秒 |
サンプル例
yyyy指定した場合(年)
1 2 3 4 5 | Sub yyyy() '年 Debug.Print dateAdd("yyyy", 1, "2021/1/1") '【結果】2022/01/01 Debug.Print dateAdd("yyyy", -1, "2021/1/1") '【結果】2020/01/01 End Sub |
m指定した場合(月)
1 2 3 4 5 | Sub m() '月 Debug.Print dateAdd("m", 1, "2021/1/1") '【結果】2021/02/01 Debug.Print dateAdd("m", -1, "2021/1/1") '【結果】2020/12/01 End Sub |
ww指定した場合(週)
1 2 3 4 5 | Sub ww() '週 Debug.Print dateAdd("ww", 1, "2021/1/1") '【結果】2021/01/08 Debug.Print dateAdd("ww", -1, "2021/1/1") '【結果】2020/12/25 End Sub |
d指定した場合(日)
1 2 3 4 5 | Sub d() '日 Debug.Print dateAdd("d", 365, "2021/1/1") '【結果】2022/01/01 Debug.Print dateAdd("d", -365, "2021/1/1") '【結果】2020/01/02 End Sub |
h指定した場合(時)
1 2 3 4 5 | Sub h() '時間(現在日時が2021/02/06 5:05:51の場合) Debug.Print dateAdd("h", 1, Now()) '【結果】2021/02/06 6:05:51 Debug.Print dateAdd("h", -1, Now()) '【結果】2021/02/06 4:05:51 End Sub |
n指定した場合(分)
1 2 3 4 5 | Sub n() '分(現在日時が2021/02/06 5:06:12の場合) Debug.Print dateAdd("n", 1, Now()) '【結果】2021/02/06 5:07:12 Debug.Print dateAdd("n", -1, Now()) '【結果】2021/02/06 5:05:12 End Sub |
s指定した場合(秒)
1 2 3 4 5 | Sub s() '秒(現在日時が2021/02/06 5:06:33の場合) Debug.Print dateAdd("s", 1, Now()) '【結果】2021/02/06 5:06:34 Debug.Print dateAdd("s", -1, Now()) '【結果】2021/02/06 5:06:32 End Sub |
注意点
・例えば1/31の1か月後は2/31ではなく2/28あるいは閏年の月末の日を取得します。
・DateAddで取得した値の書式は、コントロールパネルでの設定によって決まります。
・第2引数のnumberが整数で指定してない場合、最も近い整数で計算されます。
・計算された日付が西暦100年よりも前になる場合エラーが発生します。
dateAdd(“yyyy”, -1900, “2000/1/1”) → 西暦100年はOK
dateAdd(“yyyy”, -1901, “2000/1/1”) → 西暦99年はエラー
まとめ
未来や過去の日付を取得したい場合はご使用してみてください。
以上です。
日付の変換
【関数】(DATEVALUE)文字形式の日付をシリアル値の日付に変換
【関数】(YEAR,MONTH,DAY)日付から年,月,日を取得
時間
【VBA】(TimeValue)文字列の時間や数式から時刻を取得
【VBA】(TimeSerial)時,分,秒を指定して時刻を取得
【VBA】(Hour,Minute,Second)時,分,秒を分けて取得
現在の日時,日付
曜日や週
【VBA】(WeekdayName)数値や定数を指定で曜日取得
土日や祝日
【関数】(WORKDAY)土日,祝日,指定日を除いた日付を取得
【関数】(NETWORKDAYS)土日,祝日,指定日を除いた日数を取得