更新日:、 作成日:

VBA 日付を比較する

はじめに

Excel VBA マクロの日付 (Date) を操作する方法を紹介します。

等しい =、等しくない <> や、以上 >=、以下 <= など、比較演算子を使用して日付を比較できます。

(開始日時 <= 対象日時) And (対象日時 <= 終了日時) のようにして、指定した日時が期間内か判定できます。

DateValue 関数」から、日時の日付だけを取得できます。

TimeValue 関数」から、日時の時刻だけを取得できます。

日付を比較する

比較演算子を使用して日付を比較できます。

= を入力して、日付が等しいか判定できます。

演算子 演算名 使用例 結果
=等しい1 = 2False
<>等しくない1 <> 2True
>大きい1 > 2False
<小さい1 < 2True
>=以上1 >= 2False
<=以下1 <= 2True
Dim b As Boolean
b = (CDate("2013/1/1") = CDate("2013/1/2"))
Debug.Print(b) ' False

b = (CDate("2013/1/1") <> CDate("2013/1/2"))
Debug.Print(b) ' True

b = (CDate("2013/1/1") >= CDate("2013/1/2"))
Debug.Print(b) ' False

b = (CDate("2013/1/1") <= CDate("2013/1/2"))
Debug.Print(b) ' True
比較演算子について詳しくは「演算子」をご覧ください。

期間内

論理演算子を使用して 2 つの日付の期間内か比較できます。

(開始日時 <= 対象日時) And (対象日時 <= 終了日時) のように入力して、指定した日時が期間内か判定できます。

Dim 対象日時 As Date
対象日時 = Now ' 調べたい日時

Dim 開始日時 As Date
開始日時 = "2013/1/1"

Dim 終了日時 As Date
終了日時 = "2013/1/31 23:59:59"

' 範囲内かチェックする
If (開始日時 <= 対象日時) And (対象日時 <= 終了日時) Then
    Debug.Print("範囲内")
End If

DateValue 関数」を使用して、日時から日付を取得できます。

同じようにして、指定した日付が期間内か判定できます

Dim 対象日 As Date
対象日 = DateValue(Now) ' 調べたい日付

Dim 開始日 As Date
開始日 = DateValue("2013/1/1")           ' 2013/1/1

Dim 終了日 As Date
終了日 = DateValue("2013/1/31 23:59:59") ' 2013/1/31

' 範囲内かチェックする
If (開始日 <= 対象日) And (対象日 <= 終了日) Then
    Debug.Print("範囲内")
End If

TimeValue 関数」を使用して、日時から時刻を取得できます。

同じようにして、指定した時刻が期間内か判定できます

Dim 対象時刻 As Date
対象時刻 = TimeValue(Now) ' 調べたい時刻

Dim 開始時刻 As Date
開始時刻 = TimeValue("2013/1/1")           ' 0:00:00

Dim 終了時刻 As Date
終了時刻 = TimeValue("2013/1/31 23:59:59") ' 23:59:59

' 範囲内かチェックする
If (開始時刻 <= 対象時刻) And (対象時刻 <= 終了時刻) Then
    Debug.Print("範囲内")
End If
論理演算子について詳しくは「演算子」をご覧ください。

1 日や月末

Excel の「日付を自動で入力する」の方法で、1 日や月末など好きな日付を取得できます。

Excel の関数を使用するには「WorksheetFunction」をご覧ください。
Dim 対象 As Date
対象 = "2013/1/15"

Dim d As Date

' 1 日
d = DateSerial(Year(対象), Month(対象), 1)
Debug.Print(d) ' 2013/01/01

' 月末
d = WorksheetFunction.EoMonth(対象, 0)
Debug.Print(d) ' 2013/01/31

著者:Tipsfound