Excel VBAの「DateAdd 関数」について解説します。
DateAdd 関数とは
Excel VBA の DateAdd 関数は、任意の日付や時刻に、指定した日付や時間の間隔を加算して返します。
VBAで特定の日付を計算で求めたいときに使用します。
DateAdd 関数に設定した指定の日付や時刻に、時間や日数、月数、年数などを加えたり、差し引いたりする方法を解説します。
DateAdd 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
DateAdd(interval, number, date)
引数
引数 | 説明 |
---|---|
interval | 【必須】加算する時間間隔を表す文字列式を指定します ※ 指定できる間隔設定値は下記の別表を参照ください |
number | 【必須】増減させる間隔を表す数値(式)を指定します ※ 正数なら未来、負数なら過去の日時を取得します |
date | 【必須】元になる任意の日付や時刻を指定します ※ Variant (Date)またはリテラル文字列で指定 |
引数 Interval に指定できる間隔設定値
設定値 | 内容 |
---|---|
yyyy | 年 |
q | 四半期 |
m | 月 |
d | 日 |
ww | 週 |
h | 時 |
n | 分 |
s | 秒 |
y | 日(通年での日数) |
w | 日(平日の日数ではない) |
年が「yyyy」、週が「ww」という点に注意してください。間違いやすい「y」「w」については日数の設定です。
戻り値
戻り値 | 説明 |
---|---|
計算結果の日時 | 戻り値のデータ型は Variant (Date) です |
戻り値の形式は、引数 date で渡された形式ではなく コントロールパネル の設定によって決まります。
解説(使用例)
では「 Date を 2024年5月31日 」の設定でいくつかの使用例を表にしてみます。
取得したい日付等 | コード | 結果 |
---|---|---|
1年後の日付 | DateAdd(“yyyy”, 1, Date) | 2025/05/31 |
1四半期後の日付 | DateAdd(“q”, 1, Date) | 2024/08/31 |
1四半期前の日付 | DateAdd(“q”, -1, Date) | 2024/02/29 |
1月後の日付 | DateAdd(“m”, 1, Date) | 2024/06/30 |
1週間後の日付 | DateAdd(“ww”, 1, Date) | 2024/06/07 |
1日後の日付 | DateAdd(“d”, 1, Date) | 2024/06/01 |
1日前の日付 | DateAdd(“d”, -1, Date) | 2024/05/30 |
引数 number が正の数ならば Interval 後、負の数ならば Interval 前を求めることができます。
DateAdd 関数は無効な日付を返すことはありません。上の例を見ると、1四半期前の日付を返す設定で “2024/02/29” と閏年の月末日付が返ってきています。単純に期間を加減させているだけでなく、月の日数や閏年などを判定していることがわかります。
それでは次に、簡単なサンプルコードにして結果を表示してみます。
DateAdd 関数の動作を確認するサンプルコード
'■DateAdd関数の動作確認サンプル
Sub DateAdd_Sample()
Dim md As Date '元の日付用
Dim d As Date '結果保存用
md = "2024/05/31"
Debug.Print "【" & md & "】の"
'▼各引数の設定を変更させて確認
d = DateAdd("yyyy", 1, md) '1年後
Debug.Print "1年後の日付:" & d '2025/05/31
d = DateAdd("q", 1, md) '1四半期後
Debug.Print "1四半期後の日付:" & d '2024/08/31
d = DateAdd("q", -1, md) '1四半期前
Debug.Print "1四半期前の日付:" & d '2024/02/29
d = DateAdd("m", 1, md) '1月後
Debug.Print "1月後の日付:" & d '2024/06/30
d = DateAdd("ww", 1, md) '1週間後
Debug.Print "1週間後の日付:" & d '2024/06/07
d = DateAdd("d", 1, md) '1日後
Debug.Print "1日後の日付:" & d '2024/06/01
d = DateAdd("d", -1, md) '1日前
Debug.Print "1日前の日付:" & d '2024/05/30
▼表には設定していない時間などの単位で設定
d = DateAdd("h", -6, md) '6時間前
Debug.Print "6時間前:" & d '2024/05/30 18:00:00
d = DateAdd("n", 20, md) '20分後
Debug.Print "20分後:" & d '2024/05/31 0:20:00
d = DateAdd("s", 30, md) '30秒後
Debug.Print "30秒後:" & d '2024/05/31 0:00:30
End Sub
実行結果の イミディエイト 画像がこちらです。
・はじめに、元の日付用の変数 md と結果保存用の変数 d を用意します。
・5行目、元の日付 “2024/05/31” を変数にセットしています。
・6行目、イミディエイトに元の日付 “2024/05/31” を表示させています。
▼各引数の設定を変更させて確認
・9~25行目までは、使用例の表で示した例を順次設定して表示させています。
▼表には設定していない時間などの単位で設定
元の日付 “2024/05/31” には時刻を設定していないので “2024/05/31 0:0:0” が基準になります。
・31行目、DateAdd(“h”, -6, md) では6時間前の日付時刻を表示します。
・34行目、DateAdd(“n”, 20, md) では20分後の日付時刻を表示します。
・37行目、DateAdd(“s”, 30, md) では30秒後の日付時刻を表示します。
コードの実行結果は、この上に表示しているイミディエイトの画像でご確認ください。
Date など日付・時刻関数の使用例について
DateAdd 関数の使用例は掲載されていませんが、Date 関数のほか「日付・時刻」の関数について解説している過去記事があります。是非下記のリンクからジャンプしていただければ幸いです。
おわりに
VBAの関数一覧はこちらです。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA DateAdd 関数は、「元の設定日時」に「指定した期間」を「設定した数」だけ増減させた日付時刻で返すということを解説しました。
設定値「y」と「w」がなぜ存在しているのかが調べても見つかりませんでした。
「d」「y」「w」ともに日付の設定として機能して同じ結果が得られます。「w」が平日だけカウントしてくれるなら、ものすごく使えるところですが残念です。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;