Claude Code x openpyxl でKPIダッシュボードを毎日自動更新する完全ガイド

Claude Code×openpyxlでExcel KPIダッシュボードを毎朝自動更新する仕組みを解説。売上・利益・顧客数などのKPIを自動集計し目標達成率で色分け表示。未達アラートはSlack通知。コード付き。

この記事をシェア:
目次 クリックで開く

2026年4月 | Excel自動化 | KPI管理

Claude Codeが生成したKPIダッシュボード

▲ Claude Codeが実際に生成した実行結果

毎朝30分のKPI集計作業をゼロにした

📌 この記事で実現できること

  • Excel KPIダッシュボード自動更新の完全自動化を実現するPythonスクリプトを5ステップで解説
  • 「毎朝の手動KPI集計・転記・グラフ更新」という課題を根本から解消する
  • Claude Codeへの自然言語指示だけでスクリプトを生成できる
  • 月・週・日単位の定期実行で完全無人化を実現する方法も紹介

以下のステップを順番に実行することで、今日から業務自動化を始められます。コピーして使えるコードと、Claude Codeへの指示文をセットで解説します。

営業企画の近藤です。毎朝8時30分、出社してすぐにKPIダッシュボードを手動更新するのが日課でした。3つのCSVを開いてコピーし、グラフを更新して……その30分が惜しくなりClaude Codeに相談したところ、データ更新からSlack通知まで完全自動化できました。

この記事で実現すること

✅ 複数CSVを自動統合してKPI集計
✅ 目標vs実績グラフの自動更新
✅ 達成率で色分け(緑/黄/赤)
✅ 未達KPIをSlackに自動通知
✅ 週次・月次サマリーの自動生成

STEP 1:複数CSVを統合してKPIを自動集計する

まず複数の営業データCSVを読み込み、KPIを計算するスクリプトを作成します。

💬 私はClaude Codeにこう頼みました:sales_daily.csv、leads.csv、calls.csvの3ファイルを統合して
以下のKPIを自動計算しExcelに書き込んでください。
– 月次売上・目標達成率
– リード獲得数・商談化率・受注率
– 架電数・アポ獲得率
🤖 Claude Codeの回答:3ファイルを読み込み、月次KPIを自動計算してExcelに書き込むスクリプトを作成しました。pandas で統合処理、openpyxl で書き込みます。
import pandas as pd, openpyxl
from datetime import datetime

sales  = pd.read_csv("sales_daily.csv",  parse_dates=["date"])
leads  = pd.read_csv("leads.csv",        parse_dates=["created_at"])
calls  = pd.read_csv("calls.csv",        parse_dates=["call_date"])

today = datetime.now().date()
ms = today.replace(day=1)

monthly_sales  = sales[sales["date"].dt.date >= ms]["amount"].sum()
target         = 5_000_000
achieve_rate   = monthly_sales / target * 100

monthly_leads  = len(leads[leads["created_at"].dt.date >= ms])
converted      = len(leads[(leads["status"]=="商談化") & (leads["created_at"].dt.date >= ms)])
conv_rate      = converted / monthly_leads * 100 if monthly_leads else 0

monthly_calls  = len(calls[calls["call_date"].dt.date >= ms])
apo            = len(calls[(calls["result"]=="アポ獲得") & (calls["call_date"].dt.date >= ms)])
apo_rate       = apo / monthly_calls * 100 if monthly_calls else 0

wb = openpyxl.load_workbook("kpi_template.xlsx")
ws = wb["KPI"]
ws["B2"] = monthly_sales
ws["B3"] = achieve_rate / 100
ws["B4"] = monthly_leads
ws["B5"] = conv_rate / 100
ws["B6"] = monthly_calls
ws["B7"] = apo_rate / 100
ws["A1"] = f"更新: {datetime.now():%Y/%m/%d %H:%M}"
wb.save(f"kpi_{today:%Y%m%d}.xlsx")
print(f"KPI集計完了 売上達成率:{achieve_rate:.1f}%")
✅ 実行結果

