本ページには広告が含まれています。

ExcelVBA DateAdd関数 日時に期間を加算して返す

ExcelVBA DateAdd関数 日時に期間を加算して返す

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」については日数の設定です。

日数の設定値は「d」「y」「w」と3つあります。「d」「y」「w」ともに同じ結果が得られますが、通常は「d」を使います。

特に「w」はリファレンスに「平日」と説明されているため、平日の日数だけカウントして取得できるように思われます。しかし、次のように注意書きされています。
DateAdd 関数は(月曜日から金曜日までの) 仕事日の数のみを追加するのではないことに注意してください。

戻り値

戻り値説明
計算結果の日時戻り値のデータ型は 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

実行結果の イミディエイト 画像がこちらです。

DateAdd_Smple 実行結果イミディエイト画像

・はじめに、元の日付用の変数 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 関数のほか「日付・時刻」の関数について解説している過去記事があります。是非下記のリンクからジャンプしていただければ幸いです。

おわりに

Excel VBA DateAdd 関数は、「元の設定日時」に「指定した期間」を「設定した数」だけ増減させた日付時刻で返すということを解説しました。

設定値「y」と「w」がなぜ存在しているのかが調べても見つかりませんでした。
「d」「y」「w」ともに日付の設定として機能して同じ結果が得られます。「w」が平日だけカウントしてくれるなら、ものすごく使えるところですが残念です。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらです。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!