[VBA] DateAdd関数で日付と時間を加えます

 「今日から 500 日後は何年何月何曜日?」と訊かれて、ぱっと答えらえる人はそうそういないはずです。答えたら変な人です。コンピューターマンです。でもそんなことを訊く人もやっぱり変ですよね。おしゃべりはこのぐらいにして、日付に時間を加える関数 についてお勉強しましょう。
 

DateAdd関数で日付に時間を加えます

 DateAdd

DateAdd(設定値, 加算時間, 日付)

と記述して、[日付] に [設定値] で指定した型の [加算時間] を加えます。たとえば [設定値] に「年」を表す "yyyy" を指定して

DateAdd("yyyy", 5, Date)

とすると、現在から 5 年後の日付を得ることになります。[設定値] には次のような種類がありますよ。

設定値 単位 設定値 単位
yyyy q 四半期
m y 年間通算日
d w 週日
ww h
n s

 まあ、なにはともあれマクロを作ってみましょう。
 
 ダイアログボックスに加える日数 x の入力を促して、x 日後の日付を返すマクロを作ってみました。

'VBA 今日からx日後の日付を返すプロシージャ

Sub Day_Add()

  Dim myday As Date
  Dim x As Integer
  Dim mymsg As String

  mymsg = "日数を入力してください"

  x = Application.InputBox(prompt:=mymsg, Type:=1)

  myday = DateAdd("d", x, Date)

  MsgBox "今日から" & x & "日後の日付は" & myday & "です"

End Sub

 たとえば 2017 年 9 月 23 日にこの Day_Add() を実行して、500 という数字を入れると、

今日から 500 日後の日付は 2019/02/05です

というメッセージが表示されます。
 
 DateAdd のような関数は Excel関数にはないので、DateAdd 関数の機能をそのまま引き継いだ Function Macro(ユーザー定義関数)をつくっておくと便利です。

'VBA DateAddのワークシート用関数

Function DADD(mytype As String, x As Integer, mydate As Date) As Date

  DADD = DATEADD(mytype, x, mydate)

End Function

 この関数は

=DADD(設定値, 加算時間, 日付)

という形で用います。DateAdd関数とほぼ同じですが、[設定値] をダブルクォーテーション ("") で囲む必要はありません(最初の行で変数 mytype が文字列型であることが宣言されているからです)。下にワークシートへの記入例を載せておきます。

 VBAのDateAdd関数をユーザー定義として使えるようにする

 図をみると、たとえば 2017/10/5 3:00 に設定値 q で 4 を加えると、4 × 四半期でちょうど 1 年が加算されていることがわかります。また設定値 ww で 5 を加えると 5 週間後の 2017/11/9 3:00 と表示されています。皆さんもこの関数を使って、どの設定値が何を返すのかを確認しておいてくださいな。

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)