【Excel VBA】日付を比較する方法応用編!営業日算出関数も!

【Excel VBA】日付を比較する方法応用編!営業日算出関数も!

VBAで日付の大小や一致を条件に処理を分けたいこと、ありませんか?

けど、そんな中で悩むことは、

・日付同士を比較してもうまく判定されない
・文字列と日付型が混在していてエラーになる
・日付が同じか、何日後かを条件にしたい
・営業日を算出したいがわからない

ですよね。

今回はそんなお悩みを解決する

・Date型での比較方法と基本的な演算子の使い方
・DateDiff関数を組み合わせた柔軟な条件判定
・営業日を算出する関数

についてまとめます!

使用するVBA構文と関数

まずは基本の比較方法についておさらいしましょう。

こちらに詳しく記載していますので、よろしければご参照ください。

【ExcelVBA】日付を比較する方法!文字列の日付も対応可!

日付型の比較に使える演算子

まずはかんたんに日付型の比較をしてみましょう。

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」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・Date型での比較方法と基本的な演算子の使い方
・DateDiff関数を組み合わせた柔軟な条件判定
・営業日を算出する関数

についてまとめました。

VBAで日付を正しく比較できれば、業務の自動化・通知のタイミング管理など、あらゆる場面で利用できますので、
ぜひ、用途に応じて演算子や関数を使いこなしてみてください!



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。







コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA ImageChange Image