「しまった、この契約書の更新期限が昨日で切れていた……」
職場で青ざめながら画面を見つめる後輩の姿を、私はこれまで何度も目にしてきました。実は、かつての私自身も全く同じ状況でした。
カレンダーと照らし合わせながら、「今日は15日で、期限は14日だから……」と、一つひとつ手作業で確認していたのです。
しかし、データが数百件規模に増えると、どうしても注意力が散漫になり、見落としが発生してしまいます。
もし、ボタン一つで期限を過ぎたデータだけを抽出できれば、どれほど楽になるでしょうか?
今日はそれを可能にする方法をご紹介します。
VBAの「If文」と「日付の比較」を活用すれば、これまで30分かかっていた作業を、わずか1秒で完了させることが可能になります。
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は非常に厳密なため、 「『未定』と『今日』、どっちが大きいの?」と判定ができません。これを「型が一致しません」というエラーで知らせてくれます。
実務で使うときは、セルにちゃんと日付のみが入るようにすると安定稼働しやすいです。
ぜひ試してみてください!

コメント