更新日:、 作成日:
VBA IsDate 関数:日付や時間に変換できるか判定する
はじめに
Excel VBA マクロの IsDate 関数から日付や時間に変換できるか判定する方法を紹介します。
IsDate 関数は、指定した値が日付または時間かどうかを判定します。
文字列の "2013/1/2" や "1:2:3" など、日付や時間に変換できる値なら True を返します。
文字列を「CDate 関数」で変換できるか判定したいときに使用します。
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 ~ 49 は 2000 ~ 2049 年 、50 ~ 99 は 1950 ~ 1999 年 に変換されるため True を返します。Windows のバージョンによって変わります。
True を返すときだけ「CDate 関数」で変換すると、エラーの発生を防げます。
使用例
IsDate 関数の使用例を紹介します。
日付や時間に変換できるか判定する
日付や時間に変換できるか判定します。
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)
スポンサーリンク