数値や文字列を日付型に変換する、CDate関数の使い方を解説します。
基本形
CDate(変換したい値)
実行例
' 文字列をDate型に CDate("2025/6/13") ' = #2025/6/13# CDate("令和7年6月13日") ' = #2025/6/13# CDate("6/13") ' = #2025/6/13# CDate("6/13/2025 14:30") ' = #2025/6/13 14:30:00# ' 数値(シリアル値)をDate型に CDate(45000) ' = #2023/3/15# CDate(45000.5) ' = #2023/03/15 12:00:00# 時刻入りもOK CDate(-100) ' = #1899/09/21" 負の値もOK ' エラー CDate(20250613) ' 「オーバーフローしました」エラー CDate("2025/12/32") ' 「型が一致しません」エラー
解説
CDate関数は文字列や数値を日付型(Date型)に変換する関数です。
文字列と数値(シリアル値)どちらにも対応しているのが特長で、
- 文字列の"2025/6/13"を渡すと#2025/6/13#(Date型)を返す
- シリアル値の45000を渡すと#2023/3/15#(Date型)を返す
この両方の動きをどちらもやってくれます。
前者はDateValue関数でも同じことができますが、
特に後者のシリアル値変換はCDate関数のみが持つ機能となります。
とはいえExcelVBAは暗黙の型変換を行ってくれる言語のため、
Date型の変数を用意し代入すれば同じ処理が実行されます。
Dim 日付 As Date 日付 = 45000 ' #2023/3/15#が代入されます。 日付 = "令和7年6月13日" ' #2025/6/13#が代入されます。
また、日付型を受け取る関数群も同じ変換をした上で処理されます。
month(45000) ' 3が返ります(2023/3/15 の3月)
日付を扱う際はしっかり変数に入れた方が読みやすいコードになるため、
CDate関数を使うくらいならDate型変数を用意した方が良い場面が多いです。
Variant変数の中身にDate型を明示して代入したいときなど、
CDate関数が必須となる場面に絞ってお使いください。