3CSVが統合され月次KPIが自動計算されてExcelに書き込まれました。達成率がパーセント表示で正確に出力されています。

実行結果

STEP 2:達成率で色分けとグラフを自動生成する

KPI数値に加え、達成状況が一目でわかる条件付き書式とグラフを自動生成します。

💬 私はClaude Codeにこう頼みました:KPIダッシュボードに以下を追加してください。
– 達成率80%未満は赤、80-99%は黄、100%以上は緑
– 日別売上折れ線グラフ+目標ライン
– 部門別棒グラフ
🤖 Claude Codeの回答:条件付き書式と複合グラフの自動生成コードを追加しました。ConditionalFormattingList と openpyxl チャートAPIを使います。
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill, Font
from openpyxl.chart import LineChart, Reference

red_f    = PatternFill("solid", fgColor="FFCDD2")
yellow_f = PatternFill("solid", fgColor="FFF9C4")
green_f  = PatternFill("solid", fgColor="C8E6C9")

ws.conditional_formatting.add("C2:C20",
    CellIsRule(operator="lessThan",           formula=["0.8"],  fill=red_f))
ws.conditional_formatting.add("C2:C20",
    CellIsRule(operator="between",            formula=["0.8","0.999"], fill=yellow_f))
ws.conditional_formatting.add("C2:C20",
    CellIsRule(operator="greaterThanOrEqual", formula=["1"],    fill=green_f))

chart = LineChart()
chart.title = "日別売上推移"
chart.y_axis.title = "売上(円)"
data   = Reference(ws_daily, min_col=2, min_row=1, max_row=ws_daily.max_row)
target = Reference(ws_daily, min_col=3, min_row=1, max_row=ws_daily.max_row)
dates  = Reference(ws_daily, min_col=1, min_row=2, max_row=ws_daily.max_row)
chart.add_data(data,   titles_from_data=True)
chart.add_data(target, titles_from_data=True)
chart.set_categories(dates)
chart.series[1].graphicalProperties.line.dashDot = "dash"
chart.width = 20; chart.height = 12
ws.add_chart(chart, "E2")
wb.save(f"kpi_{today:%Y%m%d}.xlsx")
✅ 実行結果

達成率80%未満が赤、80-99%が黄、100%以上が緑に自動着色。折れ線グラフと目標ラインが自動生成されました。

STEP 3:未達KPIをSlackに自動通知する

目標未達のKPIを検知して、Slackに自動アラートを送信します。

💬 私はClaude Codeにこう頼みました:達成率80%未満のKPIを検出してSlack Webhookに通知してください。
絵文字と具体的な数値を含めてください。
🤖 Claude Codeの回答:Slack Webhookへの通知機能を追加しました。未達KPIの自動検出と警告メッセージを実装します。
import requests

WEBHOOK = "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"

def kpi_alert(name, current, target, rate):
    if rate >= 1.0: return
    emoji = "🔴" if rate < 0.8 else "🟡"
    requests.post(WEBHOOK, json={"blocks":[
        {"type":"header","text":{"type":"plain_text","text":f"{emoji} KPIアラート"}},
        {"type":"section","fields":[
            {"type":"mrkdwn","text":f"*KPI:* {name}"},
            {"type":"mrkdwn","text":f"*達成率:* {rate*100:.1f}%"},
            {"type":"mrkdwn","text":f"*実績:* {current:,.0f}"},
            {"type":"mrkdwn","text":f"*目標:* {target:,.0f}"},
        ]}
    ]})

kpi_alert("月次売上", monthly_sales, target, achieve_rate/100)
kpi_alert("商談化率", conv_rate,     30,     conv_rate/30)
kpi_alert("アポ率",   apo_rate,      20,     apo_rate/20)
print("Slackアラート送信完了")
✅ 実行結果

未達KPIが自動検出され、赤・黄の絵文字付きでSlackに通知が届きました。具体的な達成率と実績値が表示されています。

STEP 4:週次・月次サマリーレポートを自動生成する

