更新日:、 作成日:
VBA CDate 関数:日付に変換する
はじめに
Excel VBA マクロの CDate 関数から日付に変換する方法を紹介します。
CDate 関数は、文字列や数値などを日付型 (Date) に変換します。
"2013年1月31日" なら 2013/01/31 を返します。
"3時4分5秒" なら 3:04:05 を返します。
文字列を日付型に変換したいときに使用します。
CDate 関数の引数と戻り値
CDate(値)
値を日付型 (Date) に変換します。
引数「値」 | 文字列や数値を指定します。 |
戻り値の型 | 日付型 (Date) |
解説
文字列や数値を日付型 (Date) に代入すると、CDate 関数を使用したときと同じ結果になります。
引数「値」が "2013年1月2日 3時4分5秒" のような文字列なら、2013/01/02 3:04:05 の日時に変換します。
引数「値」が数値なら、日付型の初期値 1899/12/30 にその数値の日数を足した日付に変換します。小数は時刻になります。
変換できるのは日付型の範囲 西暦100年1月1日 ~ 西暦9999年12月31日 の間です。
年が 2 桁なら 0 ~ 49 は 2000 ~ 2049 年 、50 ~ 99 は 1950 ~ 1999 年 に変換します。Windows のバージョンによって変わります。
範囲外の値を指定すると「エラー 13 型が一致しません。」が発生します。
変換できない値を指定すると「エラー 13 型が一致しません。」が発生します。一月 のような漢数字は変換できません。
変換できるかどうかは「IsDate 関数」で判定できます。
24 時間以上
引数「値」が "24:00:00" のような、24 時間を超えるときは、変換できません。
24 時間以上の時刻を入力するには「TimeSerial 関数」を使用します。
スポンサーリンク
使用例
CDate 関数の使用例を紹介します。
日付に変換する
日付に変換します。
Dim d As Date
d = CDate("2013/1/2")
Debug.Print(d) ' 2013/01/02
d = CDate("2013年1月2日")
Debug.Print(d) ' 2013/01/02
d = CDate("1:2:3")
Debug.Print(d) ' 1:02:03
d = CDate("1時2分3秒")
Debug.Print(d) ' 1:02:03
d = CDate("2013/1/2 3:4:5")
Debug.Print(d) ' 2013/01/02 3:04:05
d = CDate(0)
Debug.Print(d) ' 0:0:0、1899/12/30 は時刻を表す日付
d = CDate(1)
Debug.Print(d) ' 1899/12/31
d = CDate(2)
Debug.Print(d) ' 1900/01/01
d = CDate("2013/1/2") ' 全角は変換できる
Debug.Print(d) ' 2013/01/02
d = CDate("24:00:00") ' エラー、24 時間を超える時刻は変換できない
d = CDate("一月三十一日") ' エラー、漢数字は変換できない
変換できるときだけ変換する
「IsDate 関数」を使用して、変換できるか判定できます。
Dim s As String
s = "一月三十一日"
Dim d As Date
If IsDate(s) = True Then ' 変換できるときだけ日付にする
d = CDate(s)
Else
d = 0 ' 日付の初期値
End If
Debug.Print(d)
年月日、時分秒から変換する
「DateSerial 関数」を使用して、年月日から日付を入力できます。
Dim d As Date
d = DateSerial(2000, 12, 31)
Debug.Print(d) ' 2000/12/31
「TimeSerial 関数」を使用して、時分秒から時刻を入力できます。
Dim d As Date
d = TimeSerial(1, 2, 3)
Debug.Print(d) ' 1:02:03
d = TimeSerial(24, 2, 3)
Debug.Print(d) ' 1899/12/31 0:02:03
Dim d As Date
d = DateSerial(2000, 12, 31) + TimeSerial(1, 2, 3)
Debug.Print(d) ' 2000/12/31 1:02:03