Excel 期限が近付いたら自動通知するリマインダー作成:条件付き書式とVBAポップアップ解説
はじめに
スケジュールやタスクの管理において、期限や予定日が近づいた際の通知機能は業務効率化に不可欠な要素です。
IF関数や色付けによる視覚的リマインダーに加え、VBAによる確実なポップアップアラーム機能まで、業務改善に必須の2つの方法を紹介します。
概要解説動画
Excelリマインダーの基本:IF関数と条件付き書式による視覚化
最も手軽な方法として、関数と書式設定を組み合わせた視覚的なリマインダーシステムから解説します。
サンプルファイル
ステップ1:当日日付の設定と日数差の計算(DAYS/TODAY関数)
まず基本となるタスク管理表を準備します。
C3セルにTODAY関数で常に当日の日付を表示させ、期限日との日数差を計算する基盤を構築します。
=TODAY()

DAYS関数を使用して期限日と当日の日数差を算出し、これを通知の判定基準とします。
ステップ2:特定の表示(●など)による通知列の作成
IF関数を用いて条件に応じた表示を行う数式を設定します。
以下をそれぞれの列に設定し、全行にコピーします。
| 列 | 数式 | 用途 |
|---|---|---|
| D列 | =IF(DAYS(C6,TODAY())<=1,"●","") | 前日通知 |
| E列 | =IF(DAYS(C6,TODAY())<=7,"●","") | 一週間前通知 |
●を他の文字に変更することで任意の表示が可能です。
また、数値(1や7)を変更することで通知タイミングをカスタマイズできます。


ステップ3:視認性を高める条件付き書式(色付け)の設定
条件付き書式を使用して色による強調表示を設定します。
対象セル範囲を選択後、「ホーム」→「条件付き書式設定」→「新しいルール」から「数式を使用して、書式設定するセルを決定」を選択します。
前日通知の条件:
=DAYS($C6,TODAY())<=1
一週間前通知の条件:
=DAYS($C6,TODAY())<=7


一つの列に設定する場合は条件の優先度に注意が必要です。
今回の例では前日通知の条件を優先しないと正常に機能しません。


応用:完了済みタスクの通知除外
実務的なニーズに応えるため、D列に完了日を追加し、完了日列を参照した通知の抑制方法を解説します。
セル表示での除外:
=IF($D6="",IF(DAYS(C6,TODAY())<=1,"●",""),"")
条件付き書式での除外:
=IF($D6="",DAYS($C6,TODAY())<=1,FALSE)
D列に完了日が入力された場合、通知が表示されなくなります。

VBA/マクロによるポップアップ通知機能の導入
機能概要とメリット:なぜポップアップが必要か
条件付き書式との違いは、能動的な通知機能にあります。
ファイルを開いた瞬間に期限切れが近い件数をポップアップで知らせ、見落としを防止します。
機能のカスタマイズ性も高く、設定シートによる柔軟な調整が可能です。
サンプルファイル
ステップ4:VBAファイルの利用手順
誰でも使用可能なブックとして、以下の構成で提供します:
- 管理表シート: データ入力用
- 結果シート: チェック結果表示用
- 設定シート: カスタマイズ設定用
基本的な使用手順:
- 「管理表」シートに期限データを入力
- 「設定」シートで対象シート名と期限列を指定
- データ開始行数や通知基準日を調整
- ファイルを開くか「実行」ボタンで自動チェック実行
期限切れ項目は赤色背景、日付以外のデータは黄色背景で表示され、結果は数値でも確認できます。


ブックを開くか「設定」シートの実行ボタンをクリックするとアラートが表示されます。

そして管理表シートの背景色が更新されます。

VBAコード
ThisWorkbook
ファイルを開いた際にチェックと通知を行うための部分です。
Option Explicit
Private Sub Workbook_Open()
Call Alert
End Sub
標準モジュール
アラートのロジック。
Option Explicit
Sub Alert()
' 設定シート
Dim settingSheet As Worksheet
Set settingSheet = Worksheets("設定")
' 結果シート
Dim resultSheet As Worksheet
Set resultSheet = Worksheets("結果")
' 対象シート
Dim targetSheet As Worksheet
Set targetSheet = Worksheets(settingSheet.Cells(1, 2).Value)
' 対象列
Dim targetColStr As String
targetColStr = settingSheet.Cells(2, 2).Value
' 対象列の最終行を取得
Dim targetColLastRow As Long
targetColLastRow = targetSheet.Cells(Rows.Count, targetColStr).End(xlUp).Row
' 今日の日付を取得
Dim today As Date
today = Date
'データ開始行を取得
Dim dataStartRow As Integer
dataStartRow = settingSheet.Cells(3, 2).Value
Dim i As Integer ' 行数ループカウンタ
Dim v As Variant ' セルからの値受け取り変数
Dim alertCount As Integer ' 期限の過ぎている数
alertCount = 0
Dim checkCount As Integer ' チェック対象の数
checkCount = 0
Dim notDateCount As Integer ' 日付以外の数
notDateCount = 0
' 対象列を全件チェック
For i = 0 To targetColLastRow - dataStartRow
Dim targetCell As Range
Set targetCell = targetSheet.Columns(targetColStr).Rows(dataStartRow + i)
v = targetCell.Value
' データが日付かどうかをチェック
If IsDate(v) Then
' 日付データである
checkCount = checkCount + 1
' 期限が来ているかをチェック
If v + settingSheet.Cells(4, 2).Value <= today Then
' 期限を過ぎている
alertCount = alertCount + 1
targetCell.Font.Color = RGB(255, 255, 255)
targetCell.Interior.Color = RGB(255, 0, 0)
Else
' 期限を過ぎていない
targetCell.Font.Color = RGB(0, 0, 0)
targetCell.Interior.Color = RGB(255, 255, 255)
End If
Else
' 日付データでない場合
notDateCount = notDateCount + 1
targetCell.Font.Color = RGB(0, 0, 0)
targetCell.Interior.Color = RGB(255, 255, 0)
End If
Next
' 結果シートを更新
resultSheet.Cells(1, 2).Value = checkCount
resultSheet.Cells(2, 2).Value = alertCount
resultSheet.Cells(3, 2).Value = notDateCount
' 結果シートに移動
resultSheet.Activate
resultSheet.Cells(1, 1).Select
' チェックのポップアップの表示
If alertCount > 0 Then
MsgBox "期限チェック完了しました。期限切れの項目があります。"
Else
MsgBox "期限チェック完了しました。期限切れの項目はありません。"
End If
End Sub
まとめと更なる業務改善への展望
2つの方法論は用途に応じて使い分けることを推奨します。視覚的リマインダーは日常的な確認作業に、VBAポップアップは確実な通知が必要な重要業務に適用することで、包括的な期限管理システムが構築できます。
関連記事
プルダウンリストの選択に連動して行の背景色を変える方法
スケジュール管理へのExcel活用