CDate関数とは

CDate関数は、VBAで文字列や数値を日付型(Date型)に変換するための組み込み関数です。

VBAでプログラミングしていると、文字列として扱っている日付や、数値として渡される時刻を「日付型(Date型)」として利用したい場面が多くあります。

たとえば、ユーザーが入力した “2025/10/05” という文字列を日付として計算したり、データベースから取得した数値を日付に変換して処理するケースです。

このようなときに必要になるのがCDate関数です。以下に詳しく説明します。

構文

Function CDate(expression)

戻り値 Date型(日付型)のデータを返します。
Expression 日付や時刻に解釈可能な文字列または数値を指定します。

一般的には日付を表す“yyyy/mm/dd”形式や、日時を表す“yyyy/mm/dd hh:mm:ss”形式の文字列がよく使われます。

基本的な使い方

1. 日付文字列をCDate関数で日付に変換

日付文字列には”yyyy/mm/dd”(スラッシュ区切り)、”yyyy-mm-dd”(ハイフン区切り)、”mm/dd/yyyy”(海外表記)などの形式がありますが、これらの書式の文字列をDate型に変換します。

実行結果
2024/12/25
2024/12/25
2024/12/25

日本語環境では “2025/10/05” や “2025-10-05” のようなスラッシュ区切りやハイフン区切り形式を正しく日付として解釈します。

2. 日付+時刻文字列をCDate関数で日時に変換

“yyyy/mm/dd hh:mm:ss”での日時もCDate関数でDate型に変換できます。

実行結果
2024/12/25 14:30:00
14:30:00

時刻だけを渡すと、その日のシステム日付に時刻が付与されます。

3. 数値を日付に変換

Excel内部では、日付を「シリアル値」という数値で管理しています。

1900年1月1日を「1」とし、以降1日ごとに1ずつ加算される仕組みです。その数字もCDate関数でDate型に変換できます。

実行結果
2023/10/01

数値を渡すと、Excelの日付シリアル値として解釈されます。

CDateの注意点

1. 環境依存(日付書式の違い)

CDateはOSのロケール設定に依存します。

日本の環境では “2025/10/05″ を「2025年10月5日」と解釈します。また、”10/05/2025” は「月/日/年」形式と認識されることがあります。

CDate関数はこのような書式の違いを考慮してはくれますが、変換誤りを防ぐために、文字列の日付を扱う場合は国際的に曖昧さの少ない形式(yyyy/mm/dd) を使うことをおすすめします。

2. 数値変換の落とし穴

数値を渡すとシリアル値として変換されますが、「ユーザーが入力した数値」が必ずしも日付シリアル値を意味するとは限りません。

たとえば「20251005」をCDateに渡すと、想定外の結果になります。

3. エラー13:型が一致しません

エラー13は、CDate関数が日付として認識できない値を変換しようとしたときに発生します。

以下の関数は”これは日付ではありません”という文字列をCDate関数で変換しようとして変換できないためエラーになりMsgBoxを表示します。

安全に使う方法

IsDate関数と組み合わせる

文字列や数値をCDateで変換する前に、IsDate関数で判定しておくと安全です。仕事で扱うなどの厳密なコードであればIsDate関数との組み合わせは必須と言ってもいいほどです。

以下の関数は入力ダイアログを表示し、yyyy/mm/dd形式で入力してOKを押すと、IsDate関数で日付として問題ないか確認を行い、問題が無ければCDate関数で変換を行います。

これにより、予期せぬエラーを防止できます。

CDateを使った活用例

1. 日付の計算

CDateで文字列を日付に変換すれば、加算・減算が可能です。

実行結果
2025/10/12
2025/10/04

2. 時刻の計算

CDateで時刻に変換後に、TimeSerial関数で時刻を加算します。

実行結果
14:30:00

3. 日付範囲の検証

以下は、第一引数で渡された日付文字列が、第二引数、第三引数の日付文字列範囲に含まれているかを判定する関数です。

実行結果
True

まとめ

CDate関数は文字列を日付型に変換できる有用な関数ですが、以下の点に注意して使用しましょう。

  • エラー処理を必ず実装する:無効な日付文字列でエラーが発生するため
  • IsDate関数で事前チェック:変換可能かを確認してから使用
  • 日付形式の統一:yyyy-mm-dd形式が地域設定に依存せず安全

以下のようにIsDate関数とCDate関数を組み合わせるコードが推奨されます。

この形はどの場面でも利用できますので、ご活用ください。