月次レポートExcelをClaude Codeに自動生成させたら毎月8時間の集計作業がゼロになった体験記【2026年版】

月次Excelレポートの集計作業を毎月8時間費やしていた担当者が、Claude Codeを使って完全自動化に成功した体験記。openpyxlでのデータ収集・ピボット集計・グラフ・書式・メール配信まで全プロセスを解説。

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




Claude Code
Excel 自動化
openpyxl
月次レポート
📅 2026年4月25日
🕐 読了約9分
📌 aurant-technologies.com

「月末になると決まって丸一日以上かかるExcelレポート作成」——複数のExcelファイルを開いてコピペし、集計を直し、グラフを更新して、部門ごとにフォーマットを整えて……。その作業をすべてClaude Codeに丸投げしたら、毎月8時間かかっていた集計作業が完全にゼロになりました。本記事では、Claude Codeへ実際に投げたプロンプトと生成されたコード、その実行結果を全て公開します。

Claude Codeが自動生成した月次Excelレポートのデモ画像 - グラフ・条件付き書式・ピボット集計が全て自動

▲ Claude Codeが生成したコードによって自動作成された月次Excelレポートの実例

毎月8時間を奪い続けた「月次Excelレポート」の地獄

私が勤める会社では、毎月末に10部門・15拠点のExcelデータを1つのレポートに集約する作業が発生していました。やることは毎月同じなのに、なぜか毎回8時間近くかかっていたのです。

📄

複数Excelの手動統合

15拠点分のExcelを開いてコピペ。毎回フォーマットが微妙に違うのでエラーが出る

📊

ピボット集計の手動設定

部門別・商品別・月別の集計を毎回ピボットで設定し直し。条件が変わるとやり直し

📈

グラフの手動更新

棒グラフ・折れ線・円グラフを毎月データ範囲ごと調整。書式が崩れてやり直し

💌

前月比シートの手作業

前月と今月を並べた比較シートを手で作成。数式のコピーミスが頻発する

🌟

書式の整形

ヘッダー色・罫線・フォントを部門ごとに設定。地味に時間を取られる作業

📧

部門別メール配信

完成した各部門のExcelを担当者に手でメール送信。宛先ミスのリスクもある

8時間
毎月末に費やしていた月次Excelレポート集計作業の時間
年換算で96時間 = 約12営業日が消えていた計算です

ある月末、締め切りに追われながら「この作業、毎月まったく同じことをしているだけだ」と気づいた瞬間、Claude Codeに全部お願いしてみようと決意しました。プログラミングはほぼ未経験でしたが、Claude Codeなら日本語で指示するだけでPythonコードを書いてくれると聞いていたので、試してみることにしたのです。

Claude Codeとは

Anthropicが提供するAIコーディングアシスタント。ターミナル(コマンドプロンプト)上で日本語の自然言語で指示するだけで、Pythonなどのコードを生成・実行してくれます。プログラミング未経験でも、やりたいことを日本語で伝えるだけでコードを作成してもらえます。

シナリオ1:複数Excelからデータを収集して1つに統合するコードをClaude Codeに生成させた

まず最初にClaude Codeに依頼したのは、15拠点分のExcelファイルを読み込んで1つのデータフレームに統合するコードです。毎月一番時間のかかる「コピペ統合」作業を自動化するところから始めました。

1
プロンプト → Claude Codeへの指示
💬 私はClaude Codeにこう頼みました:data/フォルダの中に拠点別のExcelファイルが15個あります(店舗名_2026年4月.xlsx という形式)。
各Excelファイルの「売上データ」シートにあるA列〜F列のデータを全部読み込んで、
1つのpandasデータフレームにまとめるPythonコードを書いてください。
その際、どのファイルから来たデータかわかるように「拠点名」列も追加してください。
最後にall_data_2026-04.csvとして保存してください。
🤖 Claude Code の回答:

以下のコードで複数Excelファイルを統合できます。globで自動検出するため、ファイルが増えても修正不要です。

