*当ブログではアフェリエイト広告を利用しています。

VBA

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

momeq
モー
モー

今回のテーマは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 [テックアカデミー]

モー
モー

独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。

TechAcademyのおすすめポイント
  • オンラインで選抜された現役エンジニアから学ぶことができる
  • 自宅からWeb制作・プログラミング・アプリ開発など幅広い分野を学べる
  • 学ぶだけではなく、転職の支援、副業に活かせるスキルの習得、副業の仕事紹介まで行っている
ニャー
ニャー

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

\無料体験、無料相談はこちらから/



記事URLをコピーしました