VBAで有効な日付か判定したい場合には IsDate 関数を使用することが簡単です。ここでは、日付の妥当性の検証を行うサンプルスクリプトを掲載しています。
スポンサーリンク
日付の妥当性を検証する
Private Sub CommandButton1_Click() Dim d As Date d = "2014/01/13" ' 正しい日付であるか確認 If IsDate(d) Then MsgBox "正しい日付です" End If End Sub
連続した数値も日付として扱いたい場合(yyyymmdd 形式)
プログラムや入力の都合上、以下のように日付を数値の連続のみで表現している場合には日付型の文字列に変換したのち、判定を行う方法があります。
Private Sub CommandButton1_Click() Dim d As Variant d = "20140113" ' 8桁の数値であるか確認する If IsNumeric(d) And Len(d) = 8 Then ' 日付を表す文字列に変換してからIsDate関数で判定する If IsDate(Format(CStr(d), "####/##/##")) = True Then MsgBox "正しい日付です" End If End If End Sub
同じコーディングを行うことについて
大なり小なり車輪の再発明と言うものは存在します。馬鹿げていると言うことは理解できますが、難しい問題だと思います。VBA に限った話ではありませんが、日付の妥当性検証やファイルの入出力などのような良く行う処理については全社的にライブラリなどを作成して使用したほうが良いでしょう。ライブラリに関しては毎回毎回、単体テストを行う必要もありません。
しかし、大前提として綺麗に設計されたライブラリとして管理する人が必要です。汚いライブラリならないほうがマシです。
偉そうに言ってはみましたが、私の勤める会社ではライブラリは難しいと思います。私も力不足です。管理する自信はありません。最後に軽く愚痴って締めることとします。
プロジェクトで困ることアルアル
- 自社製のフレームワークを使用させられる
- 自社製のライブラリを使用させられる
- ただし、作ってるのは外注
- なので、自社の人は良くわからない
- さらにバグだらけ
- 出来上がったコードは超カオス
- なぜ、動かないのかわからない
- なぜ、動いているかもわからない