VBAのIsDateが「True」になる「妥当な日付文字列」とは?

VBA
スポンサーリンク/Sponsored Link

VBAの「IsDate」関数で、文字列が日付として妥当か?というチェックをするのですが、

どんな文字列が妥当なのか、という情報が少なかったのでメモです。

スラッシュ区切り、ハイフン区切り、ピリオド区切りなど、下で試していますのでご参考になれば幸いです。

スポンサーリンク/Sponsored Link

実際に動作させてチェック

チェック用のコードはこちら。

Sub test()
Dim dt(9) As String, dtn As Variant, i As Long
dt(0) = "2019/01/27"
dt(1) = "2019年1月27日"
dt(2) = "2019-1-27"
dt(3) = "2019-01-27"
dt(4) = "January 27,2019"
dt(5) = "JANUARY 27 2019"
dt(6) = "平成31年1月27日"
dt(7) = "平成31年1/27"
dt(8) = "2019.1.27"
dt(9) = "20190127"
dtn = 20190127
For i = 0 To 9
    Cells(i + 2, 1).NumberFormatLocal = "@"
    Cells(i + 2, 1) = dt(i)
    Cells(i + 2, 2) = IsDate(dt(i))
    If IsDate(dt(i)) = True Then
        Cells(i + 2, 3) = CDate(dt(i))
    Else
        Cells(i + 2, 3) = "変換できません"
    End If
Next

Cells(i + 2, 1) = "Formatで変換"
Cells(i + 2, 2) = IsDate(Format(dtn, "####/##/##"))
'Cells(i+2, 2) = CDate(dtn)  オーバーフロー
Cells(i + 2, 3) = CDate(Format(dtn, "####/##/##"))
End Sub

実行結果

各日付表記ごとに、IsDate、CDateの実行結果がセルに入っています。詳しくは記事の続きに解説しています。

解説

2019/01/27(スラッシュ区切り)→OK

典型的な日付文字列ですね。

2019年1月27日(日本語表記)→OK

日付文字列として妥当だということです。日本語版以外で動作するのかは不明です(たぶんだめ)

2019-1-27(ハイフン区切り)→OK

非常に違和感があるのですが、ハイフン区切りでも日付文字列として大丈夫な模様。

January 27,2019(英語表記)→OK

おそらくこの英語表記は、どの言語版のExcel VBAでも大丈夫でしょう。

平成31年1月27日(元号表記)→OK

元号表記も日付文字列として許容されますが、平成31年1/27のようにミックスするとダメな模様。

2019.1.27(ピリオド区切り)→ダメ!

ハイフンが良いならピリオドでもいいじゃないか! とExcelに愚痴をこぼしたことがある方は多いはず。ピリオド区切りは日付じゃないということなので、発見したらReplace関数でスラッシュに置き換えてあげるしかないですね。

20190127(連続表記)→ダメ!

同じく、ダメな理由などないのでしょうが、8ケタの連続表記も日付ではないそうです。なので、サンプルコードにあるように、Format関数でスラッシュを入れてあげると大丈夫。
(Format関数の引数は “yyyy/mm/dd”ではなく”####/##/##”なのでご注意)
こちらのコードは、下記のサイトを参考にさせていただきました。

[ VBA ] 有効な日付か妥当性を検証する ( IsDate 関数 ) | 行け!偏差値40プログラマー

スポンサーリンク/Sponsored Link

終わりに

「ハイフンはいいけど、ピリオドとか連続8ケタ表記はだめなんですよ」と、どこかにはっきり書いてあるかと思ったら、どこにも書いてないので驚きました。

これは常識の範囲だということなのでしょうか!?!?

VBAのレッスンをするために細部を点検していて、この点気が付いて掘り下げていたのですが、教室では到底これを「常識」「エクセル使ってれば分かるよね?」とは言えない、と思いました。当教室ではちゃんとテキストに差し込みで紙を一枚入れて教えることにします。

パソコン教室・キュリオステーション志木店からのお知らせ
レッスンはオンラインで受講できます

パソコン教室・キュリオステーション志木店では、本年よりオンラインでの在宅レッスンを実施しております。
教室の全コースがオンラインで受講可能。実際にインストラクターがご対応いたします。
1時間の無料体験レッスンはいつでも予約できます。詳しくは公式ページをご覧ください。

スポンサーリンク/Sponsored Link
キュリオステーション志木店運営をフォローする

コメント

タイトルとURLをコピーしました