和風スパゲティのレシピ

日本語でコーディングするExcelVBA

値を日付型(Date型)に変換する - CDate関数

数値や文字列を日付型に変換する、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関数が必須となる場面に絞ってお使いください。