
Excel変化検知通知で問題を即座に把握
「在庫が切れていたのに気づかなかった」「売上が急落していたのに翌日まで発見できなかった」――このような「後手の対応」は、多くの企業でExcelファイルの手動確認に頼っていることが根本原因です。Claude Code + openpyxl + smtplib(Slack webhook)を使えば、Excelの変化を自動で検知してリアルタイムに通知する仕組みを構築できます。
このシステムの最大のメリットは 「担当者が不在でも監視が継続する」 点です。休暇中・出張中・深夜でも、スクリプトが自動でExcelをチェックし、問題が発生した瞬間に関係者全員に通知が届きます。「確認漏れ」という概念そのものをなくすことができます。
- 毎朝担当者がExcelを開いて目視確認する「張り付き業務」を排除したい
- 担当者の休暇中に売上急落や在庫切れが発見されないリスクを防ぎたい
- 問題発生から対応着手までのタイムラグを最小化したい
- 複数のExcelファイルを一元的に監視する仕組みが欲しい
Excelのデータを定期チェックして、異常値・期限超過・在庫切れを自動検知しSlack・メールで即通知するシステムをClaude Code + openpyxl で構築します。
ステップ1:売上急落を自動検知してSlack通知
Slackに自動通知するスクリプトを作成して
import openpyxl, requests, json
from datetime import date
SLACK_WEBHOOK = "https://hooks.slack.com/services/xxx/yyy/zzz"
wb = openpyxl.load_workbook("売上モニタリング.xlsx")
ws = wb.active
alerts = []
prev_val = None
for row in ws.iter_rows(min_row=2, values_only=True):
dt, sales = row[0], row[1]
if prev_val and sales and prev_val:
drop_rate = (prev_val - sales) / prev_val
if drop_rate >= 0.20:
alerts.append(f"⚠️ {dt}: 売上急落 {drop_rate*100:.1f}%減 "
f"({prev_val:,}→{sales:,}万円)")
prev_val = sales
if alerts:
payload = {"text": "【売上アラート】\n" + "\n".join(alerts)}
requests.post(SLACK_WEBHOOK, data=json.dumps(payload))
print(f"Slackアラート送信: {len(alerts)}件")
else:
print("異常なし")
売上急落を自動検知してSlack通知。問題発生から対応まで時間を大幅短縮。
ステップ2:在庫切れを検知してメール通知
import openpyxl, smtplib
from email.mime.text import MIMEText
wb = openpyxl.load_workbook("在庫管理.xlsx")
ws = wb.active
THRESHOLD = 10 # 閾値(10個以下でアラート)
stockouts = []
for row in ws.iter_rows(min_row=2, values_only=True):
item_name, stock, reorder = row[0], row[1], row[2]
if stock is not None and stock <= THRESHOLD:
stockouts.append(f" {item_name}: 残{stock}個(発注点: {reorder}個)")
if stockouts:
body = "在庫切れ・低在庫アラート\n\n" + "\n".join(stockouts)
msg = MIMEText(body, "plain", "utf-8")
msg["Subject"] = f"【在庫アラート】{len(stockouts)}品目が低在庫"
msg["From"] = "bot@example.com"
msg["To"] = "warehouse@example.com"
with smtplib.SMTP("smtp.example.com", 587) as s:
s.starttls(); s.login("bot@example.com","pw"); s.send_message(msg)
print(f"在庫アラート送信: {len(stockouts)}品目")
在庫切れ品目を自動検知してメール通知。欠品による機会損失を防止。
在庫チェックスクリプトは複数の在庫ファイルを一括監視することも可能です。倉庫が複数ある場合や、商品カテゴリごとにExcelが分かれている場合でも、glob.glob("在庫_*.xlsx") で全ファイルを一括取得して処理できます。また、在庫切れの通知だけでなく「あと3日で切れる予測」のような予測アラートも、過去の消費ペースデータがあれば同じスクリプトで計算できます。
ステップ3:期限超過タスクを自動通知
import openpyxl, requests, json
from datetime import date
wb = openpyxl.load_workbook("タスク管理.xlsx")
ws = wb.active
TODAY = date.today()
overdue = []
for row in ws.iter_rows(min_row=2, values_only=True):
task, assignee, deadline, status = row[:4]
if (status != "完了" and isinstance(deadline, date)
and deadline < TODAY):
days_over = (TODAY - deadline).days
overdue.append(f"• {task}(担当:{assignee}) {days_over}日超過")
if overdue:
payload = {"text": f"【期限超過アラート】{len(overdue)}件\n" + "\n".join(overdue)}
requests.post(SLACK_WEBHOOK, data=json.dumps(payload))
print(f"期限超過アラート: {len(overdue)}件")
期限超過タスクを自動検知してSlack通知。見落としゼロのタスク管理を実現。
ステップ4:スケジュール実行で毎朝自動チェック
import schedule, time
def daily_check():
print("=== 毎朝9時 自動チェック開始 ===")
# 売上チェック
check_sales_drop()
# 在庫チェック
check_inventory()
# 期限チェック
check_deadlines()
print("=== チェック完了 ===")
schedule.every().day.at("09:00").do(daily_check)
while True:
schedule.run_pending()
time.sleep(60)
毎朝9時に自動でExcelをチェックしてアラート送信。朝のルーティン確認作業がゼロに。
Windowsタスクスケジューラでの自動実行設定は、GUIから5分で完了します。「基本タスクの作成」→「毎日トリガー」→「プログラムの開始(python.exe)」の3ステップで設定できます。実行ログは logging モジュールでテキストファイルに記録することを推奨します。スクリプトが失敗した場合のアラート(実行失敗通知)も、タスクスケジューラの「失敗時の動作」設定で追加メールを送るよう設定できます。
実務での活用シナリオ
このスクリプトを実際の業務にどう活用するか、具体的なシーンをご紹介します。
- 売上管理:日次売上が前月比80%を下回ったらSlack #sales-alert に即時通知。対応を翌日に持ち越さない。
- 在庫管理:安全在庫を下回った品目を自動検知してメール通知。欠品による機会損失を防止。
- プロジェクト管理:タスクの期限超過を自動検知し、担当者とマネージャー双方に同時通知。
- 経理・締め管理:月次締め日の未提出レポートを検知し、担当部署に自動リマインドメールを送信。
- 品質管理:製造ラインの不良率が閾値を超えた瞬間に工場長へ通知。問題の早期発見に貢献。
Slack Incoming Webhookの設定は3分で完了します。SlackワークスペースのApp設定から「Incoming Webhooks」を追加し、通知先チャンネルとWebhook URLを取得するだけです。URLは SLACK_WEBHOOK_URL という環境変数として設定することで、コードに直接書かずにセキュアに管理できます。通知メッセージにはExcelファイルへのリンク・異常値の詳細・対応推奨アクションを含めると、受信した担当者がすぐに行動できます。
導入前後の効果比較
担当者が毎朝Excelファイルを開いて目視確認。売上急落や在庫切れを翌日以降に発見するケースが多く、対応が後手に回っていた。担当者が休暇中は誰も確認しない日も発生していた。
Pythonスクリプトがスケジュール実行でExcelを自動チェック。問題発生の即日・即時にSlackやメールで関係者全員に通知。担当者不在でも監視が継続する仕組みに。
導入のポイントと注意事項
- 通知のしきい値は保守的に設定し、最初は「重大問題のみ通知」から始めて徐々に細かくチューニングする
- Slack通知はwebhook URLを環境変数として管理し、コードに直接書かない(セキュリティ対策)
- スケジュール実行はWindowsタスクスケジューラまたはcronで設定。失敗時のリトライ処理も実装しておく
- 通知文には「Excelファイルへのリンク」を含めることで、受信者がすぐに詳細確認できる
よくある質問(FAQ)
まとめ:Excel変化検知通知自動化で得られる効果
✅ 売上急落・在庫切れ・期限超過を 即時自動検知(翌日発見のリスクゼロ)
✅ Slack・メールで 関係者に自動通知(担当者不在でも継続監視)
✅ スケジュール実行で 毎朝自動チェック(手動確認の習慣が不要)
✅ 複数のExcelファイルを 一括監視(部門横断の管理も一元化)
監視の精度を高めるための応用テクニック
基本的な変化検知スクリプトに以下の処理を追加することで、より高精度・実用的な監視システムに発展させることができます。
| 応用テクニック | 実装方法 | 効果 |
|---|---|---|
| 移動平均との比較 | 過去7日間の平均を計算し、当日値がその80%を下回ったら通知 | 一時的な変動と真の異常を区別 |
| 通知抑制(クールダウン) | 同じ問題で1時間以内の重複通知をスキップ | 通知疲れ(アラート過多)を防止 |
| エスカレーション | 問題が2時間以上継続したらマネージャーにも通知 | 重大問題を上位者に確実に伝達 |
| 週次サマリー | 毎週月曜朝に過去1週間の異常発生件数・内容をレポート送信 | 傾向分析・根本原因特定を支援 |
これらの応用機能も、Claude Code に「移動平均との比較アラートを追加して」「2時間以上継続する問題はマネージャーにも通知して」と追加指示するだけで実装できます。一度基本スクリプトができてしまえば、機能追加も数分で完了します。
問題の発見が「翌日以降」から「即時」に変わることで、対応の遅延によるビジネス損失を防止できます。売上急落への即応は1日の差で回復できるかどうかを左右することがあります。また、担当者が常にモニタリングし続ける「張り付き業務」がなくなることで、より付加価値の高い業務に集中できます。
さらに高度な分析として、機械学習を使った異常値検知(Prophet、Isolaton Forest)や、Excelデータの可視化ダッシュボード(Streamlit)との連携を検討することで、予測型の監視システムへと発展させることができます。
関連記事