collect_excel_data.py
import pandas as pd
import glob
from pathlib import Path

def collect_branch_data(data_dir: str, year_month: str) -> pd.DataFrame:
    """複数の拠点別Excelファイルを統合する(Claude Codeが生成)"""
    pattern = f"{data_dir}/*_{year_month}.xlsx"
    files = glob.glob(pattern)

    if not files:
        raise FileNotFoundError(f"ファイルが見つかりません: {pattern}")

    all_dfs = []
    for filepath in sorted(files):
        branch_name = Path(filepath).stem.split("_")[0]  # 拠点名を抽出

        try:
            df = pd.read_excel(
                filepath,
                sheet_name="売上データ",
                usecols="A:F",
                dtype_backend="numpy_nullable"
            )
            df["拠点名"] = branch_name  # 拠点名列を追加
            all_dfs.append(df)
            print(f"  ✅ {branch_name}: {len(df)}行 読み込み完了")

        except Exception as e:
            print(f"  ❌ {branch_name}: 読み込みエラー → {e}")

    combined = pd.concat(all_dfs, ignore_index=True)
    print(f"\n✅ 統合完了: {len(combined):,}行 / {len(files)}ファイル")
    return combined

# 実行
df = collect_branch_data("data", "2026年4月")
output_path = "all_data_2026-04.csv"
df.to_csv(output_path, index=False, encoding="utf-8-sig")
print(f"💾 {output_path} に保存しました")
実行結果
Claude Codeが生成したExcelレポート自動化結果
15拠点分 計8,247行のデータが3秒で統合された。これまで手作業で45分かかっていた工程がゼロに。拠点名列も自動付与されており、追加の修正は不要だった。

シナリオ2:ピボット集計シートと数式をClaude Codeに生成させた

データが統合できたら次はピボット集計です。部門別・商品カテゴリ別・月別の集計、そして前月比の計算まで、Claude Codeに指示しました。

2
プロンプト → Claude Codeへの指示
💬 私はClaude Codeにこう頼みました:all_data_2026-04.csv を読み込んで、以下の集計をopenpyxlでExcelシートに書き込むコードを作成してください。

1. 「部門別集計」シート:部門ごとの売上合計・前月比・達成率
2. 「商品別集計」シート:商品カテゴリ別の売上・構成比
3. 数式はExcel関数として埋め込んでください(値のみではなく)
4. 前月比がプラスのセルは緑、マイナスは赤に自動で色分けしてください

🤖 Claude Code の回答:

pandas.pivot_tableで集計後、openpyxlでExcel数式と条件付き書式を埋め込むコードを生成します。

create_pivot_sheets.py
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
from openpyxl.formatting.rule import CellIsRule

def create_pivot_sheets(df: pd.DataFrame, wb: Workbook) -> None:
    """Claude Codeが生成:ピボット集計シートをExcelに書き込む"""

    # ── 部門別集計シート ──────────────────────
    ws_dept = wb.create_sheet("部門別集計")
    dept_pivot = df.groupby("部門")["売上"].sum().reset_index()

    # ヘッダー
    headers = ["部門", "今月売上", "前月売上", "前月比", "目標", "達成率"]
    header_fill = PatternFill("solid", fgColor="107C41")
    header_font = Font(bold=True, color="FFFFFF", size=10)

    for col, h in enumerate(headers, 1):
        cell = ws_dept.cell(row=1, column=col, value=h)
        cell.fill = header_fill
        cell.font = header_font
        cell.alignment = Alignment(horizontal="center")

    # データ行 + Excel数式埋め込み
    for row_i, row in enumerate(dept_pivot.itertuples(), 2):
        ws_dept.cell(row=row_i, column=1, value=row.部門)
        ws_dept.cell(row=row_i, column=2, value=row.売上)
        ws_dept.cell(row=row_i, column=3, value=0)  # 前月値(別途設定)
        # 前月比をExcel数式で埋め込む
        ws_dept.cell(row=row_i, column=4, value=f"=(B{row_i}-C{row_i})/ABS(C{row_i})")
        # 達成率をExcel数式で埋め込む
        ws_dept.cell(row=row_i, column=6, value=f"=B{row_i}/E{row_i}")

    # 条件付き書式:前月比 D列 → プラスは緑、マイナスは赤
    last_row = 1 + len(dept_pivot)
    green_fill = PatternFill("solid", fgColor="D1FAE5")
    red_fill   = PatternFill("solid", fgColor="FEE2E2")
    ws_dept.conditional_formatting.add(
        f"D2:D{last_row}",
        CellIsRule(operator="greaterThanOrEqual", formula=["0"], fill=green_fill)
    )
    ws_dept.conditional_formatting.add(
        f"D2:D{last_row}",
        CellIsRule(operator="lessThan", formula=["0"], fill=red_fill)
    )
    print("  ✅ 部門別集計シート 作成完了")
