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

このページでは日付形式の文字列から日付(Date型)への変換する方法を解説します。

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

この記事では、主に次のような変換方法について紹介します。

  • yyyy/mm/dd 形式の文字列を直接CDate関数で変換する方法
  • yyyymmdd形式の文字列を加工してから変換する方法
  • 変換可否を判定するIsDate関数の注意点と補完方法

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

【パターン1】スラッシュ付きのyyyy/mm/dd形式はそのままCDate関数で変換する

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

 

【パターン2】yyyymmdd形式はyyyy/mm/ddに加工してからCDate関数で変換する

「20180329」のように8文字の数字で日付を表す文字列は、そのままではDate型には変換できません。そのため、文字列の年・月・日に分解して「yyyy/mm/dd」形式に変換してからCDate関数で変換する必要があります。

次の2通りの方法があります。

方法1:Format関数を使う

方法2:Mid関数で年・月・日を切り出す

どちらの方法でも同じ結果になります。どちらを使ってもOKです。

IsDate関数の拡張関数

VBAには、文字列が日付に変換可能かどうかを判定するIsDate関数があります。

たとえば「2018/03/29」は True を返しますが、「20180329」は False になります。また、「0002017/08/31」のような変な文字列でも True を返すことがあり、意図しない判定をする場合があります。

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

このような不便さを解消するために、独自の判定ロジックを備えた関数を「8桁日付やスラッシュ編集日付用のIsDate関数」にて紹介しています。併せてごらんください。