3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

エクセルマクロでの日付/時刻の「シンプルな」計算方法は?

2019年5月10日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

連休モードも終わり…と思ったら、明日から週末ですね。

僕は、連休は、ひたすら勉強と仕事…という計画だったのですが。
「勉強」のほうの目的で参加したセミナー計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時間」とかはともかく、以下のような場合はどうするのだ?!

  • 5時間分足したい
  • 7分足したい
  • 17秒足したい

やりきれないことはないです。
以下の、[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のウェブページを参照してください。



こちらの関連講座もどうぞ

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド