VBAで日付の大小や一致を条件に処理を分けたいこと、ありませんか?
けど、そんな中で悩むことは、
・文字列と日付型が混在していてエラーになる
・日付が同じか、何日後かを条件にしたい
・営業日を算出したいがわからない
ですよね。
今回はそんなお悩みを解決する
・DateDiff関数を組み合わせた柔軟な条件判定
・営業日を算出する関数
についてまとめます!
もくじ
使用するVBA構文と関数
まずは基本の比較方法についておさらいしましょう。
こちらに詳しく記載していますので、よろしければご参照ください。
日付型の比較に使える演算子
まずはかんたんに日付型の比較をしてみましょう。
If 日付1 = 日付2 Then
' 等しい場合の処理
End If
If 日付1 > 日付2 Then
' 日付1が日付2より後の場合
End If
If 日付1 < 日付2 Then
' 日付1が日付2より前の場合
End If

具体例を見てみましょう。
等しいかどうかを比較する(=)
Dim dt1 As Date
Dim dt2 As Date
dt1 = #5/7/2025# ' yyyy/mm/dd形式も可
dt2 = Date ' 今日の日付
If dt1 = dt2 Then
MsgBox "日付が一致しています"
Else
MsgBox "日付が異なります"
End If
どちらが未来か過去かを比較する(<, >)
Dim dueDate As Date
dueDate = #5/10/2025#
If dueDate > Date Then
MsgBox "まだ締切前です"
Else
MsgBox "締切を過ぎています"
End If
2. DateDiff関数で差を比較
次はDateDiff関数を使用し、差を比較してみます。
DateDiffは「日数」「月数」「年数」などを簡単に取得できる便利な関数です。
日数単位(”d”)で比較することで、「○日経過」「○日以内」などの条件に使えます。

構文となります。
DateDiff("間隔単位", 日付1, 日付2)
間隔単位
間隔単位 | 意味 |
“d” | 日数 |
“m” | 月数 |
“yyyy” | 年数 |
“ww” | 週数 |
具体例を見てみましょう。
2つの日付の差が7日以上か判定
If DateDiff("d", Date1, Date2) >= 7 Then
MsgBox "1週間以上の差があります"
End If
イベント日が今日から何日前かを判定
Dim eventDate As Date
eventDate = #4/30/2025#
If DateDiff("d", eventDate, Date) > 0 Then
MsgBox "イベントは " & DateDiff("d", eventDate, Date) & " 日前に終了しました"
Else
MsgBox "イベントはこれからです"
End If
6か月以上前のデータを抽出
Dim lastUpdate As Date
lastUpdate = #10/1/2024#
If DateDiff("m", lastUpdate, Date) >= 6 Then
MsgBox "このデータは6か月以上前です"
End If
年齢の計算
年齢の計算してみましょう。
Dim birthDate As Date
Dim age As Integer
birthDate = #1990/5/1#
age = DateDiff("yyyy", birthDate, Date)
' 誕生日がまだ来ていない年は1歳減らす
If Date < DateSerial(Year(Date), Month(birthDate), Day(birthDate)) Then
age = age - 1
End If
MsgBox "現在の年齢は " & age & " 歳です"
トラブルシュート
文字列→日付型の変換(CDate)
よくある元ソースが文字列で、日付として認識できない場合がありますよね。
その場合は文字列を日付型に変換してから、比較するようにしましょう。
Dim dt As Date
dt = CDate("2025/05/07")
応用編:営業日を加算する関数をつくってみる
応用編として、営業日を加算する関数をつくり、5営業日後など判定したいと思います。
仕様としては、土日をスキップし月〜金のみをカウントします。

VBA
VBAは以下の通りです。
Function AddBusinessDays(startDate As Date, businessDays As Long) As Date
Dim count As Long
Dim tempDate As Date
tempDate = startDate
count = 0
Do While count < businessDays
tempDate = tempDate + 1
' 土日を除く
If Weekday(tempDate, vbMonday) <= 5 Then
count = count + 1
End If
Loop
AddBusinessDays = tempDate
End Function
今日から5営業日後を表示させるには以下のように使用します。
Sub ShowBusinessDate()
Dim resultDate As Date
resultDate = AddBusinessDays(Date, 5)
MsgBox "5営業日後は " & Format(resultDate, "yyyy/mm/dd")
End Sub
説明
Function AddBusinessDays(startDate As Date, businessDays As Long) As Date
は、startDateからbusinessDays日分の営業日を加算し、最終日の日付を返す関数です。
tempDate = startDate
開始日から計算を始めるために、tempDateをstartDateで初期化します。
count = 0
営業日加算のカウンターを0にします。
Do While count < businessDays
必要な営業日数に達するまでループを続けます。
tempDate = tempDate + 1
日付を1日進めます。
If Weekday(tempDate, vbMonday) <= 5 Then
Weekday関数で曜日を取得し、月~金(1~5)なら営業日としてカウントします。
vbMondayで週の始まりを月曜(1)に指定しています。
count = count + 1
営業日だった場合にカウンターを1増やします。
AddBusinessDays = tempDate
最終的に到達した営業日を関数の返り値として返します。
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・DateDiff関数を組み合わせた柔軟な条件判定
・営業日を算出する関数
についてまとめました。
VBAで日付を正しく比較できれば、業務の自動化・通知のタイミング管理など、あらゆる場面で利用できますので、
ぜひ、用途に応じて演算子や関数を使いこなしてみてください!
コメントを残す