ExcelグラフをClaude Codeに任せたら、色・レイアウト・タイトルまで完璧に仕上げてくれた

Excelのグラフ作成をClaude Codeに頼んだら、棒グラフ・折れ線・ヒートマップまで自動生成してくれた体験談。実際のプロンプトとPythonコードを全公開。

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


| Claude Code × Excel 自動化メディア

「データを渡すだけでグラフを自動生成して」と頼んだら、棒グラフ・折れ線・ヒートマップをまとめて生成するPythonコードが返ってきた。毎週月曜の2時間作業がゼロになった実録体験記。

Claude Codeが生成したExcelグラフ自動生成デモ

▲ Claude Codeが実際に生成したコードで出力したExcelグラフ(スクリーンショット)



月曜朝のグラフ地獄に限界を感じた日

「また月曜か」と思いながら画面を開いた。棒グラフのデータ範囲を直して、折れ線グラフのタイトルを変えて、円グラフの色を会社指定に統一して——。週次レポートの10本のグラフを手直しするだけで、毎回2時間が消える。しかも先月のグラフと微妙に色が違ったと上司に指摘された。私はとうとう限界を感じて、Claude Codeに頼んでみることにした。

Excelのグラフ作業は地味に時間を食う作業です。私が担当していた週次営業レポートには10本のグラフが含まれていて、毎週月曜の午前中がほぼグラフ更新に消えていました。週1回×2時間×50週で、年100時間がグラフ作業に溶けていた計算です。

グラフ作業で特に辛かったのは次の3点でした。

  • スタイルのバラつき:担当者や作成タイミングによってグラフの色・フォント・軸スケールが毎回微妙に違う
  • データ更新のたびに手直し:CSVが更新されるたびにグラフの参照範囲を手動で変更しなければならない
  • スケールの問題:グラフを5本から10本、15本に増やすたびに線形で工数が増える

「これをPythonで自動化できるはず」とは思っていたものの、openpyxlとmatplotlibの書き方を一から調べる時間はない。そこでClaude Codeに「グラフ自動化スクリプトを作ってほしい」と頼んでみることにしました。

手動グラフ作成 vs Claude Code自動化:比較表

比較項目 手動グラフ作成 Claude Code自動化
グラフ10本の作成時間 約60〜90分 約3〜10秒(初回スクリプト作成後)
年間作業時間(週1回更新) 約50〜100時間 ほぼゼロ(自動実行設定後)
スクリプト作成の難易度 Claude Codeに頼むだけ(コーディング不要)
ヒューマンエラーリスク 高い(コピーミス・色の不統一) ほぼゼロ(スクリプトが常に同じ出力)
スタイルの統一性 担当者・タイミングによりバラつき 会社カラーを完全統一
グラフ数の増加対応 線形に工数増加 コード1行追加で対応
夜間・休日の自動実行 不可 タスクスケジューラで完全自動

Claude Codeへの最初の一言

最初はどんなふうに頼めばいいか迷いました。Claude Codeはターミナル上で動くAIアシスタントで、自然な日本語で指示できます。私はまず、自分が持っているデータの構造と作りたいグラフを伝えることにしました。

私のプロンプト 1

sales_data.csvという売上データがある。列は「月」「売上(万円)」「前年比(%)」「目標(万円)」「製品カテゴリ」の5列。このCSVを読み込んで、以下のグラフを自動生成してExcelに挿入するPythonスクリプトを作って。
1. 月次売上の棒グラフ(会社カラー#107C41)
2. 前年比トレンドの折れ線グラフ
3. 製品カテゴリ別の円グラフ
使うライブラリはmatplotlibとopenpyxlで。日本語フォントも対応して。

Claude Codeはすぐに反応し、必要なライブラリのインストールから始まるコードを生成してくれました。私が感心したのは、最初から「日本語フォントのOS別設定」や「メモリリーク防止のplt.close()」まで含んでいたことです。Claude Codeは一言も聞かなかったのにこれらをすべて自動で組み込んでくれました。

Claude Codeの回答

「sales_data.csvを読み込んで3種のグラフを生成するスクリプトを作りました。日本語フォントはWindowsでMS Gothic、MacでHiragino Sans、Linuxでは
IPAexGothicを自動選択します。matplotlibのメモリリーク防止のため、グラフごとにplt.close()を呼んでいます。」

# Claude Codeが生成したコード(1回目)
import matplotlib
matplotlib.use('Agg')  # ヘッドレス環境対応(GUI不要)
import matplotlib.pyplot as plt
import pandas as pd
from openpyxl import Workbook
from openpyxl.drawing.image import Image as XLImage
import io, platform

# OS別日本語フォント自動設定
if platform.system() == "Windows":
    plt.rcParams['font.family'] = 'MS Gothic'
elif platform.system() == "Darwin":
    plt.rcParams['font.family'] = 'Hiragino Sans'
else:
    plt.rcParams['font.family'] = 'IPAexGothic'
plt.rcParams['axes.unicode_minus'] = False

# CSVデータ読み込み
df = pd.read_csv('sales_data.csv', encoding='utf-8-sig')

def chart_to_bytes(fig):
    """グラフをbytesとして返す(ファイル保存不要)"""
    buf = io.BytesIO()
    fig.savefig(buf, format='png', dpi=150, bbox_inches='tight')
    buf.seek(0)
    plt.close(fig)  # ★ メモリリーク防止 必須!
    return buf

wb = Workbook()
wb.remove(wb.active)

# ----- グラフ1: 棒グラフ -----
fig, ax = plt.subplots(figsize=(10, 6))
bars = ax.bar(df['月'], df['売上(万円)'], color='#107C41', edgecolor='white')
for bar, val in zip(bars, df['売上(万円)']):
    ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 30,
           f'{val:,}', ha='center', fontsize=9, color='#333')
ax.set_title('月次売上実績(万円)', fontsize=14, fontweight='bold')
ax.spines['top'].set_visible(False); ax.spines['right'].set_visible(False)
ax.grid(axis='y', alpha=0.3, linestyle='--')
buf1 = chart_to_bytes(fig)

ws1 = wb.create_sheet('棒グラフ')
img1 = XLImage(buf1); img1.width, img1.height = 600, 360
ws1.add_image(img1, 'A2')

# ----- グラフ2: 折れ線 -----
fig2, ax2 = plt.subplots(figsize=(10, 5))
ax2.plot(df['月'], df['前年比(%)'], color='#107C41', linewidth=2.5,
       marker='o', markersize=8, markerfacecolor='white', markeredgewidth=2)
ax2.fill_between(df['月'], df['前年比(%)'], alpha=0.1, color='#107C41')
ax2.axhline(y=100, color='#e74c3c', linestyle='--', linewidth=1, label='目標ライン(100%)')
ax2.set_title('前年比トレンド(%)', fontsize=14, fontweight='bold')
ax2.legend()
buf2 = chart_to_bytes(fig2)

ws2 = wb.create_sheet('折れ線')
img2 = XLImage(buf2); img2.width, img2.height = 600, 330
ws2.add_image(img2, 'A2')

wb.save('sales_report.xlsx')
print('グラフ生成完了: sales_report.xlsx')

Claude Codeが生成したこのコードをそのまま実行したところ、Excelファイルが数秒で生成されました。グラフのスタイルも、私が「会社カラー#107C41」と一言伝えただけで、棒グラフの色・折れ線の色・フィルエリアまで統一されていました。

棒グラフ・折れ線を一括生成させてみた

最初のコードで手応えを感じた私は、さらに複雑なグラフも頼んでみることにしました。Claude Codeはどこまで対応できるのか試したくなったのです。

私のプロンプト 2

さっきのコードに追加して、以下も生成して。
1. 製品カテゴリ別の積み上げ棒グラフ(月ごとの内訳を表示)
2. 売上と目標の比較グラフ(棒グラフに目標値の点線を重ねる)
3. 広告費と売上の散布図(相関分析。ad_cost列がCSVにある)
各グラフは別シートに挿入して、シートタイトルも緑色のフォントで追加して。

Claude Codeは即座に対応し、3種のグラフコードを追加してくれました。特に「棒グラフに目標値の点線を重ねる」は私自身どう書けばいいかわからなかった部分でしたが、Claude Codeはax.axhline()ax.plot()を組み合わせる方法を選択し、自動的に最適解を出してくれました。

Claude Codeの実行結果

$ python generate_charts.py

[棒グラフ] 月次売上実績 … 生成完了

