【コピペで即解決】VBAのDate関数とIf文で、大量の期限チェックを瞬時に終わらせる方法

【業務効率化】VBA
スポンサーリンク

「しまった、この契約書の更新期限が昨日で切れていた……」

職場で青ざめながら画面を見つめる後輩の姿を、私はこれまで何度も目にしてきました。実は、かつての私自身も全く同じ状況でした。

カレンダーと照らし合わせながら、「今日は15日で、期限は14日だから……」と、一つひとつ手作業で確認していたのです。

しかし、データが数百件規模に増えると、どうしても注意力が散漫になり、見落としが発生してしまいます。

もし、ボタン一つで期限を過ぎたデータだけを抽出できれば、どれほど楽になるでしょうか?

今日はそれを可能にする方法をご紹介します。
VBAの「If文」と「日付の比較」を活用すれば、これまで30分かかっていた作業を、わずか1秒で完了させることが可能になります。

【業務効率化】VBAの記事を見る 

1. 実は「日付」は単なる数字!比較は算数と同じ

プログラミングで日付を比較すると聞くと難しく感じるかもしれませんが、その仕組みは非常にシンプルです。

Excelの内部では、日付はシリアル値という連続した数値として処理されています。

例えば、「2026/03/18」は「46098」という数値として処理されています。

つまり、日付の比較は「5より10のほうが大きい」と判断する算数と全く同じ感覚で行えるのです。 

  • A < B (AはBより前の日付か?)
  • A > B (AはBより後の日付か?)

この基本さえ押さえておけば、準備は万全です。

2. 「今日より前か?」を判定するコード

それでは、実際に「B列に入っている日付が、今日を過ぎている(期限切れ)かどうか」を判定するコードを見てみましょう。

そのままコピーして、標準モジュールに貼り付けて使ってみてください。

Sub CheckDeadlines()
    ' 変数の準備
    Dim i As Long
    Dim lastRow As Long
    Dim targetDate As Date
    Dim todayDate As Date
   
    ' 今日の日付を取得(パソコンの時計から自動取得します)
    todayDate = Date
   
' データが入っている最終行を特定
    lastRow = Cells(Rows.Count, "B").End(xlUp).Row
   
' 2行目から最終行まで順番にチェック
    For i = 2 To lastRow
        targetDate = Cells(i, "B").Value ' B列の日付を取得
       
        ' 【重要】もし「今日」よりも「セルの日付」が小さかったら(=過去だったら)
        If targetDate < todayDate Then
          ' 期限切れのため、セルを赤く塗りC列にメッセージを表示 

            Cells(i, "B").Interior.Color = vbRed
            Cells(i, "C").Value = "★期限切れ!"
        Else
            ' 期限内なら色を消してメッセージを空にする
            Cells(i, "B").Interior.ColorIndex = xlNone
            Cells(i, "C").Value = ""
        End If
    Next i
   
    MsgBox "チェックが完了しました!"
End Sub

3. このコードのポイント

このコードの中で一番大事なのは、ここです。

If targetDate < todayDate Then

これは、いわば賞味期限のチェックと同じです。

  • todayDate(今日):2026年3月18日
  • targetDate(商品の期限):2026年3月10日

10日は18日よりも小さい数値であるため、この条件は正しい(真)と判断されます。
その結果、「期限切れ」としての処理が実行される仕組みです。

4. 運用のための注意点

実務において注意すべき点があります。このコードがエラーで停止する場合、多くの原因は日付が入るべきセルに「未定」といった文字列が入力されていることです。

VBAは非常に厳密なため、 「『未定』と『今日』、どっちが大きいの?」と判定ができません。これを「型が一致しません」というエラーで知らせてくれます。 

実務で使うときは、セルにちゃんと日付のみが入るようにすると安定稼働しやすいです。

ぜひ試してみてください!

【業務効率化】VBAの記事を見る 

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました