Excel 期限が近付いたら自動通知するリマインダー作成:条件付き書式とVBAポップアップ解説

2025年12月11日

はじめに

スケジュールやタスクの管理において、期限や予定日が近づいた際の通知機能は業務効率化に不可欠な要素です。

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ファイルの利用手順

誰でも使用可能なブックとして、以下の構成で提供します:

  • 管理表シート: データ入力用
  • 結果シート: チェック結果表示用
  • 設定シート: カスタマイズ設定用

基本的な使用手順:

  1. 「管理表」シートに期限データを入力
  2. 「設定」シートで対象シート名と期限列を指定
  3. データ開始行数や通知基準日を調整
  4. ファイルを開くか「実行」ボタンで自動チェック実行

期限切れ項目は赤色背景、日付以外のデータは黄色背景で表示され、結果は数値でも確認できます。

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

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

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活用