今回はCDate関数を使用して指定した値をの文字列を日付型に変換する方法をご説明します。
日付に変換する関数は色々ありますが、今回ご紹介するCDate関数は文字列をDate型に指定して日付に変換します。
日付の比較などで片方が日付、もう片方が文字列などで正常に比較できないケースが存在する場合に型を統一する際などに使用すると非常に便利です。
また、日付型に変換できるかどうか事前に判定する事で、エラーの回避ができます。
日付に変換できるかの判定は「IsDate関数」を使用します。
その他の日付へ変換する方法や日付を扱う方法は下記記事をご覧ください。
- DateSerial関数の使い方と月初、月末の指定
- DateValue関数、TimeValue関数の使い方と日付、時刻の変換方法
- DateAdd関数の使い方と何日(時間)後を取得する方法
- DateDiff関数の使い方と2つの日付の日数をループする
1.CDate関数の使い方
CDate関数は、指定した値を日付型に変換します。
次の様に記述します。
CDate(値)
「値」には日付に変換したい文字列や数値を指定します。
日付に変換できる範囲は西暦100年1月1日~西暦9999年12月31日の間となります。
日付に変換出来ない値を指定した場合エラーとなります。
エラーを回避するには予め「IsDate関数」を使用して判定します。
日付の変換をするために使用しますが「”1:20:30″」のように「:」で区切られた文字列は時刻として変換されます。
また、「年月日」で指定された日付も「yyyy/mm/dd」形式に変換可能です。
平成などの和暦でも同様に変換可能ですが、「S」などの省略表記は対応できません。
数値を指定した場合は、日付型の初期値となる「1899/12/30」にその数値の日を足した日付に変換されます。
2.サンプルコード
基本的なサンプルコード
Sub Sample1()
Debug.Print CDate("2018/10/1") '2018/10/01
Debug.Print CDate("2019年5月10日") '2019/05/10
Debug.Print CDate("平成31年5月10日") '2019/05/10
Debug.Print CDate("1:20:30") ' 1:20:30
Debug.Print CDate("2018/12/1 4:5:6") ' 2013/01/02 3:04:05
Debug.Print CDate(1) ' 1899/12/31
Debug.Print CDate(10) ' 1900/01/09
End Sub
IsDate関数で判定して変換するコード
「”2019/1/1″」を判定して日付に変換します。
Sub Sample2()
Dim MyDate As String
MyDate = "2019/1/1"
If IsDate(MyDate) = True Then
MsgBox CDate(MyDate)
Else
MsgBox "日付に変換できません。"
End If
次は意図的に「”2019/100/1″」と無効な日付の文字列を渡してみます。
「”2019/100/1″」はそのままCDateで変換しようとするとエラーとなるので注意してください。
Sub Sample4()
Dim MyDate As String
MyDate = "2019/100/1"
MsgBox CDate(MyDate)
End Sub
上記のようなエラーを回避するために日付に変換可能か判定してから変換する事でエラーを回避出来ます。
Sub Sample3()
Dim MyDate As String
MyDate = "2019/100/1"
If IsDate(MyDate) = True Then
MsgBox CDate(MyDate)
Else
MsgBox "日付に変換できません。"
End If
End Sub