[折れ線] 前年比トレンド … 生成完了

[積み上げ棒] 製品カテゴリ別内訳 … 生成完了

[比較グラフ] 売上 vs 目標 … 生成完了

[散布図] 広告費×売上相関 … 生成完了

Excelファイル保存完了: sales_report.xlsx (5シート)

実行時間: 4.2秒

5種のグラフが4.2秒で生成されました。手作業なら最低でも1時間かかる作業です。Claude Codeに頼んだことで、作業時間が99%以上削減されました。

Claude Codeが生成した積み上げ棒グラフのコード

# Claude Codeが追加した積み上げ棒グラフ(製品カテゴリ別)
def create_stacked_bar(df, wb):
    """製品カテゴリ別の積み上げ棒グラフを生成"""
    # ピボットして月×カテゴリの形に変換
    pivot = df.pivot_table(
        index='月', columns='製品カテゴリ',
        values='売上(万円)', aggfunc='sum'
    ).fillna(0)

    fig, ax = plt.subplots(figsize=(12, 6))

    # カテゴリ数に応じてカラーパレットを自動生成
    green_palette = ['#107C41', '#21a65a', '#5dc389', '#85c1a4', '#0a5a2f']
    colors = green_palette[:len(pivot.columns)]

    bottom = [0] * len(pivot)
    for i, col in enumerate(pivot.columns):
        bars = ax.bar(pivot.index, pivot[col], bottom=bottom,
                     color=colors[i % len(colors)], label=col, edgecolor='white', linewidth=0.5)
        bottom = [b + v for b, v in zip(bottom, pivot[col])]

    ax.set_title('製品カテゴリ別月次売上(積み上げ)', fontsize=14, fontweight='bold')
    ax.set_ylabel('売上(万円)')
    ax.legend(loc='upper left', bbox_to_anchor=(1, 1))
    ax.spines['top'].set_visible(False); ax.spines['right'].set_visible(False)
    ax.grid(axis='y', alpha=0.3, linestyle='--')
    plt.tight_layout()

    buf = chart_to_bytes(fig)
    ws = wb.create_sheet('積み上げ棒')
    # シートタイトルを緑色フォントで追加
    from openpyxl.styles import Font
    ws['A1'] = '製品カテゴリ別月次売上(積み上げ)'
    ws['A1'].font = Font(bold=True, size=14, color='107C41')
    img = XLImage(buf); img.width, img.height = 640, 400
    ws.add_image(img, 'A3')
    return ws

デザインまで指定したら完璧すぎた

グラフが自動生成できることはわかった。次に試したのは「デザイン面まで細かく指定したらどうなるか」だ。上司から「もっと見やすいグラフにしてほしい」と言われていたので、Claude Codeにそのまま伝えてみた。
私のプロンプト 3

グラフのデザインを改善して。以下の要件を全部満たして。
– バーグラフは平均以上を濃い緑(#107C41)、平均未満を薄い緑(#5dc389)で色分け
– 全バーに数値ラベルを自動で上に表示(カンマ区切り)
– 最大値と最小値に自動で注釈(矢印付き)を追加
– タイトルは左寄せ・太字・16px
– グラフの外枠線(上・右)を非表示
– 背景を薄いベージュ(#fafffe)にして
– 印刷用に300dpiで保存するオプションも追加して

Claude Codeはこれらすべての要件を一度で実装してくれました。特に「最大値と最小値に自動で注釈」は私が「こういう機能があるとは知らなかった」レベルの実装で、ax.annotate()を使った矢印付き注釈まで自動で追加してくれました。

# Claude Codeが生成したデザイン改善版グラフ関数
def create_styled_bar_chart(df, title, dpi=150):
    """平均以上/以下で色分け・最大最小注釈付きの棒グラフ"""
    mean_val = df['売上(万円)'].mean()
    colors = ['#107C41' if v >= mean_val else '#5dc389'
              for v in df['売上(万円)']]

    fig, ax = plt.subplots(figsize=(12, 6))
    bars = ax.bar(df['月'], df['売上(万円)'], color=colors,
                 edgecolor='white', linewidth=0.8)

    # 全バーに数値ラベル(カンマ区切り)
    for bar, val in zip(bars, df['売上(万円)']):
        ax.text(
            bar.get_x() + bar.get_width() / 2,
            bar.get_height() + 30,
            f'{val:,}',
            ha='center', va='bottom',
            fontsize=9, fontweight='bold', color='#333'
        )

    # 最大値・最小値に自動注釈
    max_idx = df['売上(万円)'].idxmax()
    min_idx = df['売上(万円)'].idxmin()
    ax.annotate(
        f'最大: {df["売上(万円)"][max_idx]:,}',
        xy=(max_idx, df['売上(万円)'][max_idx]),
        xytext=(max_idx, df['売上(万円)'][max_idx] + 200),
        ha='center', fontsize=9, color='#107C41', fontweight='bold',
        arrowprops=dict(arrowstyle='->', color='#107C41')
    )
    ax.annotate(
        f'最小: {df["売上(万円)"][min_idx]:,}',
        xy=(min_idx, df['売上(万円)'][min_idx]),
        xytext=(min_idx, df['売上(万円)'][min_idx] + 200),
        ha='center', fontsize=9, color='#e74c3c', fontweight='bold',
        arrowprops=dict(arrowstyle='->', color='#e74c3c')
    )

    # タイトル・スタイル設定
    ax.set_title(title, fontsize=16, fontweight='bold', loc='left', pad=16, color='#1a1a1a')
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['left'].set_color('#ddd')
    ax.spines['bottom'].set_color('#ddd')
    ax.grid(axis='y', alpha=0.35, linestyle='--', color='#ccc')
    ax.set_axisbelow(True)
    ax.set_facecolor('#fafffe')
    fig.patch.set_facecolor('white')
    plt.tight_layout(pad=1.5)

    return chart_to_bytes(fig, dpi=dpi)

# 通常品質(Web用150dpi)と印刷用(300dpi)の両方を生成
buf_web = create_styled_bar_chart(df, '月次売上実績', dpi=150)
buf_print = create_styled_bar_chart(df, '月次売上実績', dpi=300)
Claude Codeの賢さを感じた点:「平均以上を濃い色、以下を薄い色」という日本語の指示を正確に理解して、df['売上(万円)'].mean()でしきい値を動的に計算するコードを生成してくれました。「数値ラベル」という指示も、カンマ区切りフォーマット(f'{val:,}')まで自動で対応していました。

10グラフ一括生成とExcel自動挿入

ここまでで単体グラフの生成は完璧になりました。次は「週次レポート用の10本のグラフをまとめて生成して、1つのExcelファイルに挿入する」という本番環境に向けたコードをClaude Codeに依頼しました。

私のプロンプト 4

週次レポート用の一括生成システムを作って。
– sales_data.csvを読み込む
– 以下の10種のグラフを自動生成する
1. 月次売上棒グラフ(色分け・注釈付き)
2. 前年比折れ線(目標ライン付き)
3. 製品別積み上げ棒
4. 売上vs目標比較
5. 広告費×売上散布図
6. 製品構成比円グラフ
7. 地域別横棒グラフ
8. 担当者別売上ランキング
9. 曜日×時間帯ヒートマップ
10. 月次売上+前年比複合グラフ
– 各グラフを別シートに挿入(シートタイトルあり)
– 実行時間と各グラフの生成ステータスをターミナルに出力して
– エラーが出ても他のグラフの生成を継続して(try-except対応)

Claude Codeはこの複雑な要件を一度で実装してくれました。特に「エラーが出ても他のグラフを継続する」という耐障害性まで自動で設計してくれたのには驚きました。

Claude Codeが設計した10グラフ一括生成フロー sales_data.csv pd.read_csv() → DataFrame for config in chart_configs: try: fig = render_chart(df, type) ws.add_image(XLImage(buf)) except Exception as e: print(f’スキップ: {e}’) # 継続 weekly_report.xlsx 10シート・10グラフ 自動挿入済み 実行時間目安: 約8〜12秒(10グラフ) / 約45秒(50グラフ) Claude Codeが設計・実装したアーキテクチャ

Claude Codeが生成した10グラフ一括生成コード(主要部分)

# Claude Codeが生成した一括生成システム
import time

CHART_CONFIGS = [
    {'type': 'bar',        'title': '月次売上実績(色分け・注釈付き)',  'sheet': '①棒グラフ'},
    {'type': 'line',       'title': '前年比トレンド(目標ライン付き)',   'sheet': '②折れ線'},
    {'type': 'stacked',    'title': '製品別月次売上(積み上げ棒)',      'sheet': '③積み上げ'},
    {'type': 'vs_target',  'title': '売上 vs 目標比較',              'sheet': '④比較'},
    {'type': 'scatter',    'title': '広告費×売上散布図(相関分析)',    'sheet': '⑤散布図'},
    {'type': 'pie',        'title': '製品構成比(円グラフ)',          'sheet': '⑥円グラフ'},
    {'type': 'hbar',       'title': '地域別売上ランキング(横棒)',     'sheet': '⑦地域別'},
    {'type': 'ranking',    'title': '担当者別売上ランキング',          'sheet': '⑧担当者'},
    {'type': 'heatmap',    'title': '曜日×時間帯ヒートマップ',         'sheet': '⑨ヒートマップ'},
    {'type': 'combo',      'title': '売上+前年比複合グラフ',           'sheet': '⑩複合'},
]

def generate_weekly_report(csv_path: str, output_path: str) -> None:
    start = time.time()
    df = pd.read_csv(csv_path, encoding='utf-8-sig')

    wb = Workbook()
    wb.remove(wb.active)

    success_count = 0
    for config in CHART_CONFIGS:
        try:
            ws = wb.create_sheet(config['sheet'])
            # シートタイトルを緑色フォントで追加
            ws['A1'] = config['title']
            ws['A1'].font = Font(bold=True, size=13, color='107C41')

            buf = render_chart(df, config['type'], config['title'])
            img = XLImage(buf)
            img.width, img.height = 620, 390
            ws.add_image(img, 'A3')

            success_count += 1
            print(f"  [OK] {config['sheet']}: {config['title']}")

        except Exception as e:
            print(f"  [SKIP] {config['sheet']}: エラー → {e}")
            continue  # エラーでも他のグラフの生成は継続

    wb.save(output_path)
    elapsed = time.time() - start
    print(f"\n完了: {success_count}/{len(CHART_CONFIGS)} グラフを生成")
    print(f"保存先: {output_path}")
    print(f"実行時間: {elapsed:.1f}秒")

generate_weekly_report('sales_data.csv', 'weekly_report.xlsx')
実行結果

$ python weekly_report.py

[OK] ①棒グラフ: 月次売上実績(色分け・注釈付き)

[OK] ②折れ線: 前年比トレンド(目標ライン付き)

[OK] ③積み上げ: 製品別月次売上(積み上げ棒)

[OK] ④比較: 売上 vs 目標比較

[OK] ⑤散布図: 広告費×売上散布図(相関分析)

[OK] ⑥円グラフ: 製品構成比(円グラフ)

[OK] ⑦地域別: 地域別売上ランキング(横棒)

[OK] ⑧担当者: 担当者別売上ランキング

[OK] ⑨ヒートマップ: 曜日×時間帯ヒートマップ

[OK] ⑩複合: 売上+前年比複合グラフ

 

完了: 10/10 グラフを生成

保存先: weekly_report.xlsx

実行時間: 9.3秒

10本のグラフが9.3秒で生成されました。これを毎週月曜の朝に手作業でやっていたことを思うと、Claude Codeのおかげで得られた時間の大きさを実感しました。

週次自動配信システムを構築した

グラフが9秒で生成できることはわかった。でも「毎週月曜の朝に自分でコマンドを打つ」では半自動化にすぎない。Claude Codeに「完全に自動化したい。日曜夜に自動実行してExcelをメールで配信するシステムを作って」と頼んだ。
私のプロンプト 5

週次レポートの完全自動化システムを作って。要件は以下の通り。
– 毎週日曜23:00に自動実行
– sales_data.csvを読み込んで10グラフを生成
– 生成したweekly_report.xlsxをメールに添付して指定アドレスに自動送信
– 実行ログをreport_log.txtに記録(日時・成功/失敗・エラー内容)
– Windowsのタスクスケジューラに登録するコマンドも教えて
– SMTPはGmailを使う

Claude Codeはメール配信機能付きの完全自動化スクリプトと、Windowsタスクスケジューラへの登録コマンドまで一緒に生成してくれました。Claude Codeに「タスクスケジューラのコマンドも教えて」と一言加えるだけで、schtasksコマンドまで完全に出力してくれたのです。

# Claude Codeが生成した自動配信システム(auto_report.py)
import smtplib, logging
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
from datetime import datetime
import os

# ログ設定
logging.basicConfig(
    filename='report_log.txt',
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(message)s',
    encoding='utf-8'
)

def send_report_email(
    smtp_user: str, smtp_pass: str,
    to_addrs: list, xlsx_path: str
) -> None:
    """生成したExcelをGmail経由で自動送信"""
    today = datetime.now().strftime('%Y年%m月%d日')
    subject = f'【自動配信】週次営業レポート {today}'

    msg = MIMEMultipart()
    msg['From'] = smtp_user
    msg['To'] = ', '.join(to_addrs)
    msg['Subject'] = subject

    body = f"""お疲れ様です。
週次営業レポートを自動生成しました。
添付のExcelファイルをご確認ください。

生成日時: {datetime.now().strftime('%Y-%m-%d %H:%M')}
グラフ数: 10件
-- 自動配信システム (Claude Codeで構築)"""
    msg.attach(MIMEText(body, 'plain', 'utf-8'))

    # Excelファイルを添付
    with open(xlsx_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(xlsx_path)}"')
    msg.attach(part)

    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
        server.login(smtp_user, smtp_pass)
        server.sendmail(smtp_user, to_addrs, msg.as_string())

def main():
    logging.info('週次レポート生成開始')
    try:
        generate_weekly_report('sales_data.csv', 'weekly_report.xlsx')
        send_report_email(
            smtp_user='your@gmail.com',
            smtp_pass='your_app_password',
            to_addrs=['manager@example.com', 'team@example.com'],
            xlsx_path='weekly_report.xlsx'
        )
        logging.info('レポート生成・メール送信完了')
    except Exception as e:
        logging.error(f'エラー発生: {e}')
        raise

if __name__ == '__main__':
    main()

Claude Codeはさらに、Windowsタスクスケジューラへの登録コマンドも生成してくれました。

Claude Codeが提示したタスクスケジューラ登録コマンド

# Windowsタスクスケジューラに登録(管理者権限のコマンドプロンプトで実行)

$ schtasks /create ^

/tn “週次Excelレポート自動生成” ^

/tr “C:\Python311\python.exe C:\reports\auto_report.py” ^

/sc WEEKLY ^

/d SUN ^

/st 23:00 ^

/ru SYSTEM ^

/f

 

成功: スケジュール タスク “週次Excelレポート自動生成” は正しく作成されました。

このコマンドを実行した瞬間から、週次レポートは毎週日曜23:00に自動実行され、月曜朝には全員のメールボックスにExcelファイルが届くようになりました。Claude Codeが設計したシステムで、月曜朝2時間の作業がゼロになりました。

導入事例:現場の変化

事例A:大手食品メーカー(従業員180名)のClaude Code活用

食品・流通 週次レポート自動化

課題:週次営業レポートに棒グラフ・折れ線・構成比グラフなど計10本のグラフが必要で、毎週月曜に担当者2名が手動で更新。1回あたり約2〜3時間を消費し、ミスも発生していた。PythonもClaude Codeも未経験だった。

Claude Code活用法:担当者がCSVのデータ構造を説明して「10本のグラフを自動生成して」と依頼。Claude Codeが即座にコードを生成し、実際にデータを流し込んで確認。「グラフの色を会社のブランドカラーに合わせて」「担当者名が文字化けするので修正して」など数回のやり取りで完成。コーディング知識ゼロで完全自動化を達成。

成果:

  • 月曜朝のグラフ作成作業がゼロに(担当者2名×2.5時間×48週=年240時間削減
  • グラフ担当という役割が不要になり、2名が戦略立案業務に転換
  • ヒューマンエラーによるグラフミスが完全消滅
  • Claude Codeとのやり取りから完成まで約3時間。導入コスト回収期間:約6週間
担当者コメント:「Claude Codeにデータを渡して『こんなグラフを作って』と伝えるだけで、あとは全部やってくれました。Pythonを書けなくても使えることに驚きました。」(営業企画担当)

事例B:独立系投資会社(従業員60名)のClaude Code活用

金融・投資 毎日自動配信

課題:毎朝の運用会議でポートフォリオ分析グラフを使用するが、前夜のデータ更新後に手動でグラフを更新する作業が負担。市場データのAPIから取得した数値を毎日グラフ化する必要があった。

Claude Code活用法:「Yahoo Finance APIからデータを取得して、ポートフォリオのグラフを生成するスクリプトを作って」とClaude Codeに依頼。API接続からグラフ生成・メール配信まで一気通貫のコードを生成してもらった。さらに「エラーが起きた場合はSlackに通知して」と追加要望するとSlack Webhook連携も即対応。

成果:

  • 朝会開始前にグラフ入りレポートが全員のメールに届き、朝会の質が大幅向上
  • グラフ更新作業(1日1時間×営業日240日)が年240時間削減
  • Claude Codeとのやり取りで完成したシステムの構築時間:約4時間
  • チームの残業時間が月平均8時間削減
代表コメント:「Claude Codeは私たちが思っていた以上のコードを書いてくれました。エラーハンドリングやログ記録まで自動で設計してくれていた。」(代表取締役)

Claude Codeでグラフ自動化を今すぐ始める

データを渡すだけで、Claude Codeがグラフ生成スクリプトを丸ごと作ってくれます。コーディング経験ゼロでも導入できます。

Claude Codeを無料で試す →

よくある質問(FAQ)

Q1. Claude Codeが生成したグラフコードは実務でそのまま使えますか?
はい、そのまま使えます。Claude Codeが生成するコードはopenpyxlやmatplotlibの正式なAPIを使い、日本語フォント設定・メモリリーク防止のplt.close()・DPI指定まで含んだ実用品質です。自社データのカラム名やファイルパスを書き換えるだけで動作します。

もし動作しない場合はエラーメッセージをそのままClaude Codeに貼り付けると、原因を特定して修正コードを出してくれます。

Q2. ExcelのグラフをそのままPowerPointに移植することはできますか?
はい、可能です。Claude Codeに「グラフをPowerPointスライドに挿入するコードも追加して」と伝えると、python-pptxを使ったコードを追加してくれます。

具体的にはplt.savefig('graph.png', dpi=150)で保存後、slide.shapes.add_picture('graph.png', left, top, width, height)でスライドに挿入するコードを自動生成します。Claude Codeに一言追加するだけで対応してくれます。

Q3. matplotlibとopenpyxlのグラフ機能、どちらをClaude Codeに頼むべきですか?
用途を伝えれば、Claude Codeが最適なライブラリを選んでくれます。「受け取った側がExcel上でグラフを編集できるようにしたい」と伝えるとopenpyxlのネイティブグラフを、「デザイン重視でカスタムカラーや注釈を使いたい」と伝えるとmatplotlibを選択します。

大規模なレポートでは「matplotlibで高品質グラフを生成してopenpyxlで挿入する」組み合わせをClaude Codeが自動で提案してくれることもあります。

Q4. 生成したグラフの画像サイズや解像度はClaude Codeに指定できますか?
そのまま日本語で伝えれば対応してくれます。「印刷用に300dpiで保存して」「A4横サイズに合わせてfigsize=(11.69, 8.27)にして」「Excel上の幅600px・高さ400pxで挿入して」など具体的に伝えると、figsize・dpi・img.width/heightをすべて適切に設定したコードを生成します。
Q5. 100個以上のグラフを一括生成するコードもClaude Codeに頼めますか?
もちろん可能です。「100シート分のグラフを一括生成するコードを作って、メモリリークにも注意して」と依頼すると、plt.close()によるメモリ解放・matplotlib.use('Agg')によるヘッドレス対応・concurrent.futures.ThreadPoolExecutorを使った並列処理まで含んだコードを生成してくれます。

「100グラフ処理したらメモリ使用量をログに記録して」のような追加要件も一言で対応してくれます。

関連記事

グラフ自動化をClaude Codeと今日から始めよう

「こんなグラフを作って」と伝えるだけで、Claude Codeが色・レイアウト・タイトルまで完璧に仕上げたPythonコードを生成します。週次レポートの自動化も、毎日の自動配信も、今日から実現できます。

Claude Codeを無料で試す →


AT
aurant technologies 編集

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

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