経営層向けの週次・月次KPIサマリーを自動集計します。

💬 私はClaude Codeにこう頼みました:前週比・前月比の変化率も計算して、矢印(上下)で傾向を表示した
週次・月次サマリーExcelを自動生成してください。
🤖 Claude Codeの回答:週次・月次比較レポートの自動生成コードを作成しました。前期比計算と矢印表示を実装します。
def create_summary(period="weekly"):
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = f"{period} KPI"
    headers = ["KPI","今期","前期","変化率","傾向","達成率"]
    for col, h in enumerate(headers, 1):
        c = ws.cell(row=1, column=col, value=h)
        c.font = Font(bold=True, color="FFFFFF")
        c.fill = PatternFill("solid", fgColor="107C41")

    kpis = [("売上", monthly_sales, prev_sales, target)]
    for row_i, (kpi, curr, prev, tgt) in enumerate(kpis, 2):
        chg = (curr - prev) / prev * 100 if prev else 0
        trend = "↑" if chg > 0 else "↓" if chg < 0 else "→"
        ws.cell(row=row_i, column=1, value=kpi)
        ws.cell(row=row_i, column=2, value=curr)
        ws.cell(row=row_i, column=3, value=prev)
        ws.cell(row=row_i, column=4, value=f"{chg:+.1f}%")
        tc = ws.cell(row=row_i, column=5, value=trend)
        tc.font = Font(color="107C41" if chg>0 else "DC2626", bold=True, size=14)
        ws.cell(row=row_i, column=6, value=f"{curr/tgt*100:.1f}%")

    fn = f"kpi_summary_{period}_{today:%Y%m%d}.xlsx"
    wb.save(fn)
    print(f"サマリー生成: {fn}")

create_summary("weekly")
create_summary("monthly")
✅ 実行結果

週次・月次KPIサマリーが自動生成されました。前期比の変化率と↑↓矢印付きで経営会議にそのまま提出できます。

STEP 5:タスクスケジューラーで毎朝自動実行

毎朝9時に自動でKPI更新が走るようにスケジューラーを設定します。

💬 私はClaude Codeにこう頼みました:このスクリプトをWindowsタスクスケジューラーで毎朝9時に自動実行して
エラー時は自動リトライするコードを追加してください。
🤖 Claude Codeの回答:スケジューラー設定コマンドとエラーハンドリング付き実行ラッパーを作成しました。
import subprocess, sys, time, logging
from datetime import datetime

logging.basicConfig(filename="kpi_update.log", level=logging.INFO,
    format="%(asctime)s %(levelname)s %(message)s")

def run_retry(script, max_try=3, wait=60):
    for i in range(max_try):
        try:
            r = subprocess.run([sys.executable, script],
                capture_output=True, text=True, timeout=300)
            if r.returncode == 0:
                logging.info(f"成功: {r.stdout.strip()}")
                return True
            logging.error(f"試行{i+1}失敗: {r.stderr}")
        except subprocess.TimeoutExpired:
            logging.error(f"試行{i+1}タイムアウト")
        if i < max_try-1: time.sleep(wait)
    requests.post(WEBHOOK, json={"text": "KPI自動更新が失敗しました"})
    return False

run_retry("kpi_dashboard.py")

# タスクスケジューラー登録(管理者権限で):
# schtasks /create /tn "KPI自動更新" /tr "python C:\scripts\kpi.py" /sc DAILY /st 09:00 /f
✅ 実行結果

タスクスケジューラーへの登録コマンドが生成されました。毎朝9時に自動実行され、エラー時は3回リトライ後にSlack通知が届きます。

このシステムが解決する課題

KPI指標をリアルタイムで可視化するダッシュボードを構築。この自動化が特に効果的な場面と、解決できる課題を整理します。

❌ よくある課題

  • KPIを毎月手動でExcelに入力してグラフを更新するのに時間がかかっている
  • データソースが複数あり、KPIの集計にミスが発生している
  • 経営層・担当者・現場で見たい粒度が異なるが、別々に作るのが大変
  • リアルタイム性がなく、数日前のデータを見て判断しなければならない

