指定された年/月/日を日付型に変換するには DateSerial 関数を使う。
DateSerial( Year, Month, Day )
- Year : 年
- Month : 月
- Day : 日
戻り値は内部処理形式が Date 型のバリアント。
WScript.Echo DateSerial(2022, 8, 11)
' →2022/08/11
存在しない日付を指定した場合、自動で補正される。
補正後の日付が許容範囲内であればエラーにはならない。
'2022年8月32日を指定 → 2022年9月1日
WScript.Echo DateSerial(2022, 8, 32)
' →2022/09/01
'2022年13月11日を指定 → 2023年1月11日
WScript.Echo DateSerial(2022, 13, 11)
' →2023/01/11
日に 0 (ゼロ)を指定すると、前月の末日が返る。
'2022年2月の月末日は?
WScript.Echo DateSerial(2022, 3, 0)
' →2022/02/28
月に 0 (ゼロ)を指定すると前年の12月が返る。
WScript.Echo DateSerial(2022, 0, 11)
' →2021/12/11
年の指定が2桁までの場合、自動で4桁に補正される。
1~49は2000年、50~99は1900年となる。
(Windows 10 Pro 21H2 で確認)
WScript.Echo DateSerial(1, 1, 1)
' →2001/01/01
WScript.Echo DateSerial(49, 12, 31)
' →2049/12/31
WScript.Echo DateSerial(50, 1, 1)
' →1950/01/01
WScript.Echo DateSerial(99, 12, 31)
' →1999/12/31
WScript.Echo DateSerial(100, 1, 1)
' →100/01/01
有効な日付の範囲から外れた場合はエラーになる。
WScript.Echo DateSerial(10000, 1, 1)
' →エラー
自動補正後の日付が範囲外であってもエラーになる。
'9999年12月32日が自動補正されて10000年1月1日になる
'(しかし10000年は有効範囲外なのでエラー)
WScript.Echo DateSerial(9999, 12, 32)
' →エラー
引数 年/月/日 のいずれか1つでも -32768 ~ 32767 の範囲外だった場合はエラーが起きる。
WScript.Echo DateSerial(100, 1, 32767)
' → 189/09/17
WScript.Echo DateSerial(100, 1, 32768)
' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: 32768]'
WScript.Echo DateSerial(2000, 1, -32768)
' → 1910/04/14
WScript.Echo DateSerial(2000, 1, -32769)
' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: -32769]'