和風スパゲティのレシピ

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

文字列を日付(Date型)に変換する-DateValue関数

文字列を日付型に変換する、DateValue関数の使い方を解説します。

基本形

DateValue(日付と判定できる文字列)

実行例

' 文字列をDate型に
DateValue("2025/6/13") ' = #2025/6/13#
DateValue("令和7年6月13日") ' = #2025/6/13#
DateValue("6/13") ' = #2025/6/13#
DateValue("6/13/2025 14:30") ' = #2025/6/13 14:30:00#
DateValue("1000/1/1") ' = #1000/01/01#
DateValue("2025/12/32") ' 「型が一致しません」エラー

' シリアル値には実行不可
DateValue(45000) ' 「型が一致しません」エラー
DateValue(45000.5) ' 「型が一致しません」エラー

解説

DateValue関数は日付と判定できる文字列を日付型(Date型)に変換する関数です。

シート関数の「DATEVALUE関数」とほぼ同じ仕様の関数で、
シート関数同様、シリアル値を日付型にすることはできません。

シリアル値を日付型に変換する場合はCDate関数を使用してください。

シート関数と異なる点は、負の値(1900/1/1以前の日付)を扱える点です。

これ以前の日付はワークシートでは扱えませんので、
シート上は文字列などにしておき、VBAで処理をすることになります。


DateValue関数は一見便利そうな関数なのですが、
実はVBAではこの関数を使用しなくても以下のコードで同じことができます。

Dim 日付 As Date

日付 = "2025/6/13" ' #2025/6/13#が代入されます。
日付 = "令和7年6月13日" ' #2025/6/13#が代入されます。
日付 = 45000 ' #2023/3/15#が代入されます。

ExcelVBAは暗黙の型変換を行ってくれる言語のため、
Date型の変数に代入しても自動でDateValueと同じ変換が実行されます。

加えて、暗黙の型変換はシリアル値⇒日付にも対応していますね。


日付を扱う際はしっかり変数に入れた方が読みやすいコードになるため、
この関数を使うよりは、Date型の変数を用意することを先に検討してください。


ただし、暗黙の型変換と結果が異なる点として、
DateValue関数は時刻を切り捨てします。

日時の文字列から年月日だけを取り出したいときは、
DateValue関数を使用してください。