連休モードも終わり…と思ったら、明日から週末ですね。
僕は、連休は、ひたすら勉強と仕事…という計画だったのですが。
「勉強」のほうの目的で参加したセミナー計4日が思いのほか重たく、それ以外のことはそんなに進捗しない10日間でした。
以下は、頻繁にもらう質問。
エクセルマクロでの日付時刻の計算にかかるもの。
小川さん
いつも大変楽しく勉強させていただきております。
ウォーミングアップ問題1についての質問です。
私は以下のようなコードを書いたのですが、小川先生と同じ日付が出ました。
こちらの方がシンプルでいいと思ったのですが、このコードでも問題はないですか?
Sub Sample1()
Worksheets(“Sheet3”).Range(“A1”).Value = Date + 3 ‘[1]
End Sub
以下、簡単に、補足。
「Date」は、そのマクロを実行したときの日付を返す関数です。
本日、5月10日に実行したならば、「2019/05/10」。
明日、5月11日に実行したならば、「2019/05/11」。
Date + 3
は、その3日後。
本日、5月10日に実行したならば、「2019/05/13」。
明日、5月11日に実行したならば、「2019/05/14」。
左辺では、
Worksheets(“Sheet3”).Range(“A1”).Value
と言っていますので、
紹介したマクロを、本日、5月10日に実行したならば、以下の結果を得ます。
シート「Sheet3」のセル「A1」に、「2019/05/13」と記入する
ということで。
この方からの質問者さんからの質問に戻ります。
私は以下のようなコードを書いたのですが、小川先生と同じ日付が出ました。
こちらの方がシンプルでいいと思ったのですが、このコードでも問題はないですか?
僕がサンプルとして示したのは、以下の[2]のコード。
Sub mondai1() ' Worksheets("Sheet3").Range("A1").Value = Date + 3 '[1] Worksheets("Sheet3").Range("A1").Value = DateAdd("d", 3, Date) '[2] End Sub
「[1]のほうが、[2]よりシンプルでよいのでは?」というのが、質問者さんのご意見。
さて、どうでしょう。
「3日足す」、「2日引く」のような、日付のシンプルな計算なら、[1]の書き方でもまあOKです。
「○日足す/引く」だけでなく、「12時間足す」、「36時間引く」とかの計算もできます。
以下の、[3]-[6]参照。
Sub Sample2() Range("A1").Value = Date + 3 '[3] Range("A2").Value = Date - 2 '[4] Range("A3").Value = Date + 0.5 '[5] Range("A4").Value = Date - 1.5 '[6] End Sub
しかし、ここで、ハタ、と悩みます。
「12時間」とかはともかく、以下のような場合はどうするのだ?!
やりきれないことはないです。
以下の、[7]-[9]参照。
Sub Sample3() Range("A5").Value = Date + 5 / 24 '[7] Range("A6").Value = Date + 7 / 24 / 60 '[8] Range("A7").Value = Date + 17 / 24 / 60 / 60 '[9] End Sub
しかし…。
なんか、読みにくいですね。もはや、シンプルとは言い難い。
そこで、[2]で僕が示した、DateAdd関数の出番です。
前記[3]-[9]を、DateAdd関数を使ってリライトしてみましょう。
すると、以下の要領。
Sub Sample4() Range("B1").Value = DateAdd("d", 3, Date) '[3-改] 3日後 Range("B2").Value = DateAdd("d", -2, Date) '[4-改] 2日前 Range("B3").Value = DateAdd("h", 12, Date) '[5-改] 12時間後 Range("B4").Value = DateAdd("h", -36, Date) '[6-改] 36時間前 Range("B5").Value = DateAdd("h", 5, Date) '[7-改] 5時間後 Range("B6").Value = DateAdd("n", 7, Date) '[8-改] 7分後 Range("B7").Value = DateAdd("s", 17, Date) '[9-改] 17秒後 End Sub
書式が整って、シンプルになりました。
計算の都度、「Date + 17 / 24 / 60 / 60」なんてしんどい式を書かなくてよい分、シンプル。
DateAdd関数の第一引数(ひきすう)は、
“d” ○日後/前
“h” ○時間後/前
“s” ○秒前/後
というここで紹介したもの以外にも、いろいろバリエーションがあります。
たとえば「○年後/前」、「○週後/前」、「○四半期前/後」等々。
では、どんなバリエーションがあるか?
本家、Microsoftのウェブページを参照してください。
こちらの関連講座もどうぞ