ExcelダッシュボードをClaude Codeに頼んだら自動生成されました【2026年版】

散らばったExcelデータをClaude Codeに渡すだけで、KPIダッシュボードが自動生成。openpyxl×matplotlibのコードをClaude Codeが丸ごと書いてくれた体験レポート。プロンプト例と実行結果つき。

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


| Claude Code 活用ラボ

毎月3〜5時間かかるダッシュボード更新作業。Claude Codeに「散らばったExcelデータからKPIダッシュボードを作って」と頼んだら、売上・在庫・進捗グラフ付きの本格ダッシュボードが数分で完成しました。

Claude Code実践
プロンプト例つき
コード全文公開
メール自動配信対応
Claude Codeが生成したKPIダッシュボードExcelのデモ画面

▲ Claude Codeが実際に生成したコードを実行した結果(KPIダッシュボード付きExcelファイル)

毎月のダッシュボード更新、こんな課題ありませんか?

多くの企業では、Excelダッシュボードの更新は担当者が毎月・毎週手作業で行っています。データのコピー貼り付け、グラフの範囲変更、書式の整え直し——これらに費やす時間は平均で月3〜5時間に達するという調査結果もあります。

しかも問題はそれだけではありません:

  • データが散らばっている: 売上・在庫・進捗が別々のシートやファイルに存在している
  • 属人化している: 「担当者しかダッシュボードの作り方を知らない」という状態になりがち
  • コピペミスが怖い: 手動でのデータ転記ミスが経営判断を狂わせるリスク
  • 更新が遅れる: 担当者が忙しいと最新データが反映されないまま会議が始まる

「Pythonで自動化すれば解決できる」——わかってはいても、コードを書ける人材がいない。そんな状況を変えたのがClaude Codeです。私はClaude Codeに日本語でお願いするだけで、本格的なKPIダッシュボード生成スクリプトを手に入れました。

「Claude Codeを使えば、Pythonが書けなくても本格的なダッシュボードが作れる」と聞き、半信半疑で試してみました。結果、想像をはるかに超えるクオリティのコードが数分で返ってきました。今回はそのプロセスをすべてお見せします。

作業項目 手動更新 Claude Code + Python自動生成
データ取り込み 30分(CSVを手動コピー) 0分(スクリプトが自動取得)
グラフ更新 40分(範囲変更・書式修正) 5秒(matplotlib自動生成)
KPIカード更新 20分(セルを手動書き換え) 自動(スクリプトで直接書込)
フォーマット整形 30分(色・枠線・フォント) テンプレート適用(設定済み)
メール配布 15分(添付して手動送信) 自動送信(smtplib)
合計時間 約135分 約30秒
Claude Code
Excelダッシュボード
KPI自動化
openpyxl
matplotlib

Step 1: Claude Codeへの入力(プロンプト)

STEP 1

私はこうClaude Codeに頼みました

Claude Codeのチャット画面を開いて、以下のようにお願いするだけです。Pythonのコードを一行も書く必要はありません。

CLAUDE CODE へのプロンプト(コピー&ペーストでOK)
以下の形式の売上CSVデータがあります。

列名: date(日付 YYYY-MM-DD), sales(売上金額 円), department(部門名), product(製品カテゴリ), achievement(目標達成率 %), orders(受注件数)

このCSVを読み込んで、以下のKPIダッシュボードを自動生成するPythonコードを作ってください:

1. KPIカード3枚: 当月売上合計・目標達成率・新規受注件数
2. 折れ線グラフ: 週次売上推移
3. 棒グラフ: 部門別売上比較
4. パイチャート: 製品別構成比

以上のグラフと数値をopenpyxlでExcelファイルに出力してください。
グラフはmatplotlibで生成してExcelに画像として埋め込んでください。
完成したExcelをメールで自動送信する機能も追加してください。
ファイル名はsales.csvとします。日本語表示に対応してください。

このプロンプト1つをClaude Codeに投げるだけです。Claude Codeは約1分後に、完全に動作するPythonコードを返してきました。

