Power Automate DesktopでExcelの締切監視を自動化したら、毎朝15分の目視チェックがゼロになった話
毎朝Excelを開いて、締切が近い行がないか目で追いかける。案件管理のこの作業を、気づけば半年以上続けていました。
ある日、締切3日前の案件を見落としかけてヒヤッとしたのをきっかけに、Power Automate Desktop(以下PAD)に毎朝チェックさせる仕組みを作りました。結果、毎朝の15分が消えて、「見落としてないよな…」という不安も一緒に消えました。
この記事でわかること:
PADでExcelの日付列を今日の日付と比較する方法
日付比較で実際にハマったポイントと解決策(ここが本題です)
通知まで含めた全体の構成
困りごと
管理しているExcelには常時100行前後の案件が並んでいて、「締切日」列を毎朝チェックし、3日前を切ったものを関係者に連絡する運用でした。
問題は3つありました。
まず、毎朝15分かかる。単純作業のくせに、日付の見間違いが許されないので地味に集中力を使います。次に、行が増えるほど見落としリスクが上がる。100行を目でスキャンして「今日は該当なし」と判断するのは、正直かなり怖い。そして、自分が休んだ日は誰もチェックしない。属人化の典型でした。
構成:何をどう組んだか
流れはシンプルです。
PADのフローを毎朝8:30に起動(タスクスケジューラからPAD.Console.Hostを叩く方法もありますが、私はPCログイン後に手動1クリック→後にスケジュール化)
対象のExcelを開いて「締切日」列を全行読み取る
各行の締切日と今日の日付を比較し、残り3日以下の行を抽出
該当があれば画面に一覧をポップアップ表示(通知部分はトースト通知にも差し替え可能)
使った主要アクションは次の4つだけです。
「Excel の起動」+「Excel ワークシートから読み取り」→ 範囲をDataTableに取得
「For each」→ DataTableを1行ずつ回す
「テキストを datetime に変換」+「日時の減算」→ 残り日数を計算
「If」+「メッセージを表示」→ 閾値判定と通知
アクション数にして20個弱。凝ったことは何もしていません。それでも動けば毎日効くのが締切監視のいいところです。
ハマった点
ここからが本題です。「Excelの日付をPADで比較する」、これが想像の3倍めんどくさかった。
1. Excelから読んだ「日付」が、そのままでは日付じゃない
「Excel ワークシートから読み取り」で取得した締切日を、%CurrentDate%と比較しようとしたら、Ifの条件が想定どおりに動かない。ログを見ると、セルによって「2026/07/10」というテキストで来るものと、datetime型で来るものが混在していました。
原因はセルの書式です。PADはセルの表示形式に引きずられて型を解釈するので、途中で誰かが書式を「標準」にした行や、手打ちで入れた行だけテキスト扱いになります。人が運用しているExcelでは書式は必ず揺れます。
解決策は「全部テキストとして受けて、自分で変換する」に統一すること。読み取り後にFor eachの中で「テキストを datetime に変換」を必ず通し、変換後の値だけを比較に使います。「たまたま型が合っていて動く」状態を捨てるのがポイントです。
2. 空セル・途中の空行で止まる
運用中のExcelには「まだ締切未定」の空セルが普通にあります。これが変換アクションに入ると「入力テキストを有効な datetime に変換できません」でフロー停止。初回の実運用、開始2分で止まりました。
For eachの先頭に「If %CurrentItem['締切日']% が空 → 次のループへ」を1本入れるだけで解決です。地味ですが、これを入れる前と後で安定感がまったく違います。
3. 「残り日数」の計算結果はそのまま比較できない
「日時の減算」の結果はTimeSpanで返ってくるので、そのままIfで「3以下」と比較すると意図しない挙動になります。減算結果のプロパティから日数(.Days)を取り出して、数値として比較するようにしました。ここもエラーにならずに「なんか判定がおかしい」という一番嫌なパターンだったので、テスト用に締切日を今日±1日にしたダミー行を作って動作確認したのが効きました。
動いた結果(数字つき)
毎朝の目視チェック: 15分 → 0分(フロー実行は約40秒)
月あたり約5時間の削減
運用8週間で見落としゼロ。該当なしの日も「該当なし」と表示させているので、「チェック自体が動いてなかった」事故も防げています
数字にしにくい効果として、朝イチの「怖い作業」が消えたのが一番大きいです。あと、フローの存在をチームに共有したことで、自分が休んでも他の人が1クリックで回せるようになりました。
注意点をひとつ。列の並びやシート名が変わるとフローは普通に壊れます。読み取り範囲を列名ベースで扱う、変更時はフローも直す運用ルールを決めておく、のどちらかは必要です。
おわりに
「日付列を監視して、閾値を切ったら通知」という型なので、締切以外にも契約更新日、資格の有効期限、在庫の発注点など、そのまま流用できます。
次回は、PowerShellで書いた入力チェックスクリプト(checker.ps1)の話を書く予定です。こちらは「人が入力したデータを信用しない」ための仕組みの話です。
参考になったらスキで教えてもらえるとうれしいです。
