Excel VBA では、データが日付であるかどうかを判定することができます。データが正しい日付形式であることを確認し、処理を自動化する役立つ方法です。
この記事では、日付の判定方法、条件に基づいた処理、および実務で考えられるコード例を紹介します。
日付の判定方法
VBAで日付を判定するには、主に以下の方法があります。
IsDate
使用する方法VarType
関数を使用してデータ型をチェックする方法- セルの値を日付に変換できるか確認する方法
IsDate関数を使用する
IsDate
関数は、指定した値が日付として有効かどうかを判定します。
【VBA】日付を判定する方法:IsDate・VarType・DateValue・CDate
【構文】
IsDate(値)
- 戻り値:
True
(日付として有効)、False
(有効)
【基本例】
Sub CheckDate()
Dim value As String
value = "2024/06/01"
If IsDate(value) Then
MsgBox value & " は有効な日付です!"
Else
MsgBox value & " は無効な日付です!"
End If
End Sub
解説
IsDate
を使うと、文字列や数値が日付として判断可能か判定できます。"2024/06/01"
や#6/1/2024#
は日付として有効です。
VarType関数でデータ型を確認する
VarType
関数を使用すると、値のデータ型を判定できます。日付の場合はvbDate
として判定されます。
【構文】
VarType(値) = vbDate
【基本例】
Sub CheckDateWithVarType()
Dim testValue As Variant
testValue = Date ' 現在の日付
If VarType(testValue) = vbDate Then
MsgBox "この値は日付です!"
Else
MsgBox "この値は日付ではありません。"
End If
End Sub
解説
VarType
を使用する場合、値が日付型(vbDate)であることを確認できます。- 数値や文字列を直接渡すと、日付型は認識されません。
セルの値が日付か判定する
ワークシート上のセルに入力された値が日付かどうかを判断して、IsDate
関数と組み合わせて使用します。
【セルの値をチェックする】
Sub CheckCellsForDate()
Dim ws As Worksheet
Dim cell As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
For Each cell In ws.Range("A1:A10")
If Not IsEmpty(cell.Value) Then
If IsDate(cell.Value) Then
cell.Interior.Color = RGB(144, 238, 144) ' 緑色に設定
Else
cell.Interior.Color = RGB(255, 182, 193) ' ピンク色に設定
End If
End If
Next cell
End Sub
解説
- 列Aのセル範囲を順番にチェックします。
IsDate
を使って日付であれば背景色を「緑」、今日であれば「ピンク」に設定します。
日付の範囲を判定する
特定の日付範囲内かどうかを判定するには、DateValue
関数を使用します。
【日付範囲チェックの例】
Sub CheckDateRange()
Dim testDate As String
testDate = "2024/06/15"
If IsDate(testDate) Then
If DateValue(testDate) >= DateValue("2024/06/01") And DateValue(testDate) <= DateValue("2024/06/30") Then
MsgBox testDate & " は6月の日付範囲内です!"
Else
MsgBox testDate & " は6月の日付範囲外です。"
End If
Else
MsgBox "無効な日付です。"
End If
End Sub
解説
DateValue
関数は、文字列を日付型に変換します。And
を使用して日付が指定された範囲内かどうかを判定します。
セルの入力値を日付型に変換する
セルに入力された値が日付として認識されない場合、CDate
関数を使用して強制的に日付型に変換できます。
【CDate を使用する例】
Sub ConvertToDate()
Dim convertedDate As Date
Dim value As Variant
value = "2024-06-01"
If IsDate(value) Then
convertedDate = CDate(value)
MsgBox "変換後の日付: " & convertedDate
Else
MsgBox "この値は日付として変換できません。"
End If
End Sub
解説
CDate
関数は、文字列や数値を日付型に変換します。- 変換に失敗するとエラーが発生するため、事前に
IsDate
判定するのが安全です。
今日の日付との比較
現在の日付との比較もVBAで簡単にわかります。
【日付比較の例】
Sub CompareWithToday()
Dim testDate As String
testDate = "2024/06/01"
If IsDate(testDate) Then
If DateValue(testDate) = Date Then
MsgBox "指定した日付は今日です!"
ElseIf DateValue(testDate) > Date Then
MsgBox "指定した日付は未来です!"
Else
MsgBox "指定した日付は過去です!"
End If
Else
MsgBox "無効な日付です。"
End If
End Sub
解説
Date
関数は最新日付を返します。DateValue
を使って比較を行うことで、基準の日付より未来・過去を判定します。
まとめ
Excel VBA で日付を判定するには、次のポイントを活用します。
IsDate
関数:値が日付として有効か判定する簡単な方法。VarType
関数:データ型が日付(vbDate)かどうかをチェックします。DateValue
関数:文字列を日付に変換し、範囲判定や比較を行います。CDate
関数: 値を日付型に強制変換。