DateSerial
DateSerial関数は年、月、日の数値からDate型の値を取得することが出来ます。
月、日の値が月日として設定できる許容範囲を超えた場合は、年や月の値が繰り上がります。
構文
1 |
Function DateSerial(Year As Integer, Month As Integer, Day As Integer) As Date |
Year | 年の数値を100から9999の範囲で指定します。 |
Month | 月の数値を指定します。通常は1から12の範囲で指定しますが、-32,768から32,767の範囲を指定すると超過分は年の増減に振り替えられます。 |
Day | 日の範囲を指定します。通常は1から31の範囲で指定しますが、-32,768から32,767の範囲を指定すると超過分は年や月の増減に振り替えられます。 |
Date(戻り値) | 引数の年月日に該当する日付をDate型で返却します。西暦100年1月1日から9999年12月31日の範囲を超える場合は実行時エラー5「プロシージャの呼び出し、または引数が不正です。」になります。 |
-32,768から32,767を超える値を設定した場合
引数のMonthとDayにはInteger型の範囲である-32,768から32,767が設定できますが、範囲を超える値を設定した場合は実行時エラー6「オーバーフローしました。」になります。
2桁以下の年度
2桁以下の年度はWindowsのシステムの設定で4桁の西暦に変換されます。
初期状態では0から29は2000年から2029年、30から99は1930年から1999年として解釈されます。
その設定はWindows7であれば、コントロールパネル→地域と言語→追加の設定→形式のカスタマイズ→日付タブ→カレンダー の「2桁の数字で年を入力すると、次の範囲内での暦年として解釈する」の年度、で変更可能です。
日付の足し算や引き算による増減のサンプル
DateSerial関数はDate型の結果を返すため、その値に対して単純に数値の足し算や引き算を行うことで日付の増減が可能です。
例えば、ある月の末日を調べたいときに翌月1日からマイナス1日すると月の末日が取得するなどで活用できます。
1 2 3 4 5 6 7 8 9 10 11 |
Sub DateSerialPlusMinusTest() Dim d As Date '// 2017/1/1 d = DateSerial(2017, 1, 1) Debug.Print d '// 2017/1/1の1日前(2016/12/31) d = d - 1 Debug.Print d End Sub |
実行結果
1 2 |
2017/01/01 2016/12/31 |
サンプルコード
通常の年月日での指定は上のサンプルの通りです。通常の年月日の範囲を超える場合の指定をした場合は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub DateSerialTest() Dim d As Date d = DateSerial(2017, 1, 365) Debug.Print d d = DateSerial(0, 32767, 0) Debug.Print d d = DateSerial(0, 0, 32767) Debug.Print d End Sub |
実行結果
1 2 3 |
2017/12/31 2730/06/30 2089/08/16 |