IsDate関数はあいまいな日付も正常にしてしまう

VBAの日付形式の文字列が正しい日付であるのかをチェックする関数にIsDate関数があります。

ただし、日付としてあいまいなものを正常とみなす点や時刻も正常とみなす点があるため利用する際に注意が必要です。

あいまいな点を無くしてチェックする関数については後述しています。


IsDate関数は想定外の動作の検証コード

以下のソースは複数の日付形式文字列をIsDate関数で実行した結果です。

実行結果

実行結果は5~15行目の各日付の右のコメントに書いた通りですが、これが正常になるの?と思うようなものがあります。

桁不足、桁超過、日不足、年不足、などでも正常となる場合があります。

そのため、その時々における条件で日付文字列をチェックしたい場合にはIsDate関数では正しくチェックできない恐れがあります。


8桁数字やyyyy/mm/dd形式用の日付チェック関数

IsDate関数をそのまま使うと問題がある場合は、個別の条件のみ正常とするチェック処理を別途作成する必要があります。

以下のソースは8桁数字の 20170831 や、スラッシュ区切りの 2017/08/31 に対しては正常と判定する関数です。

上記の IsDateTest関数の ar(0)の”2017/08/31″ のみが正常となり、他は全て不正として判定されます。



使い方

使い方はIsDate関数と同じです。

引数sの型を未指定にしていますが、気になる方はString型を設定してください。

上記のテストコードを実行すると、1番目のみ正常となり、2番目以降は不正と判定します。

実行結果