今回はIsDate関数の使い方と日付に変換する方法をご説明します。
IsDate関数は指定した値が日付に変換できるか判定する関数です。
日付を扱う処理や、日付に変換する際に日付として扱えない文字列を操作した場合のエラー回避などに使用します。
日付の指定や操作方法は「IsDate」「DateValue」「DateSerial」「DateAdd」「DateDiff」と色々ありますが、今回はこの「IsDate関数」を使用した方法になります。
その他、日付の指定方法などは下記記事をご覧ください。
- DateSerial関数の使い方と月初、月末の指定
- DateValue関数、TimeValue関数の使い方と日付、時刻の変換方法
- DateAdd関数の使い方と何日(時間)後を取得する方法
- DateDiff関数の使い方と2つの日付の日数をループする
1.IsDate関数の使い方
IsDate(値)と記述します。
指定した値が日付に変換可能な場合は「True」を返し、日付に変換できない場合は「False」を返します。
日付に変換可能(Trueを返す)な範囲は西暦の「100/1/1」~「9999/12/31」となります。
ただし、日付に変換するための「CDate関数」と併用する場合に、IsDate関数でFalseを返してもCDate関数では日付に変換出来るケースもありますのでご注意ください。
2.IsDate関数のサンプルコード
「IsDate関数」の使用例とCDate関数を使った変換のサンプルコードです。
Sub Sample1()
Dim Flag As Boolean
Dim Mydate As Date
'True
Flag = IsDate("2019/1/1")
Debug.Print Flag
Flag = IsDate("2019年1月1日")
Debug.Print Flag
Flag = IsDate("1:2:3")
Debug.Print (Flag)
Flag = IsDate("19/1/1")
Debug.Print (Flag)
'False
Flag = IsDate("abcde")
Debug.Print Flag
Flag = IsDate("20190101")
Debug.Print Flag
'FalseでもCDateで変換ケース
Flag = IsDate("1")
Debug.Print (Flag)
Mydate = CDate("1")
Debug.Print Mydate
End Sub
3.IsDate関数で判定結果で分岐するサンプルコード
セルに入力されている文字をIsDate関数で判定して、日付の場合のみ取得するサンプルコードです。
A列のデータは全て文字列で入力されています。
Sub Sample2()
Dim i As Long
Dim MyDate As String
Dim Flag As Boolean
For i = 1 To 10
If IsDate(Cells(i, 1).Value) = True Then
Flag = IsDate(Cells(i, 1))
MyDate = MyDate & Cells(i, 1) & "は" & Flag & "で、" & CDate(Cells(i, 1)) & "に変換できます。" & vbCrLf
End If
Next i
MsgBox MyDate
End Sub
データの「2019/1/40」と「2019-1-40」、「20190101」がFalseで変換しませんでした。
また、「1月1日」と「1/1」は自動的に「2019」と年が付与されています。