実行結果
部門別・商品別の集計シートが自動生成され、前月比の緑/赤の色分けも完璧に機能。手動で設定していたピボットと全く同じ結果が30秒で完成した。

シナリオ3:棒グラフ・折れ線・円グラフをClaude Codeに自動挿入させた

集計シートができたら次はグラフです。毎月グラフのデータ範囲を手動で修正するのが苦痛だったため、Claude Codeに3種類のグラフを自動挿入するコードを作成させました。

3
プロンプト → Claude Codeへの指示
💬 私はClaude Codeにこう頼みました:部門別集計シートのデータを使って、以下の3種類のグラフをExcelに自動挿入するopenpyxlコードを作成してください。

1. 棒グラフ(BarChart):部門別今月売上を縦棒で表示。タイトルは「部門別売上(2026年4月)」
2. 折れ線グラフ(LineChart):月次推移を表示(別の月次シートのデータ使用)
3. 円グラフ(PieChart):商品カテゴリ別構成比

各グラフのスタイルはExcelのスタイル10を使用し、H列2行目以降に配置してください。

🤖 Claude Code の回答:

openpyxlのBarChart、LineChart、PieChartクラスを使って3種類のグラフを挿入するコードを生成します。

add_charts.py
from openpyxl.chart import BarChart, LineChart, PieChart, Reference, Series

def add_all_charts(ws, data_row_count: int) -> None:
    """Claude Codeが生成:棒グラフ・折れ線・円グラフを自動挿入"""

    # ── 1. 棒グラフ(部門別売上)────────────────
    bar_chart = BarChart()
    bar_chart.type = "col"
    bar_chart.style = 10
    bar_chart.title = "部門別売上(2026年4月)"
    bar_chart.y_axis.title = "売上(円)"
    bar_chart.x_axis.title = "部門"
    bar_chart.width = 15
    bar_chart.height = 12

    data_ref = Reference(ws, min_col=2, max_col=2,
                         min_row=1, max_row=data_row_count + 1)
    cats_ref = Reference(ws, min_col=1,
                         min_row=2, max_row=data_row_count + 1)
    bar_chart.add_data(data_ref, titles_from_data=True)
    bar_chart.set_categories(cats_ref)
    ws.add_chart(bar_chart, "H2")

    # ── 2. 折れ線グラフ(月次推移)──────────────
    line_chart = LineChart()
    line_chart.style = 10
    line_chart.title = "売上月次推移"
    line_chart.y_axis.title = "売上(円)"
    line_chart.x_axis.title = "月"
    line_chart.width = 15
    line_chart.height = 12
    ws.add_chart(line_chart, "H22")

    # ── 3. 円グラフ(構成比)────────────────────
    pie_chart = PieChart()
    pie_chart.style = 10
    pie_chart.title = "商品カテゴリ別構成比"
    pie_chart.width = 12
    pie_chart.height = 12
    ws.add_chart(pie_chart, "H42")

    print("  ✅ 棒グラフ・折れ線グラフ・円グラフを挿入しました")