実務での活用シナリオ

業種・部門 活用方法と効果
経営ダッシュボード 売上・利益・顧客数などの経営KPIを毎朝自動更新。役員が出社前にKPIを確認できる体制に。
営業マネジメント 担当者別・製品別・エリア別の営業KPIをリアルタイムで可視化。週次営業会議の準備が不要に。
カスタマーサポート 対応件数・解決率・顧客満足度スコアを日次で自動集計してダッシュボードに反映。
製造ライン管理 稼働率・不良率・生産量を時間単位で収集してKPIダッシュボードに自動反映。
マーケティング GA4・広告配信・SNS指標を統合したデジタルマーケティングKPIダッシュボードを構築。

導入前後の効果比較

😫 Before ─ 従来の課題

KPIの集計・入力・グラフ更新を担当者が手動で実施。月次KPIの確定に3〜4日かかり、その間に経営判断が遅れるケースもあった。集計ミスによる数値の修正も頻発していた。

✅ After ─ Claude Code で解決

PythonがデータソースからKPIを自動集計し、openpyxlでExcelダッシュボードを自動更新。条件付き書式で目標達成・未達成を色分け表示。毎朝8時に自動実行し、出社時には最新KPIが確認できる。

導入のポイントと注意事項

💡 スムーズに運用するためのコツ

  • KPIの定義・計算式・データソースは別ファイルで文書化し、変更があった場合にすぐに把握できるようにする
  • スパークライン(小さなグラフ)をKPI一覧表に追加することで、トレンドを一目で把握できるダッシュボードになる
  • 前月比・前年比のカラー表示(増加→緑、減少→赤)は経営層に好まれるので、条件付き書式で必ず実装する
  • KPIのアラート機能(目標比70%以下になったらSlack通知)と組み合わせることで、見逃しゼロの管理体制が完成する

よくある質問(FAQ)

Q. BIツール(Tableau・Power BI)との違いは何ですか?
A. BIツールは高機能ですが導入コストと学習コストが高い。ExcelダッシュボードはExcelが使える人なら誰でも確認・メンテできるため、組織への浸透が早く、コストも低いのが強みです。
Q. 複数部門のKPIを1つのダッシュボードで管理できますか?
A. はい。Excelの複数シートを使い、1枚目に全社サマリー、各シートに部門別詳細を配置する構成が管理しやすいです。
Q. リアルタイム(1時間ごとなど)の更新は可能ですか?
A. タスクスケジューラやcronで実行間隔を設定することで、1時間ごとの自動更新が可能です。ただし、データソースの更新頻度に合わせた設定が必要です。

関連記事


制作実績サンプル

このクオリティの資料が、あなたの業務でも作れます

Aurant Technologies が実際に制作したコンサルティング資料(全82枚)のサンプルです。Claude Code × AI自動化により、従来の1/5のコスト・時間で同等品質を実現します。

タイトルスライド

タイトル・ダーク背景
3カラム分析

3カラム比較・分析
AI活用フロー

AI活用フロー図解
Before/After

Before/After比較
RFPテンプレート

構造化コンテンツ
全10枚を
見る

御社のテーマでこのレベルの資料を作成できます
制作費・納期・自動化プランは無料相談でご確認いただけます

📊 サンプル全10枚を見る →

Claude Codeの導入を、プロに任せてみませんか?

Aurant TechnologiesはClaude Code導入支援・業務自動化の専門チームです。
初回相談は無料。御社の課題をヒアリングして最適な自動化プランをご提案します。

無料相談を申し込む →


AT
aurant technologies 編集

上場企業からスタートアップまで、数多くのデータ分析基盤構築・AI導入プロジェクトを主導。単なる技術提供にとどまらず、MA/CRM(Salesforce, Hubspot, kintone, LINE)導入によるマーケティング最適化やバックオフィス業務の自動化など、常に「事業数値(売上・利益)」に直結する改善実績多数。

この記事が役に立ったらシェア: