毎月更新する帳簿に使用期間を自動で記入するプログラムを作成することを考えた。エクセルのVBAでは日付をDateで取得できる。さらに、年、月、日、時、分、秒のどの部分を取り出したいかはFormatで選択できる。たとえば Format(Date, “yyyy.mm”) とすれば、現在の年月が取得できる。
今月の21日から来月の20日までという表示をしたい場合はどうすればよいか。今月の21日は文字列の結合を使って Format(Date, “yyyy.mm”) & “.21″と書ける。それでは、来月の20日はどうするか。単純に数を加算する式 Format(Date, “yyyy.mm”) + 0.01 & “.20” を書いてみるとそれっぽく動作するが、繰り上がりが起きる9月から10月や、12月から1月がうまく動作しない。
ここで安易に場合分けをして書いてはいけない。DateAdd関数を使えば、日付や時刻の計算は簡単にできる。使用例はDateAdd VBAで検索すればたくさん出てくる。加算する値を負にすれば減算にもなるので、前の月や前の年といった過去の日時も取得できる。
例: 先月21日から今月の20日
Dim date_previous As Date
Dim date_now As Date
date_previous = DateAdd("m", -1, Now)
date_now = Date
Sheets("hoge").Cells(1, 1).Value = Format(date_previous, "yyyy.mm") & ".21~" & Format(date_now, "yyyy.mm") & ".20"