やりたいこと
- 12月の翌月は1月だが、この数字を簡単に VBA で取得したい。
- 月によって最終日が異なるが、月末日の数字を簡単に VBA で取得したい。
ポイント
- DateSerial メソッドを使用する。引数は、年、月、日、の数字。
- DateSerial メソッドは 1〜12以外の月数字や、1〜28、29、30、31以外の日にち数字とした場合、はみ出た分を自動的に加減して計算してくれる。
- 例えば、DateSerial(2015, 14, 0) ⇒ 2016/01/31 (14月 → 翌月2月 & 0日 → 前日末日) となる。
- 来月の月数字 (y は年の4桁文字列、m は月の数字文字列) :
month(DateSerial(y, m + 1, 1))
- 今月末の日にち数字 (y は年の4桁文字列、m は月の数字文字列) :
day(DateSerial(y, m + 1, 0))
VBA コード
Public Sub Test() Dim y As String y = "2015" Dim m As String m = "12" Debug.Print "年月は文字列だがフォーマットは、年: yyyy、月: mm、が前提。よって自動的に数字にキャストされる" Debug.Print Debug.Print "DateSerial(y, m + 1, 1) で翌月を得る。" Debug.Print DateSerial(y, m + 1, 1) Debug.Print "翌月の Date を month メソッドに渡してつき数字を得る。" Debug.Print month(DateSerial(y, m + 1, 1)) Debug.Print Debug.Print "DateSerial(y, m + 1, 0) で今月末を得る。" Debug.Print DateSerial(y, m + 1, 0) Debug.Print "今月末の Date を day メソッドに渡して今月末数字を得る。" Debug.Print day(DateSerial(y, m + 1, 0)) End Sub
おわりに
自分でロジックを考えた場合、月だけでも例えば、引数が12かどうかを判定、、、12超なら割ってあまりを、、、ゼロやマイナスの時は、、、などと考慮することがたくさんございます><。
さらに、なんとかがんばって書き上げましても正しく動作するかテストすることが面倒ですの><。
ですので、DateSerial メソッドのような存在は大変ありがたいですわ♪日付を扱うクラスやメソッドは、たいていの言語に備わっておりますので、コーディングではなく使える関数を調査することに時間をかけた方が良い結果となる場合が多いと存じます!
参考ページです!ありがとう存じます!
ちなみに、以前、VBA の Date 関連として、次を投稿いたしました。
日付まわりの扱いは、どの言語でも一手間かかりますわね♪
以上です。