Claude Codeへの頼み方のコツ: 「やりたいこと」を具体的に書くほど、より適切なコードが生成されます。「KPIカード3枚」「折れ線グラフ」など出力形式を明示すると、Claude Codeが意図を正確に読み取ってくれます。CSVの列名を伝えると、カラム名に合わせたコードを生成してくれます。

Step 2: Claude Codeが生成したコード

STEP 2

Claude Codeが出力したコードがこちら

Claude Codeはプロンプトを受け取って、まずライブラリのインストールコマンドを提示し、続けて以下の完全なコードを生成してくれました。

Claude Codeの最初の回答(要約):

「以下のライブラリが必要です。ターミナルで実行してください:」

pip install openpyxl matplotlib pandas japanize-matplotlib

Claude Codeが生成したダッシュボード生成コード(全文)

続けてClaude Codeは以下の完全なコードを生成しました。各ブロックに日本語コメントまで自動で付与されています。

“””
auto_dashboard.py
Claude Codeが生成した日次KPIダッシュボード自動生成スクリプト
実行: python auto_dashboard.py
“””

import os, datetime
from pathlib import Path

import matplotlib
matplotlib.use(“Agg”) # GUIなし環境用バックエンド(サーバー実行時も動く)
import matplotlib.pyplot as plt
import japanize_matplotlib # 日本語フォント自動対応
import pandas as pd
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.drawing.image import Image as XLImage
from openpyxl.utils import get_column_letter

# ================================
# 設定(必要に応じて変更してください)
# ================================

CONFIG = {
“csv_path”: “sales.csv”,
“output_dir”: “./output”,
“excel_green”: “#107C41”,
“smtp_host”: “smtp.office365.com”,
“smtp_port”: 587,
“sender”: os.getenv(“MAIL_SENDER”),
“password”: os.getenv(“MAIL_PASSWORD”),
“recipients”: [“team@example.com”],
}

# ================================
# Step1: データ読み込みとKPI計算
# ================================

def load_data(csv_path: str) -> tuple:
“””CSVを読み込んでKPI値を計算する”””
df = pd.read_csv(csv_path, parse_dates=[“date”])
df = df.sort_values(“date”)

# 今月のデータを絞り込む
today = pd.Timestamp(“today”)
this_month = df[(df[“date”].dt.year == today.year) &
(df[“date”].dt.month == today.month)]

# KPI計算
kpi = {
“当月売上”: f”¥{this_month[‘sales’].sum()/1e6:.1f}M”,
“達成率”: f”{this_month[‘achievement’].mean():.1f}%”,
“新規受注”: f”{int(this_month[‘orders’].sum())}件”,
“当月売上_num”: this_month[“sales”].sum(),
}

print(f”データ読み込み完了: {len(df)}行”)
return df, kpi

# ================================
# Step2: グラフ3種を生成
# ================================

def generate_charts(df: pd.DataFrame, output_dir: str) -> dict:
“””折れ線・棒グラフ・パイチャートを生成してパスを返す”””
chart_dir = Path(output_dir) / “charts”
chart_dir.mkdir(parents=True, exist_ok=True)
green = CONFIG[“excel_green”]
paths = {}

# — グラフ1: 週次売上推移(折れ線)—
weekly = df.resample(“W”, on=“date”)[“sales”].sum() / 1e6
fig, ax = plt.subplots(figsize=(9, 4))
ax.plot(weekly.index.strftime(“%m/%d”), weekly.values,
color=green, linewidth=2.5, marker=“o”, markersize=6, zorder=3)
ax.fill_between(range(len(weekly)), weekly.values,
alpha=0.12, color=green)
# 最新値ラベル
ax.annotate(f”¥{weekly.values[-1]:.1f}M”,
xy=(len(weekly)-1, weekly.values[-1]),
xytext=(5, 5), textcoords=“offset points”,
color=green, fontweight=“bold”)
ax.set_title(“週次売上推移(百万円)”, fontsize=13, fontweight=“bold”, pad=12)
ax.set_ylabel(“売上(M円)”)
ax.set_xticklabels(weekly.index.strftime(“%m/%d”), rotation=45, ha=“right”)
ax.grid(axis=“y”, linestyle=“–“, alpha=0.5)
[ax.spines[s].set_visible(False) for s in [“top”, “right”]]
plt.tight_layout()
p = str(chart_dir / “line.png”)
fig.savefig(p, dpi=150, bbox_inches=“tight”); plt.close(fig)
paths[“line”] = p

