文字列から日付(Date型)への変換

このページでは日付形式の文字列から日付(Date型)への変換について紹介しています。

日付形式の文字列にはyyyy/mm/dd形式やyyyymmdd形式など表現方法がいくつかありますが、そのままDate型に変換できるものとそうでないものがあります。

それらについて以下に整理します。

なお、それとは逆の、日付から文字列への変換は「VBAで日付(Date型)から文字列に変換する」をご参照ください。


yyyy/mm/dd形式はそのままCDate関数で変換する

スラッシュ区切りの年月日の文字列はそのままCDate関数でDate型に変換できます。



yyyymmdd形式はyyyy/mm/ddにしてからCDate関数で変換する

8文字の数字で日付としてみなされる形になっている場合は、そのままではDate型には変換できません。

そのため、文字列の年・月・日の各部分を分けてスラッシュ等で区切り、yyyy/mm/dd形式の文字列にした上でCDate関数で変換する必要があります。

以下の例ではFormat関数でスラッシュ区切りに変換してCDate関数で変換する方法と、Mid関数で年・月・日のそれぞれを切り出してスラッシュ文字を連結してCDate関数で変換する方法の2つ挙げています。

Format関数の####/##/##の#は数字1文字を表します。

Format関数とMid関数のどちらの書き方でも構いません。



IsDate関数の拡張関数

Date型に変換できるかどうかを判定するためのIsDate関数があります。

yyyy/mm/dd形式は変換できるとみなされますが、yyyymmddは変換できないと判定されます。

しかも、”0002017/08/31″という文字列の場合は変換できるとみなされ、「えー!?」と思わされる挙動をします。

個人的にはちょっと不便だと感じます。

これらを解消した関数を「8桁日付やスラッシュ編集日付用のIsDate関数」にて紹介しています。