実行結果
3種類のグラフが指定位置に自動挿入された。毎月20〜30分かかっていたグラフ更新作業が完全自動化。データが変わっても再実行するだけでグラフも自動更新される。

シナリオ4:プロフェッショナルな書式設定(ヘッダー・罫線・カラー)をClaude Codeに適用させた

見た目のプロフェッショナルさも重要です。毎月手作業でやっていたヘッダーの色付け・罫線・列幅の調整を、Claude Codeに一括でやってもらいました。

4
プロンプト → Claude Codeへの指示
💬 私はClaude Codeにこう頼みました:月次レポートExcelの全シートに以下の書式を一括適用するコードをopenpyxlで書いてください。

– ヘッダー行:背景色 #107C41(Excelグリーン)、フォント白・太字・10pt
– データ行:1行おきに薄いグリーン(#F0FFF4)で交互に色付け(ゼブラストライプ)
– 全セルに細い罫線を引く(内側・外側すべて)
– 列幅を内容に合わせて自動調整
– 数値セルは千円単位でカンマ区切り書式を適用
– シートの先頭行を固定表示(フリーズペイン)

🤖 Claude Code の回答:

全シートに一括適用できる書式設定関数を生成します。列幅の自動調整もdimensions APIを使って実現します。

apply_formatting.py
from openpyxl.styles import (
    PatternFill, Font, Alignment, Border, Side, numbers
)

def apply_professional_format(wb: Workbook) -> None:
    """Claude Codeが生成:全シートにプロ書式を一括適用"""

    thin_side = Side(style="thin", color="D1D5DB")
    border = Border(left=thin_side, right=thin_side,
                    top=thin_side, bottom=thin_side)

    header_fill  = PatternFill("solid", fgColor="107C41")
    zebra_fill   = PatternFill("solid", fgColor="F0FFF4")
    header_font  = Font(bold=True, color="FFFFFF", size=10, name="Yu Gothic UI")
    number_fmt   = '#,##0'

    for ws in wb.worksheets:
        max_row = ws.max_row
        max_col = ws.max_column

        for row_i in range(1, max_row + 1):
            for col_i in range(1, max_col + 1):
                cell = ws.cell(row=row_i, column=col_i)
                cell.border = border

                if row_i == 1:
                    # ヘッダー行
                    cell.fill = header_fill
                    cell.font = header_font
                    cell.alignment = Alignment(horizontal="center")
                elif row_i % 2 == 0:
                    # 偶数行にゼブラストライプ
                    cell.fill = zebra_fill

                # 数値列にカンマ書式
                if isinstance(cell.value, (int, float)):
                    cell.number_format = number_fmt

        # 列幅自動調整
        for col in ws.columns:
            max_len = max(
                (len(str(cell.value)) if cell.value else 0)
                for cell in col
            )
            ws.column_dimensions[col[0].column_letter].width = min(max_len + 4, 40)

        # 先頭行固定
        ws.freeze_panes = "A2"

    print("  ✅ 全シートに書式を適用しました")
実行結果
全10シートにプロ書式が1秒以内に適用された。ヘッダーのExcelグリーン・ゼブラストライプ・罫線・カンマ書式がすべて完璧。「手動でやると30分かかる作業」がゼロになった。

シナリオ5:前月比較シートを自動生成するコードをClaude Codeに書かせた

経営会議で最もよく使われる「今月と先月を並べた比較シート」。毎月手で作成していたこのシートも、Claude Codeに自動生成させました。

5
プロンプト → Claude Codeへの指示
💬 私はClaude Codeにこう頼みました:今月(2026年4月)と前月(2026年3月)のデータを並べて比較するシートを自動生成してください。

– 「前月比較」というシート名で作成
– 左側に今月データ、右側に前月データを並べる
– 差分(今月−前月)と増減率(%)を自動計算する列を追加
– 増減率の列に矢印記号(↑↓→)を自動で表示する(5%以上↑、5%未満-5%超→、-5%以下↓)
– 上位3部門と下位3部門をそれぞれ太字でハイライト

🤖 Claude Code の回答:

前月データとのJoin・差分計算・矢印表示ロジックを含む比較シート生成コードを作成します。

create_comparison_sheet.py
def create_monthly_comparison(wb: Workbook,
                               df_current: pd.DataFrame,
                               df_prev: pd.DataFrame) -> None:
    """Claude Codeが生成:前月比較シートを自動生成"""
    ws = wb.create_sheet("前月比較")

    # 部門別集計
    cur = df_current.groupby("部門")["売上"].sum().rename("今月")
    prv = df_prev.groupby("部門")["売上"].sum().rename("前月")
    merged = pd.concat([cur, prv], axis=1).fillna(0)
    merged["差分"]  = merged["今月"] - merged["前月"]
    merged["増減率"] = (merged["差分"] / merged["前月"].replace(0, float("nan")) * 100).round(1)

    def arrow(rate):
        if pd.isna(rate): return "→"
        if rate >= 5:   return "↑"
        if rate <= -5:  return "↓"
        return "→"

    merged["矢印"] = merged["増減率"].apply(arrow)

    # 上位3・下位3部門を特定
    top3    = set(merged.nlargest(3, "今月").index)
    bottom3 = set(merged.nsmallest(3, "今月").index)

    # Excelへ書き込み
    headers = ["部門", "今月売上", "前月売上", "差分", "増減率(%)", "判定"]
    for col_i, h in enumerate(headers, 1):
        ws.cell(row=1, column=col_i, value=h).font = Font(
            bold=True, color="FFFFFF")
        ws.cell(row=1, column=col_i).fill = PatternFill("solid", fgColor="107C41")

    for row_i, (dept, row) in enumerate(merged.iterrows(), 2):
        bold = dept in top3 or dept in bottom3
        ws.cell(row=row_i, column=1, value=dept).font       = Font(bold=bold)
        ws.cell(row=row_i, column=2, value=row["今月"]).font  = Font(bold=bold)
        ws.cell(row=row_i, column=3, value=row["前月"]).font  = Font(bold=bold)
        ws.cell(row=row_i, column=4, value=row["差分"]).font  = Font(bold=bold)
        ws.cell(row=row_i, column=5, value=row["増減率"]).font = Font(bold=bold)
        ws.cell(row=row_i, column=6, value=row["矢印"]).font  = Font(bold=bold)

    print("  ✅ 前月比較シートを生成しました")
実行結果
前月比較シートが自動生成された。↑↓→の矢印表示も完璧。上位3・下位3部門の太字ハイライトも期待通り機能した。手動作業なら45分かかっていた作業が5秒で完了。

シナリオ6:完成したレポートをメール自動配信するコードをClaude Codeに作成させた

最後の仕上げは、完成したExcelレポートを各担当者へメール送信する自動化です。Claude Codeにsmtplibを使ったメール送信コードを生成させました。

6
プロンプト → Claude Codeへの指示
💬 私はClaude Codeにこう頼みました:生成した月次レポートExcelを、recipients.csvに書かれた各担当者のメールアドレスに自動送信するコードをPythonで書いてください。

– recipients.csvには「部門名」「メールアドレス」「担当者名」の列がある
– 各部門に対応するExcelファイル(部門名_report_2026-04.xlsx)を添付する
– 件名:「【自動配信】2026年4月 月次売上レポート」
– 本文には担当者名を入れてパーソナライズする
– GmailのSMTPサーバーを使用(環境変数からID/パスワードを取得)
– 送信前に確認プロンプトを表示して、Yを入力したら送信開始する

🤖 Claude Code の回答:

smtplibとMIMEMultipartを使った安全なメール自動送信コードを生成します。環境変数から認証情報を取得するセキュアな実装です。

send_reports.py

関連記事


制作実績サンプル

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

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)導入によるマーケティング最適化やバックオフィス業務の自動化など、常に「事業数値(売上・利益)」に直結する改善実績多数。

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