非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Excel/VBA:日付の操作

   

日付関係ってよく使うのにすぐ忘れてしまうので忘備録として書き留めておきます。今回はVBA編です。

まずは基本形

Now()はよく使いますね。時刻を抜いた日付のみはDate、時刻のみはTime()となります。なぜかDateのみは()がありません。付けても自動で消えてしまいます。

Sub 日付基本()
  Range("A1") = Now()
  Range("A2") = Date
  Range("A3") = Time()
End Sub
 

 

[ad#top-1]

日付の足算

日数の足し算は単純に1を足せば良いのですが、1か月後や1年後は各月の日数やうるう年の有無で足す日数が不明確です。そんな時はDateAddが便利です。以下は1年後を計算しています。

Sub 日付の足算()
  dt = Now()
  Range("A1") = dt
  '1年後
  dt = DateAdd("yyyy", 1, dt)
  Range("A2") = dt
End Sub

 

 

月末の日付を得る

月末を求めるにはDateSerial関数を使います。これはかなり便利です。

Sub 月末計算()
  dt = Now()
  '今月末
  Range("A1") = DateSerial(Year(dt), Month(dt) + 1, 0)
  '前月末
  Range("A2") = DateSerial(Year(dt), Month(dt), 0)
  '翌月末
  Range("A3") = DateSerial(Year(dt), Month(dt) + 2, 0)
End Sub
 

 

 

文字列から日付型に変換する

日付の文字列から日付型に変換する場合はDateValueを使います。ただ、この関数は微妙で「20170728」や「170728」という文字列は変換できません。以下の例では4行目でエラーが発生ます。

Sub 文字列から日付()
  Range("A1") = DateValue("2017/7/28")
  Range("A2") = DateValue("2017年7月28日")
  Range("A3") = DateValue("20170728") 'エラー!!
End Sub

 

この通りエラー発生。「20170728」とか「170728」とかって一番使われるのですが、これが使えず残念です。

 

4行目をコメントアウトして実行すると以下の通りです。

 

[ad#ad-1]

スポンサーリンク

 - Excel, VBA