Excelで期日の前日に自動アラートを出す方法|COUNTIF・COUNTIFS・条件付き書式でシート間通知を実装

期日を1日前に確実に察知できれば、慌てる場面は激減します。本記事では、Excel(Microsoft 365/Office 2021 以降を含む)で「Sheet2 の期日が“前日”になったら Sheet1 に警告『要確認』を自動表示する」仕組みを、最短の数式と拡張テクニックで丁寧に解説します。配列数式でつまずいた方でも、今日から即実装できます。

目次

シート間の「前日アラート」を最短で実装する

次の前提を想定しています。

  • Sheet1:A1 に =TODAY()(当日の日付)
  • Sheet2(Dates):B3:B30 に複数の期日(日付形式)
  • 目的:期日の前日になったら Sheet1 に「要確認」を表示

最小構成の答え:COUNTIF で存在判定する

Sheet1 の表示セル(例:B1)に次の式を入力します。

=IF(COUNTIF(Dates!B3:B30, A1+1) > 0, "要確認", "")

ポイント

  • A1+1 は「明日」を表します。COUNTIF が 1 以上なら「要確認」。
  • 比較対象の Dates!B3:B30 は 日付型で入力されている必要があります(文字列は不可)。

「今日」か「明日」のどちらかでも通知したい場合

=IF(COUNTIF(Dates!B3:B30, A1) + COUNTIF(Dates!B3:B30, A1+1) > 0, "要確認", "")

なぜ配列数式 {=IF(Dates!B3:B30=A1,"check date","")} はうまくいかないのか

範囲同士の比較 Dates!B3:B30 = A1 は、真偽の配列(TRUE/FALSE の並び)を返します。セル 1 つに「要確認」か空白かを表示したい場合、配列の中に TRUE が1つでもあるかを判定する必要があり、そこで集計関数(COUNTIF、SUMPRODUCT など)の出番になります。つまり、「集合に条件を満たす要素が存在するか」を問うロジックへ置き換えるのが正解です。

時間が含まれる期日に強い式(時刻を丸め込まない)

たとえば 2025/11/15 10:00 のように時刻付きで入力されていると、単純な =A1+1(日付のみ)との一致判定は外れる可能性があります。そんなときは「明日の日付の 0:00 以上かつ、明後日の 0:00 未満」という範囲条件にすると堅牢です。

=IF( COUNTIFS(Dates!B3:B30, ">="&A1+1,
               Dates!B3:B30, "<"&A1+2) > 0,
    "要確認", "")

この書き方なら、時刻の有無や違いに左右されません。

INT で日付に丸め込む別解

期日列が「日時」混在の可能性が高い場合、丸めて比べるのも有効です。

=IF( SUMPRODUCT(--(INT(Dates!B3:B30)=A1+1)) > 0, "要確認", "")

INT は小数点以下(=時刻部分)を切り捨て、SUMPRODUCT で TRUE の個数を合計します。

Sheet2 側で対象行をハイライト(条件付き書式)

通知に加えて、対象の行全体を視覚的に強調したい場合は、Sheet2(Dates)に条件付き書式を設定します。

  1. Sheet2 のデータ範囲(例:A3:E300 など)を選択。
  2. 「条件付き書式」→「数式を使用して、書式設定するセルを決定」を選択。
  3. 次の式を入力(行見出しが 3 行目からの例):
    =AND($B3<>"", $B3>=TODAY()+1, $B3<TODAY()+2)
  4. 強調したい塗りつぶし色やフォント色を設定。

この式は「行の B 列が『明日』の範囲(0:00〜24:00)」に入っているときにだけ行全体を装飾します。

ケース別:よく使う式の早見表

目的使用例説明
前日だけ通知(基本)=IF(COUNTIF(Dates!B3:B30, A1+1)>0,"要確認","")明日の期日が1つでもあれば通知。
今日または明日で通知=IF(COUNTIF(Dates!B3:B30,A1)+COUNTIF(Dates!B3:B30,A1+1)>0,"要確認","")今日・明日のどちらかに一致すれば通知。
時刻を含む期日に対応=IF(COUNTIFS(Dates!B3:B30,">="&A1+1,Dates!B3:B30,"<"&A1+2)>0,"要確認","")0:00〜24:00 の範囲一致で厳密に判定。
対象件数も表示=LET(n,COUNTIFS(Dates!B3:B30,">="&A1+1,Dates!B3:B30,"<"&A1+2), IF(n>0,n&"件 要確認",""))「何件あるか」も併記して優先順位づけに役立つ。
営業日ベースで前営業日通知=IF(COUNTIF(Dates!B3:B30, WORKDAY(A1,1, Holidays!A:A))>0,"要確認","")祝日表(Holidays シート)を参照して翌営業日を計算。

可変範囲(行追加)に強い設計

Excel テーブル化が最も安全

