VBA IsDate 関数:日付や時間に変換できるか判定する

はじめに

Excel VBA マクロの IsDate 関数から日付や時間に変換できるか判定する方法を紹介します。

IsDate 関数は、指定した値が日付または時間かどうかを判定します。

文字列の "2013/1/2""1:2:3" など、日付や時間に変換できる値なら True を返します。

文字列を「CDate 関数」で変換できるか判定したいときに使用します。

文字列を日付に変換するには「文字列を変換する」をご覧ください。
  • 目次
    • IsDate 関数
    • 解説
    • 使用例

IsDate 関数

IsDate()
を日付型 (Date) に変換できるときは True を返します。それ以外のときは False を返します。

引数「式」判定したい値を指定します。
戻り値の型ブール型 (Boolean)

解説

引数「値」に「CDate 関数」などで日付や時間に変換できる値を指定すると True を返します。変換できないときは False を返します。

引数「値」に日付形式の文字列 "2000/1/1" などを指定すると True を返します。

引数「値」に数値を指定すると False を返します。しかし「CDate 関数」は数値を日付に変換できます。

引数「値」に Boolean 型を指定すると、True は 1 に、False は 0 に変換できるため True を返します。

変換できるのは日付型の範囲 西暦100年1月1日 ~ 西暦9999年12月31日 の間です。

年が 2 桁なら 0 ~ 492000 ~ 2049 年50 ~ 991950 ~ 1999 年 に変換されるため True を返します。Windows のバージョンによって変わります。

True を返すときだけ「CDate 関数」で変換すると、エラーの発生を防げます。

使用例

日付や時間に変換できるか判定する。

Dim b As Boolean

b = IsDate("2013/1/2")
Debug.Print(b) ' True

b = IsDate("2013年1月2日")
Debug.Print(b) ' True

b = IsDate("20130102")
Debug.Print(b) ' False

b = IsDate("1:2:3")
Debug.Print(b) ' True

b = IsDate("2013/1/2 1:2:3")
Debug.Print(b) ' True

b = IsDate("50/1/2")
Debug.Print(b) ' True ' 1950/1/2 に変換されるため

b = IsDate("Tips")
Debug.Print(b) ' False

b = IsDate("2013/1/2")
Debug.Print(b) ' True、全角は変換できる

b = IsDate("24:00:00")
Debug.Print(b) ' False、24 時間を超える時刻は変換できない

b = IsDate("一月三十一日")
Debug.Print(b) ' False、漢数字は変換できない

数値や Boolean 型は変換できる。

Dim b As Boolean
b = IsDate(0)
Debug.Print(b) ' False

b = IsDate(1)
Debug.Print(b) ' False

b = IsDate(True)
Debug.Print(b) ' False

b = IsDate(False)
Debug.Print(b) ' False

Dim d As Date
d = CDate(1)
Debug.Print(d) ' 1899/12/31

変換できるか判定

IsDate 関数」を使用して、変換できるか判定できます。

Dim s As String
s = "一月三十一日"

Dim d As Date

If IsDate(s) = True Then ' 変換できるときだけ日付にする
    d = CDate(s)
Else
    d = 0 ' 日付の初期値
End If

Debug.Print(d)