【VBA】CDate関数を使ってDate型に変換する


今回のテーマはCDate関数です。CDateは文字列などをDate型に変換してくれる関数です。

Date型は日付を扱う際に必須とも言える関数だにゃ。きちんとその辺も理解しておくと、VBAの幅が広がるからぜひ覚えて欲しいんだにゃ。
CDate関数とは?

まずは、CDate関数の基本について見ておきましょう。
構文:CDate(引数)
戻り値:Date型
引数に文字列などDate型へ変換可能な値を入れると、Date型に変えてくれる関数です。
ちなみに、Date型に変換できない値を引数に渡すと、エラーになります。
そのため、IsDate関数を使用して、値がDate型に変換可能かを調べてから使うことが多いですね。
CDateの使い方

次に、実際のCDateの使い方です。とはいえ、使い方は、引数に値を渡すだけ。すると、Date型に変換して出力してくれます。
// CDateの使い方
d = "2021年12月31日12時35分45秒"
Debug.Print CDate(d)
>> 2021/12/31 12:35:45

CDateに何でも渡せば良いというわけではないにゃ。Date型にならない値を渡すと、エラーになるんだにゃ。ちゃんと、Date型に変換可能な値かを調べる必要があるんだにゃ。
// Date型にならない値を引数に渡した場合
d = "20211231"
Debug.Print CDate(d)
>> #実行時エラー

そのため、通常は、次のようにIsDate関数とIf関数を組み合わせて使うのが一般出来ですね。こうすれば、エラーの場合は別の分岐にすることができ、プログラムを異常終了させずに済みます。
// IsDate関数とIf関数を使って分岐させる
d = "20211231"
If IsDate(d) Then
Debug.Print CDate(d)
Else
Debug.Print "エラーです"
End If
>> エラーです
なぜDate型が必要なのか?

でも、Date型ってなんで必要なんだにゃ?見た目は、文字列と同じに見えるんだにゃ。文字列のままじゃだめなんかにゃ?

ただ、目で見るだけなら文字列でも良いですね。でも日付を扱う場合、次のようなことができるようにしたい場合もあると思います。
- ある日付から別の日付までの日数を知りたい
- 特定の日付の何日後がいつになるかを知りたい
- 日付自体の比較がしたい

こんな時、Date型ならば、四則演算や比較ができます。文字列ではこんなことはできず、エラーになってしまいますね。最初はイメージつきづらいかもしれませんが、このような時のため、プログラムではDate型を準備しています。
// 日付間の日数
d = "2021年12月31日12時35分45秒"
d2 = "2022年12月31日12時35分45秒"
Debug.Print CDate(d2) - CDate(d)
>> 365
// 3日後の日付を出力
Debug.Print CDate(d) + 3
>> 2022/01/03 12:35:45
日付同士の比較
Debug.Print CDate(d) < CDate(d2)
>> True
プログラミングを学ぶならTechAcademy(テックアカデミー)がおすすめ!

独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。
- オンラインで選抜された現役エンジニアから学ぶことができる
- 自宅からWeb制作・プログラミング・アプリ開発など幅広い分野を学べる
- 学ぶだけではなく、転職の支援、副業に活かせるスキルの習得、副業の仕事紹介まで行っている

無料体験や相談もあるから、一度試してみてもいいんだにゃ!
\無料体験、無料相談はこちらから/