Excel VBAの「CDate 関数」について解説します。
CDate 関数とは
Excel VBA の CDate 関数は、引数の文字列や数値を日付型 (Date) に変換します。
CDate 関数は、引数を特定のデータ型に強制的に変換するデータ型変換関数のひとつです。
では、CDate 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
CDate 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
CDate(expression)
引数
引数 | 説明 |
---|---|
expression | 【必須】任意の日付に変換できる値を 文字列(式)または数値(式)で指定します |
戻り値
戻り値 | 説明 |
---|---|
日付型の値 | 日付型 (Date) に変換できない引数を指定した場合、 実行時エラー ’13’「型が一致しません。」が発生します 数値は整数部が日付、小数部は時刻に変換されます |
解説(使用例)
サンプルコードを使って解説します。
CDate 関数の引数と戻り値を確認するサンプル
引数にいろいろな「文字列」や「数値」を設定し、日付型に変換した結果をイミディエイトに表示します。
Sub CDate_Sample()
Dim d As Variant
On Error GoTo ErrH
'▼文字列で指定する
d = "2024/8/1" '"yyyy/m/d" 又は #m/d/yyyy#
Debug.Print "CDate(""" & d & """): " & CDate(d)
d = "2024/8/1 12:30:40" '"yyyy/m/d h:ss:mm"
Debug.Print "CDate(""" & d & """): " & CDate(d)
d = "令和6年8月1日" '和暦指定
Debug.Print "CDate(""" & d & """): " & CDate(d)
d = "令和6年8月1日 12時30分40秒" '和暦時刻付き
Debug.Print "CDate(""" & d & """): " & CDate(d)
d = "8月1日" '月日のみ全角文字で指定
Debug.Print "CDate(""" & d & """): " & CDate(d)
d = "八月1日" '漢数字の場合は×
Debug.Print "CDate(""" & d & """): " & CDate(d)
'▼数値で指定する
d = 45505.5212962963 '"2024/8/1 12:30:40"の数値
Debug.Print "CDate(" & d & "): " & CDate(d)
d = 45505 '日付部分の数値
Debug.Print "CDate(" & d & "): " & CDate(d)
d = 0.5212962963 '時刻部分の数値
Debug.Print "CDate(" & d & "): " & CDate(d)
d = 455055212962963# '小数点が抜けている値×
Debug.Print "CDate(" & d & "): " & CDate(d)
Exit Sub
'エラーハンドラー
ErrH:
If VarType(d) = vbString Then
Debug.Print "CDate(""" & d & """): " & _
"エラー" & Err.Number & Err.Description
Else
Debug.Print "CDate(" & d & "): " & _
"エラー" & Err.Number & Err.Description
End If
Resume Next
End Sub
このコードを実行したイミディエイト画像がこちらです。
▼文字列で指定する
1番目(7~8行目)、日付の文字列「”2024/8/1″」は 日付型「2024/8/1」の変換されました。
2番目(10~11行目)、日時の文字列「”2024/8/1 12:30:40″」は「2024/8/1 12:30:40」に変換されました。
3番目(13~14行目)、和暦の文字列「”令和6年8月1日″」は 日付型「2024/8/1」に正しく変換されました。
4番目(16~17行目)、時刻付きの和暦文字列「”令和6年8月1日 12時30分40秒″」も「2024/8/1 12:30:40」に正しく変換されました。
5番目(19~20行目)、全角で月日だけの文字列「”8月1日”」は 日付型「2024/8/1」に変換されました。「年」を指定しない場合は、コードを実行した年になります。
6番目(22~23行目)、全角で月日だけの文字列「”8月1日”」は 日付型「2024/8/1」に変換されました。「年」を指定しない場合は、コードを実行した年になります。
7番目(19~20行目)、「”八月1日”」のように漢数字が含まれていた場合はエラー「13型が一致しません。」が発生しました。
▼数値で指定する
8番目(26~27行目)、Double型の数値「45505.5212962963」は「2024/8/1 12:30:40」に変換されました。
9番目(29~30行目)、整数部だけの「45505」を指定した場合「2024/8/1」日付に変換されました。
10番目(32~33行目)、小数部だけの「0.5212962963」は「12:30:40」時刻に変換されました。
11番目(35~36行目)、小数点を除いた「455055212962963」を指定した場合、エラー「13型が一致しません。」が発生しました。
以上のように、いろいろなケースがあると思いますので、引数を入れ替えて試してみてはいかがでしょうか。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA CDate 関数は、引数の文字列や数値を日付型 (Date) に変換するデータ型変換関数ひとつです。
CDate 関数で日付型に変換することで、日付フィルターやソート、日付の加算・減算、曜日の取得などが可能になります。シリアル値や文字列ではこれらを正確に行えない場合があります。
日付型と文字列日付が混在していた場合、フィルタやソートがうまくいかないケースが発生します。そんな場合には CDate 関数を利用して日付型に統一すれば解決できます。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;