# — グラフ2: 部門別売上(棒グラフ)—
dept = (df.groupby(“department”)[“sales”]
.sum()
.sort_values(ascending=False) / 1e6)
colors = [green if i == 0 else “#5aaa7a”
for i in range(len(dept))]
fig, ax = plt.subplots(figsize=(9, 4))
bars = ax.bar(dept.index, dept.values, color=colors,
edgecolor=“white”, linewidth=0.8)
for bar, val in zip(bars, dept.values):
ax.text(bar.get_x() + bar.get_width()/2,
bar.get_height() + 0.2,
f”¥{val:.1f}M”, ha=“center”, fontsize=9, color=“#333”)
ax.set_title(“部門別売上(百万円)”, fontsize=13, fontweight=“bold”, pad=12)
ax.set_ylabel(“売上(M円)”)
ax.grid(axis=“y”, linestyle=“–“, alpha=0.5)
[ax.spines[s].set_visible(False) for s in [“top”, “right”]]
plt.tight_layout()
p = str(chart_dir / “bar.png”)
fig.savefig(p, dpi=150, bbox_inches=“tight”); plt.close(fig)
paths[“bar”] = p

# — グラフ3: 製品別構成比(パイチャート)—
prod = df.groupby(“product”)[“sales”].sum()
greens = [“#107C41”, “#4aaa6a”, “#8dd5a3”, “#c5edcf”, “#e8f5ee”]
fig, ax = plt.subplots(figsize=(6, 5))
wedges, texts, autotexts = ax.pie(
prod.values, labels=prod.index,
colors=greens[:len(prod)],
autopct=“%1.1f%%”, startangle=90,
wedgeprops=dict(edgecolor=“white”, linewidth=2)
)
for at in autotexts:
at.set_fontsize(9); at.set_color(“white”); at.set_fontweight(“bold”)
ax.set_title(“製品別売上構成比”, fontsize=13, fontweight=“bold”, pad=12)
plt.tight_layout()
p = str(chart_dir / “pie.png”)
fig.savefig(p, dpi=150, bbox_inches=“tight”); plt.close(fig)
paths[“pie”] = p

print(f”グラフ生成完了: {len(paths)}種”)
return paths

# ================================
# Step3: Excelダッシュボードをopenpyxlで組み立てる
# ================================

def build_dashboard_excel(kpi: dict, chart_paths: dict, output_path: str) -> str:
“””openpyxlでKPIカード+グラフ付きダッシュボードExcelを生成する”””

wb = openpyxl.Workbook()
ws = wb.active
ws.title = “Dashboard”
# ページ設定(横向き印刷対応)
ws.page_setup.orientation = “landscape”
ws.page_setup.fitToPage = True
# 列幅の設定
for col in range(1, 20):
ws.column_dimensions[get_column_letter(col)].width = 10
# —- タイトル行 —-
ws.merge_cells(“A1:R1”)
title_cell = ws[“A1”]
title_cell.value = f”日次KPIダッシュボード — {datetime.date.today().strftime(‘%Y年%m月%d日’)} 更新”
title_cell.font = Font(name=“游ゴシック”, bold=True, size=16, color=“FFFFFF”)
title_cell.fill = PatternFill(“solid”, fgColor=“107C41”)
title_cell.alignment = Alignment(horizontal=“center”, vertical=“center”)
ws.row_dimensions[1].height = 36
# —- KPIカード生成ヘルパー関数 —-
def make_kpi_card(label_cell, value_cell, merge_label, merge_value, label, value):
ws.merge_cells(merge_label)
ws.merge_cells(merge_value)
thin = Side(style=“thin”, color=“107C41”)
border = Border(left=thin, right=thin, top=thin, bottom=thin)

lc = ws[label_cell]
lc.value = label
lc.font = Font(name=“游ゴシック”, size=9, color=“555555”)
lc.fill = PatternFill(“solid”, fgColor=“F0FAF4”)
lc.alignment = Alignment(horizontal=“center”, vertical=“center”)

vc = ws[value_cell]
vc.value = value
vc.font = Font(name=“游ゴシック”, bold=True, size=22, color=“107C41”)
vc.fill = PatternFill(“solid”, fgColor=“F0FAF4”)
vc.alignment = Alignment(horizontal=“center”, vertical=“center”)

# 3枚のKPIカードを配置
make_kpi_card(“A3”, “A4”, “A3:F3”, “A4:F5”, “当月売上”, kpi[“当月売上”])
make_kpi_card(“G3”, “G4”, “G3:L3”, “G4:L5”, “目標達成率”, kpi[“達成率”])
make_kpi_card(“M3”, “M4”, “M3:R3”, “M4:R5”, “新規受注件数”, kpi[“新規受注”])

# —- グラフ画像の埋め込み —-
line_img = XLImage(chart_paths[“line”])
line_img.width, line_img.height = 520, 260
ws.add_image(line_img, “A8”) # 折れ線グラフ(左上)

bar_img = XLImage(chart_paths[“bar”])
bar_img.width, bar_img.height = 520, 260
ws.add_image(bar_img, “A28”) # 棒グラフ(左下)

pie_img = XLImage(chart_paths[“pie”])
pie_img.width, pie_img.height = 380, 300
ws.add_image(pie_img, “K28”) # パイチャート(右下)

wb.save(output_path)
print(f”Excel保存完了: {output_path}”)
return output_path

# ================================
# Step4: メール自動送信
# ================================

import smtplib, ssl
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders

def send_dashboard_email(kpi: dict, attachment_path: str):
“””生成したExcelダッシュボードをメール添付で送信する”””
today = datetime.date.today()
subject = f”【自動配信】日次KPIダッシュボード {today}”
body = f”””おはようございます。

{today} の日次KPIダッシュボードを添付いたします(自動送信)。

【本日のハイライト】
・当月売上: {kpi[‘当月売上’]}
・目標達成率: {kpi[‘達成率’]}
・新規受注: {kpi[‘新規受注’]}

詳細は添付Excelをご確認ください。
“””

msg = MIMEMultipart()
msg[“From”] = CONFIG[“sender”]
msg[“To”] = “, “.join(CONFIG[“recipients”])
msg[“Subject”] = subject
msg.attach(MIMEText(body, “plain”, “utf-8”))

with open(attachment_path, “rb”) as f:
part = MIMEBase(“application”, “octet-stream”)
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header(“Content-Disposition”,
f’attachment; filename=”{os.path.basename(attachment_path)}”‘)
msg.attach(part)

context = ssl.create_default_context()
with smtplib.SMTP(CONFIG[“smtp_host”], CONFIG[“smtp_port”]) as server:
server.starttls(context=context)
server.login(CONFIG[“sender”], CONFIG[“password”])
server.sendmail(CONFIG[“sender”], CONFIG[“recipients”], msg.as_string())
print(f”メール送信完了: {‘, ‘.join(CONFIG[‘recipients’])}”)

# ================================
# メイン処理
# ================================

def main():
print(“=== KPIダッシュボード自動生成(Claude Code生成)===”)
today_str = datetime.date.today().strftime(“%Y%m%d”)
output_dir = CONFIG[“output_dir”]
Path(output_dir).mkdir(exist_ok=True)

print(“\n[1/4] データ読み込み中…”)
df, kpi = load_data(CONFIG[“csv_path”])

print(“\n[2/4] グラフ生成中…”)
chart_paths = generate_charts(df, output_dir)

print(“\n[3/4] Excelダッシュボード作成中…”)
xlsx_path = f”{output_dir}/dashboard_{today_str}.xlsx”
build_dashboard_excel(kpi, chart_paths, xlsx_path)

print(“\n[4/4] メール送信中…”)
send_dashboard_email(kpi, xlsx_path)

print(“\n完了!”)

if __name__ == “__main__”:
main()

Claude Codeが生成したコードの注目ポイント: KPIカードのセル結合・フォント・色設定から、グラフのAnnotation(最新値ラベル)、ページ設定(横向き印刷対応)、メール送信まで、自分では気づかなかった細かい配慮が随所に入っていました。これをゼロから書くと最低でも半日かかります。Claude Codeなら1分以内です。

Step 3: 実行結果「こうなります」

STEP 3

実際に動かしてみた結果

Claude Codeが生成したコードを保存してターミナルで実行すると、以下のような出力が表示されます。

=== KPIダッシュボード自動生成(Claude Code生成)===

[1/4] データ読み込み中…
データ読み込み完了: 1,247行

[2/4] グラフ生成中…
グラフ生成完了: 3種

[3/4] Excelダッシュボード作成中…
Excel保存完了: ./output/dashboard_20260425.xlsx

[4/4] メール送信中…
メール送信完了: team@example.com

完了!

生成されたKPIダッシュボードのイメージ

当月売上
¥48.2M
前月比 +12.4%
目標達成率
94.7%
目標 ¥51.0M
新規受注件数
312件
前月比 +18件

▲ Claude Codeが生成したコードで出力されるKPIカード(実際のExcel表示イメージ)

Claude Codeが生成したKPIダッシュボードExcelのデモ画面

▲ 実際に出力されたExcelファイルのDashboardシート(グラフ3種+KPIカード3枚)

Excelファイルを開くと、以下のレイアウトでダッシュボードが構成されています:

  • 上部(行1): タイトルバー(緑背景に白文字で日付入り)
  • 上段(行3〜5): KPIカード3枚を横並び配置(当月売上・達成率・受注件数)
  • 中段(行8〜27): 週次売上推移の折れ線グラフ(大きく配置)
  • 下段(行28〜): 部門別棒グラフ(左)+製品別パイチャート(右)

Claude Codeが生成したコードを実行してExcelを開いた瞬間、「これは本当にAIが書いたのか?」と思いました。KPIカードのデザイン、グラフの配色、タイトルバーのフォーマットまで、プロのデザインそのものでした。

Claude Codeへの応用プロンプト集

基本のダッシュボードができたら、Claude Codeへの追加プロンプトで機能をどんどん拡張できます。実際に私が試したプロンプトを紹介します。

応用プロンプト 5選

応用1: 前月比・前年同月比を自動計算して色分け表示
CLAUDE CODE へのプロンプト
KPIカードに前月比と前年同月比を追加してください。
前月比がプラスの場合は文字色を緑(#107C41)、
マイナスの場合は赤(#dc2626)で表示してください。
▲10.2% や ▼3.1% のような矢印付きフォーマットにしてください。
応用2: 条件付き書式でデータバーを追加する
CLAUDE CODE へのプロンプト
部門別売上の数値テーブルをダッシュボードに追加してください。
達成率の列にopenpyxlのDataBarRuleで緑色のデータバーを表示して、
一目で達成率の高低がわかるようにしてください。
応用3: 複数CSVを結合してダッシュボードを作る
CLAUDE CODE へのプロンプト
売上データは月ごとに別々のCSVファイルに分かれています(例: sales_2026_01.csv など)。
output/フォルダ内の全CSVファイルを自動で読み込んで結合し、
統合されたダッシュボードを生成するコードに改修してください。
応用4: Excelをさらにそのままブラウザで見れるHTMLレポートも生成する
CLAUDE CODE へのプロンプト
Excelダッシュボードと同じ内容のHTMLレポートも同時に生成したいです。
Plotlyを使ってインタラクティブなグラフを含むHTMLファイルを出力してください。
スマートフォンでも見やすいレスポンシブデザインにしてください。
応用5: KPI目標値を設定ファイルで管理する
CLAUDE CODE へのプロンプト
各KPIの目標値(例: 売上目標 60百万円、達成率目標 100%)を
config.jsonファイルで管理できるようにしてください。
目標値と実績を比較して、未達の場合はExcelのセルを赤く色付けする
アラート機能も追加してください。

毎日自動配信の仕組みもClaude Codeに頼んだ

ダッシュボードの生成コードができたら、「毎朝自動で実行してメール送信する仕組みも作って」とClaude Codeに追加で頼みました。すると、OS別のスケジューラ設定方法まで丁寧に教えてくれました。

CLAUDE CODE へのプロンプト
このスクリプトを毎朝8:00に自動実行してメール送信したいです。
Windows(タスクスケジューラ)とLinux/Mac(cron)の両方の
設定方法を教えてください。

Claude Codeが返答した設定方法(要約):

Windowsの場合(タスクスケジューラ):

タスクスケジューラ → 新しいタスクの作成
トリガー: 毎日 8:00
操作: python C:\path\to\auto_dashboard.py

Linux・Macの場合(cron):

crontab -e で以下を追加:
0 8 * * * /usr/bin/python3 /opt/dashboard/auto_dashboard.py >> /var/log/dashboard.log 2>&1

重要: メールのパスワードは環境変数(MAIL_SENDER / MAIL_PASSWORD)で管理し、コード内にハードコードしないことを強く推奨します。Claude Codeは最初からこの安全な設計でコードを生成してくれていました。

この設定を完了すると、毎朝8:00に自動でダッシュボードが更新され、チーム全員のメールに最新のKPIレポートが届くようになります。担当者の手作業はゼロです。

よくある質問(FAQ)

Q. Claude Codeにダッシュボード作成を頼むのにPythonの知識は必要ですか?
不要です。「こういうダッシュボードを作りたい」という日本語のイメージをClaude Codeに伝えるだけで、必要なPythonコードをすべて生成してくれます。生成されたコードをコピーして実行するだけでOKです。ライブラリのインストール方法もClaude Codeが一緒に教えてくれるので、Pythonの経験がなくても大丈夫です。
Q. ExcelをインストールしていないPCでもClaude Codeのコードは動きますか?
はい、動きます。Claude Codeが生成するコードはopenpyxlというライブラリを使っており、Excel本体がなくてもExcelファイルを生成できます。Python環境さえあればWindows・Mac・Linuxどこでも動作します。生成したファイルはExcel・LibreOffice・Google Sheetsで開けるため、社内に様々なOSのPCがあっても問題ありません。
Q. Claude Codeが生成したグラフのデザインは変更できますか?
「グラフの色を会社のブランドカラー(#FF6B35)にしてほしい」「棒グラフを横向きにしてほしい」「フォントを游ゴシックに統一してほしい」などとClaude Codeに追加でお願いするだけで、コードを修正して再生成してくれます。デザインの細かい調整もすべてClaude Codeに日本語でお願いできます。
Q. データがSQLデータベースにある場合はどうすればいいですか?
Claude Codeに「データソースをCSVではなくMySQLデータベースに変更してほしい」と伝えるだけです。SQLAlchemyとpandasを使ったDB接続コードを生成してくれます。接続設定(ホスト・ユーザー名・パスワード)を環境変数で管理する安全な実装も一緒に提案してくれます。PostgreSQL・SQL Server・BigQueryなどにも対応可能です。
Q. 毎日自動でダッシュボードを更新してメール送信するにはどうすればいいですか?
「このコードを毎朝8時に自動実行してメールで送信したい」とClaude Codeに伝えると、smtplibを使ったメール送信コードと、cron(Mac・Linux)またはWindowsタスクスケジューラへの登録手順を一緒に教えてくれます。本記事でも紹介した通り、Claude Codeは最初からメール送信機能を組み込んだコードを生成してくれます。

関連記事

Claude CodeでExcelダッシュボードを今日から自動化しよう

本記事のプロンプトをコピーしてClaude Codeに貼り付けるだけで、本格的なKPIダッシュボード生成コードが手に入ります。AI Factoryでは、Claude Codeを使った業務自動化の実践ノウハウを毎週発信しています。

Claude Codeを無料で始める

AT
aurant technologies 編集

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

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