この記事ではCDate関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
CDate関数の使い方と注意点
CDate関数は、指定した値を日付型(Date型)に変換する関数です。
文字列・数値などを日付/時刻として扱いたいときに使用します。
構文
CDate(式)
- 式 : 日付または時刻に変換したい値(文字列・数値・時刻など)
- 戻り値 : 指定された式を日付(Date型)に変換した結果
使用例
日付文字列をDate型に変換する
Sub Sample()
Dim Mystring As String
Mystring = "07/15/2025"
Debug.Print Mystring
Debug.Print TypeName(Mystring)
Debug.Print CDate(Mystring)
Debug.Print TypeName(CDate(Mystring))
End Sub
▶ 出力結果
07/15/2025
String
2025/07/15
Date
日付と時刻を含む文字列を変換する
Sub Sample()
Debug.Print CDate("2025/07/15 13:30")
End Sub
▶ 出力結果
2025/07/15 13:30:00
数値から日付に変換(シリアル値)
Sub Sample()
Debug.Print CDate(45123)
End Sub
▶ 出力結果
(※1900年1月1日を「1」としたシリアル値として扱われる)
2023/07/16
ExcelやVBAでは、整数値は「1900/1/1」を起点とした連番の日付として扱われます(シリアル値)。
たとえば 1 → 1900/1/1、2 → 1900/1/2、…、45123 → 2023/7/16 となります。
⚠️注意
変換できない形式を渡すとエラーになる
Sub Sample()
On Error Resume Next
Err.Clear
Debug.Print CDate("15.07.2025") ' 区切り文字が不正
If Err.Number <> 0 Then Debug.Print "エラー:" & Err.Description
Err.Clear
Debug.Print CDate("明日") ' 自然言語は無効
If Err.Number <> 0 Then Debug.Print "エラー:" & Err.Description
Err.Clear
Debug.Print CDate("2025/13/01") ' 存在しない月
If Err.Number <> 0 Then Debug.Print "エラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果
エラー:型が一致しません。
エラー:型が一致しません。
エラー:型が一致しません。
上記ではエラー発生時にエラーを無視して次の処理を実行するよう記述していますが、
エラーを無視する記述が無い場合、エラー時に処理が止まってしまいます。
引数に渡す内容には注意しましょう。
文字列は「システムの地域設定」に依存して解釈される
Sub Sample()
Debug.Print CDate("12/08/2025")
End Sub
▶ 出力結果(設定が「日本」の場合)
2025/12/08
▶ 出力結果(設定が「米国」の場合)
2025/08/12
意図しない日付になる可能性があるため、**明確な形式(例:"2025/08/12")**で指定するようにしましょう。
Emptyは0として扱われ「日付なしの午前0時」が返り、Nullを渡すとエラー
Sub Sample()
On Error Resume Next
Debug.Print CDate(Empty)
Err.Clear
Debug.Print CDate(Null)
If Err.Number <> 0 Then Debug.Print "Null変換時のエラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果(設定が「日本」の場合)
0:00:00
Null変換時のエラー:Null の使い方が不正です。
関連するVBA関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方