VBAで自動化 VBA一覧 日付・時刻 配列・データ操作

【VBA】日付を判定する方法:IsDate・VarType・DateValue・CDate

Excel VBA では、データが日付であるかどうかを判定することができます。データが正しい日付形式であることを確認し、処理を自動化する役立つ方法です。

この記事では、日付の判定方法条件に基づいた処理、および実務で考えられるコード例を紹介します。

日付の判定方法

VBAで日付を判定するには、主に以下の方法があります。

  1. IsDate使用する方法
  2. VarType関数を使用してデータ型をチェックする方法
  3. セルの値を日付に変換できるか確認する方法

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 で日付を判定するには、次のポイントを活用します。

  1. IsDate関数:値が日付として有効か判定する簡単な方法。
  2. VarType関数:データ型が日付(vbDate)かどうかをチェックします。
  3. DateValue関数:文字列を日付に変換し、範囲判定や比較を行います。
  4. CDate関数: 値を日付型に強制変換。

-VBAで自動化, VBA一覧, 日付・時刻, 配列・データ操作