Sheet2 の期日リストをテーブルに変換すると、行追加時も自動拡張され、式のメンテナンスが不要になります。

  1. Dates の B 列のリストを選択 → Ctrl+T(テーブル化)。
  2. テーブル名を tDates、期日列の見出しを DueDate などに設定。
  3. Sheet1!B1 の式を次に置き換え:
    =IF(COUNTIF(tDates[DueDate], A1+1)>0, "要確認", "")

行追加・削除で範囲が変わっても、式の書き換えは不要です。

テーブルが使えない場合:INDEX で動的範囲

テーブル化できない制約があるなら、INDEX を使うと非ボラタイルで軽い動的範囲が作れます(最後のデータ行に空白がない前提)。

=Dates!$B$3:INDEX(Dates!$B:$B, MATCH(1E+100, Dates!$B:$B))

上記を名前定義(例:DueDates)し、Sheet1!B1 は =IF(COUNTIF(DueDates, A1+1)>0, "要確認", "") にします。空白行が混ざる場合は LOOKUP を使った最終行取得や、Excel 365 なら FILTER とスピル参照(DueDates#)も有効です。

複数シートの期日を一括監視する

Microsoft 365(動的配列)なら VSTACK 一択

各部署シートに散らばる期日をひとまとめにして監視できます。

=LET(all, VSTACK(Sales!B3:B30, HR!B3:B30, IT!B3:B30),
     IF(COUNTIFS(all, "&gt;="&amp;A1+1, all, "&lt;"&amp;A1+2)&gt;0, "要確認", ""))

VSTACK は縦方向に連結する関数。COUNTIFS の範囲に配列を直接渡せます。

旧バージョン:加算でカバー

動的配列がない環境では、各シートの COUNTIF を加算します。

=IF( COUNTIF(Sales!B3:B30, A1+1)
   + COUNTIF(HR!B3:B30, A1+1)
   + COUNTIF(IT!B3:B30, A1+1) &gt; 0, "要確認", "")

Google スプレッドシートでも同様に使える

基本の考え方は同じです。スプレッドシートでは列の終端を気にせず書くパターンが多いでしょう。

=IF(COUNTIF(Dates!B3:B, A1+1) &gt; 0, "要確認", "")

時刻を含む場合は Excel と同様に COUNTIFS で範囲指定します。

=IF(COUNTIFS(Dates!B3:B, "&gt;="&amp;A1+1, Dates!B3:B, "&lt;"&amp;A1+2), "要確認", "")

「要確認」をもっと実務向きに:残日数・件数・一覧化

残日数も示して優先順位を見える化

Sheet1 に「明日が期限の件数」を表示したい場合:

=LET(n, COUNTIFS(Dates!B3:B30, "&gt;="&amp;A1+1, Dates!B3:B30, "&lt;"&amp;A1+2),
    IF(n&gt;0, TEXT(n, "0") &amp; "件 要確認", ""))

期日一覧を Sheet1 に自動抽出(Microsoft 365):

=LET(r, FILTER(Dates!B3:B30, (Dates!B3:B30&gt;=A1+1)*(Dates!B3:B30&lt;A1+2)),
    IF(ROWS(r)&gt;0, r, "該当なし"))

運用の落とし穴と対策

  • 日付が「文字列」になっている:左寄せ・ふちに三角マークが出るなど。
    対策:空列に =DATEVALUE(B3) で変換し、値貼り付け/またはデータの入力規則で日付に限定。
  • 1900/1904 日付システム差異:Mac 由来のブックは 1904 システムの可能性。
    対策:「ファイル > オプション > 詳細設定 > 1904 年から開始」の設定を確認。混在すると+1462日ずれる。
  • TODAY() の更新タイミング:Excel は再計算時に更新。長時間開きっぱなしだと日付が変わらない。
    対策:再計算(F9 / Ctrl+Alt+F9)、または開き直し。運用で朝に開くルーティンを作る。
  • 時刻付きの入力:9:00 や 23:59 が混ざると一致判定がズレる。
    対策:COUNTIFS ">="&A1+1 と "<"&A1+2 の範囲指定に統一。
  • Volatile 関数の過多:OFFSET、INDIRECT 多用で重くなる。
    対策:基本はテーブル化、次点で INDEX を使用。
  • 条件付き書式の参照が相対になっていない:列固定($B)がないと行ごとにズレる。
    対策:$B3 のように列だけ絶対参照に。

営業日・休日考慮のアラート設計

「締切は常に営業日」という運用なら、WORKDAY を使って「翌営業日」を求め、そこに一致したら通知するのが実務的です。

  1. Holidays シートの A 列に社内休日/法定休日をリストアップ。
  2. Sheet1!B1 に次の式:
    =IF(COUNTIF(Dates!B3:B30, WORKDAY(A1,1, Holidays!A:A))>0, "要確認", "")

この方法は「明日が休日のため、翌営業日が実質の前日」といったケースでもブレません。

通知の拡張:UI と自動化のアイデア

  • 色とメッセージの二段構え:Sheet1 は「要確認」表示、Sheet2 は行ハイライト。担当者会議で見落としが減ります。
  • 優先度別の色分け:今日=赤、明日=オレンジ、2日後=黄 の 3 ルールにすれば、ひと目で火急/準備中/余裕ありが把握可能。
  • Power Automate や Teams 通知:Excel for the web + OneDrive/SharePoint のファイルに対し、毎朝のフローで明日期日を検出→チャネルにメッセージ投下。ファイルを開かなくても気づけます(本記事では数式範囲内にとどめます)。

品質を担保するテスト手順

  1. Sheet1 の A1 を一時的に固定(例:=DATE(2025,11,14))。
  2. Sheet2 に 2025/11/15 の期日を 1 件入れる。
  3. Sheet1!B1 が 「要確認」 になれば OK。
  4. Sheet2 の時刻付き(例:2025/11/15 09:00)で再検証。
    一致しない時は COUNTIFS ">="&A1+1/"<"&A1+2 方式へ切替。
  5. A1 を =TODAY() に戻して保存。

テンプレート(コピペで使える雛形)

以下をそのままブックに適用すれば、初期構築が数分で終わります。

Sheet1(ダッシュボード)

  • A1:=TODAY()
  • B1(前日アラート): =IF(COUNTIF(Dates!B3:B30, A1+1)>0, "要確認", "")
  • B2(件数表示): =LET(n,COUNTIFS(Dates!B3:B30,">="&A1+1,Dates!B3:B30,"<"&A1+2), IF(n>0, n&"件 要確認",""))

Sheet2(Dates)

  • B3:B30 に期日(日付または日時)を入力。
  • 行ハイライトの条件付き書式(範囲 A3:E300 の例): =AND($B3<>"", $B3>=TODAY()+1, $B3<TODAY()+2)

トラブルシューティング:症状別チェックリスト

症状原因の例対処
「要確認」が出ない期日が文字列/A1 が日付でない/1904 システム日付型に統一、DATEVALUE で変換、日付システムを確認
時刻付きが拾えないCOUNTIF の完全一致で判定しているCOUNTIFS ">="&A1+1 と "<"&A1+2 の範囲判定にする
重くなるOFFSET/INDIRECT の多用テーブル化 or INDEX で動的範囲を作る
行ハイライトがズレる条件付き書式の相対参照ミス$ で列固定($B3)にする
日付がずれるタイムゾーン/深夜跨ぎで TODAY() 未更新朝一で開き直し、再計算を実行

数式を選ぶ基準(意思決定フロー)

  • 期日に時刻がない → COUNTIF(, A1+1)(シンプルで速い)。
  • 時刻が混在 → COUNTIFS ">="&A1+1 & "<"&A1+2(堅牢)。
  • 一覧も欲しい(Microsoft 365)→ FILTER で抽出をスピル。
  • 範囲が増える → まずはテーブル化、次に INDEX 動的範囲。
  • 部署横断 → 365 なら VSTACK、旧版は COUNTIF の加算。

実装のベストプラクティスまとめ

  • 最小構成:Sheet1!B1 に =IF(COUNTIF(Dates!B3:B30, A1+1)>0,"要確認","")。
  • 堅牢性:時刻混在は COUNTIFS の「>= 明日 0:00 かつ < 明後日 0:00」。
  • 視認性:Dates で条件付き書式を使い、対象行を自動ハイライト。
  • 拡張性:テーブル化で可変範囲、VSTACK で多シート集約。
  • 運用性:TODAY() 再計算タイミングを理解し、朝のチェックを定着。

FAQ

Q. Sheet1 を開かなくても気づきたい。
A. OneDrive/SharePoint に保存し、Power Automate のスケジュール フローで毎朝「明日期日」を検出して通知する運用が効果的です(詳細は本稿の数式設計を流用)。

Q. A1 の TODAY() を固定したい。
A. 検証時だけ =DATE(年,月,日) に入れ替えて動作確認し、完了後に =TODAY() へ戻します。

Q. 期日が毎月末などのパターン。
A. 別列で基準日を生成(例:=EOMONTH(TODAY(),0))し、COUNTIF/COUNTIFS の条件に差し替えます。

終わりに

配列比較で行き詰まったケースでも、発想を「一致の有無」へ転換して COUNTIF/COUNTIFS を用いれば、シートを跨いだ期日アラートは極めてシンプルに実装できます。まずは基本の 1 行を入れて運用し、時刻混在・可変範囲・複数シート統合といった要件に応じて、ここで紹介したベストプラクティスを段階的に取り入れてください。明日から、締切前日の見落としがゼロに近づきます。

本記事のキモ(再掲)

  • 基本式:=IF(COUNTIF(Dates!B3:B30, A1+1)>0, "要確認", "")
  • 今日+明日:=IF(COUNTIF(Dates!B3:B30, A1)+COUNTIF(Dates!B3:B30, A1+1)>0,"要確認","")
  • 行強調(条件付き書式):=AND($B3<>"", $B3>=TODAY()+1, $B3<TODAY()+2)
  • 可変範囲:テーブル化(tDates[DueDate])または INDEX で動的範囲。
  • 複数シート:VSTACK(Microsoft 365) or COUNTIF の加算。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次