VBAで日付を比較して、何日間の差があるか、何日間空いているかをチェックするにはDateDiff関数を利用します。
(構文)
DateDiff ( interval, date1, date2 [, firstdayofweek] [, firstweekofyear] )
https://support.microsoft.com/ja-jp/office/datediff-%E9%96%A2%E6%95%B0-e6dd7ee6-3d01-4531-905c-e24fc238f85f
intervalには差を計算する基準を指定します。
例えば日数の差が知りたい場合は”d”を、年数の差が知りたい場合は”yyyy”を指定します。
date1には開始日、date2には終了日を指定してそれぞれの差を返却します。
以下のコードの場合10が返却されます。
DateDiff("d","2021/12/1","2021/12/11")
10
date2の方が過去の日付の場合はマイナス値が返却されます。
DateDiff("d","2021/12/11","2021/12/1")
-10
何ヶ月の差があるかをチェックするにはintervalに”m”を指定します。
下記の場合1日の差しかありませんが、月が替わっているので1が返却されます。
DateDiff("m","2021/11/30","2021/12/1")
1
その他、intervalに設定できる値は下記のとおりです。
設定値 | 説明 |
yyyy | 年 |
q | 四半期 |
m | 月 |
y | 年間通算日 |
d | 日 |
w | 平日 |
ww | 週 |
h | 時 |
n | 分 |
s | 秒 |
尚、date1とdate2に存在しない日付を指定したは場合エラーとなるため、IsDate関数で予め日付として正しいかチェックをしてから利用するようにします。
Dim strFrom As String: strFrom = "2021/12/01"
Dim strTo As String: strTo = "2021/12/11"
Dim lngDiff As Long
'日付形式かチェック
If IsDate(strFrom) And IsDate(strTo) And strFrom <= strTo Then
'日付の差を取得
lngDiff = DateDiff("d", strFrom, strTo)
MsgBox lngDiff & "日間の差があります。"
Else
MsgBox "日付指定が不正です。"
End If