文字列や整数で指定された値を日付型に変換する方法を紹介する。
日付として認識できるか確認する
IsDate 関数は日付として認識できるかどうかを返す。
IsDate( Expression )Expression には確認する式を指定する。
日付または時刻として認識できる場合は True を返す。
それ以外の場合は False を返す。
NOTE:
Windows で有効な日付範囲は、西暦100年1月1日から西暦9999年12月31日まで。
日付型に変換する
CDate 関数は指定された式を日付型に変換する。
CDate( Expression )Expression には変換する式を指定する。
戻り値は内部処理形式が Date 型のバリアント。
WScript.Echo CDate("2022/2/2") ' → 2022/02/02
存在しない日付を指定した場合はエラーが起きる。
WScript.Echo CDate("2022/2/31") ' → Microsoft VBScript 実行時エラー: 型が一致しません。: 'CDate'
IsDate 関数が False の場合でも CDate 関数で変換できることもある。
たとえば数値の 100 を引数とした場合、IsDate 関数は False (0) を返すが、CDate 関数は日付型の1900年4月9日を返す。
WScript.Echo IsDate(100) ' → 0 WScript.Echo CDate(100) ' → 1900/04/09
整数の年/月/日を日付型に変換する
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]'
日付文字列を日付型に変換する
DateValue 関数は日付文字列を日付型に変換する。
DateValue( DateString )DateString には日付文字列を指定する。
存在しない日付を指定するとエラーになる。
戻り値は内部処理形式が Date 型のバリアント。
WScript.Echo DateValue("100/1/1") ' → 100/01/01 WScript.Echo DateValue("9999/12/31") ' → 9999/12/31
英語(アメリカ)の年月日指定(月→日→年)でも変換できる。
WScript.Echo DateValue("Dec 30, 1991") ' → 1991/12/30 WScript.Echo DateValue("December 30, 1991") ' → 1991/12/30
英語(イギリス)の年月日指定(日→月→年)でも変換できる。
WScript.Echo DateValue("30 Dec 1991") ' → 1991/12/30 WScript.Echo DateValue("30 December 1991") ' → 1991/12/30
年の指定を省略した場合は現在の年が使われる。
WScript.Echo DateValue("12/30") ' → 2023/12/30 WScript.Echo DateValue("December 30") ' → 2023/12/30
時刻は返されない。
WScript.Echo DateValue("2022/9/30 15:30:00") ' → 2022/09/30
整数の時/分/秒を日付型に変換する
TimeSerial 関数は整数で指定された時/分/秒を日付型に変換する。
TimeSerial( Hour, Minute, Second )Hour には時、 Minute には分、 Second には秒を整数で指定する。
戻り値は内部処理形式が Date 型のバリアント。
WScript.Echo TimeSerial(0, 0, 0) ' → 0:00:00 WScript.Echo TimeSerial(23, 59, 59) ' → 23:59:59
時刻の範囲外の数値を指定した場合、自動で繰り上げられる。
たとえば、75秒を指定した場合は1分15秒になる。
'75秒は1分15秒になる WScript.Echo TimeSerial(0, 0, 75) ' → 0:01:15 '75分は1時間15分になる WScript.Echo TimeSerial(0, 75, 0) ' → 1:15:00 '40時間は1日と16時間になる WScript.Echo TimeSerial(40, 0, 0) ' → 1899/12/31 16:00:00
引数のいずれか1つでも -32768 ~ 32767 の範囲外だった場合はエラーとなる。
WScript.Echo TimeSerial(32767, 0, 0) ' → 1903/09/26 7:00:00 WScript.Echo TimeSerial(32768, 0, 0) ' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: 32768]' WScript.Echo TimeSerial(-32768, 0, 0) ' → 1896/04/04 8:00:00 WScript.Echo TimeSerial(-32769, 0, 0) ' → Microsoft VBScript 実行時エラー: オーバーフローしました。: '[number: -32769]'
時刻文字列を日付型に変換する
TimeValue 関数は時刻文字列を日付型に変換する。
TimeValue( TimeString )TimeString には時刻文字列を指定する。
存在しない時刻を指定するとエラーになる。
戻り値は内部処理形式が Date 型のバリアント。
WScript.Echo TimeValue("0:0:0") ' → 0:00:00 WScript.Echo TimeValue("1.23.45") ' → 1:23:45
数字を1つだけ指定した場合はエラーになる。
WScript.Echo TimeValue("5") ' → Microsoft VBScript 実行時エラー: 型が一致しません。: 'TimeValue'
数字を2つ指定した場合は、秒は 0 秒となる。
WScript.Echo TimeValue("7:9") ' → 7:09:00
存在しない時刻を指定した場合はエラーが起きる。
'NOTE: 60秒は存在しない WScript.Echo TimeValue("7:20:60") ' → Microsoft VBScript 実行時エラー: 型が一致しません。: 'TimeValue'
日付+時刻を指定しても時刻の部分だけ返される。
WScript.Echo TimeValue("2022/9/30 15:30:45") ' → 15:30:45