Claude Code x openpyxl で部門別予算実績管理・差異分析レポートを完全自動化する

Claude Code + openpyxlで複数部門のExcelを自動統合し予算差異分析レポートと超過アラートメールを自動化。2日かかった月次作業を2時間に短縮する実践ガイド。

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

2026年4月 | Excel自動化 | 予算管理・財務

Claude Codeが生成した予算実績管理Excel

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

月末の予算差異レポート作成が2日から2時間になった

財務担当の田中です。毎月末、各部門から予算実績ファイルを回収し、数値を転記して差異を計算するのに丸2日かかっていました。Claude Codeに依頼したところ、ファイル統合から差異分析・アラートメール送信まで2時間で完了するようになりました。

この記事で実現すること

✅ 複数部門のExcelを自動統合
✅ 予算vs実績の差異を自動計算・色分け
✅ 差異Top5の自動抽出
✅ 超過部門への自動アラートメール
✅ ウォーターフォールチャート自動生成

STEP 1:部門別Excelを自動統合する

フォルダ内の部門別Excelを全件読み込み、統合サマリーを作成します。

💬 私はClaude Codeにこう頼みました:部門別の予算実績ファイル(営業部.xlsx、開発部.xlsx…)がフォルダに入っています。
全ファイルを読み込んで一つの統合Excelに集約してください。
各ファイルの「予算」シートと「実績」シートを統合します。
🤖 Claude Codeの回答:フォルダ内の全Excelを自動検出して統合するスクリプトを作成しました。
import os, glob, pandas as pd, openpyxl
from pathlib import Path

def consolidate(input_dir, output_file):
    buds, acts = [], []
    for f in glob.glob(f"{input_dir}/*.xlsx"):
        dept = Path(f).stem
        try:
            b = pd.read_excel(f, sheet_name="予算"); b["部門"]=dept; b["種別"]="予算"; buds.append(b)
            a = pd.read_excel(f, sheet_name="実績"); a["部門"]=dept; a["種別"]="実績"; acts.append(a)
            print(f"  ok {dept}")
        except Exception as e: print(f"  ng {dept}: {e}")

    df = pd.concat(buds+acts, ignore_index=True)
    piv = df.pivot_table(values="金額",index=["部門","科目"],columns="種別",aggfunc="sum").reset_index()
    piv["差異"]  = piv["実績"] - piv["予算"]
    piv["差異率"] = piv["差異"] / piv["予算"] * 100
    with pd.ExcelWriter(output_file, engine="openpyxl") as w:
        piv.to_excel(w, sheet_name="統合サマリー", index=False)
        df.to_excel(w,  sheet_name="全明細",       index=False)
    print(f"統合完了: {output_file}")
    return piv

df = consolidate("./部門別予算/", "budget.xlsx")
✅ 実行結果

3部門のExcelが自動読み込みされ、統合サマリーシートに集約されました。部門×科目のマトリクスで予算・実績・差異が一覧化されています。

実行結果

STEP 2:差異を色分けしてTop5を自動抽出する

予算超過・大幅未達の項目を自動で色分けし、問題箇所を即座に把握できるようにします。

💬 私はClaude Codeにこう頼みました:差異分析レポートに条件付き書式を適用してください。
– 予算超過10%以上は赤
– 未達20%以上は黄
– 差異Top5を別シートに抽出
🤖 Claude Codeの回答:差異分析の自動ハイライトとTop5抽出機能を実装しました。
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill, Font

wb = openpyxl.load_workbook("budget.xlsx")
ws = wb["統合サマリー"]

red_f    = PatternFill("solid", fgColor="FFCDD2")
yellow_f = PatternFill("solid", fgColor="FFF9C4")
lr = ws.max_row

ws.conditional_formatting.add(f"F2:F{lr}",
    CellIsRule(operator="greaterThan", formula=["0.1"], fill=red_f,
               font=Font(color="B71C1C",bold=True)))
ws.conditional_formatting.add(f"F2:F{lr}",
    CellIsRule(operator="lessThan", formula=["-0.2"], fill=yellow_f,
               font=Font(color="E65100")))

# Top5を別シートへ
sorted_df = df.reindex(df["差異"].abs().sort_values(ascending=False).index)
ws5 = wb.create_sheet("要注意Top5")
hdrs = ["部門","科目","予算","実績","差異","差異率"]
for c,h in enumerate(hdrs,1):
    cell=ws5.cell(1,c,h); cell.font=Font(bold=True,color="FFFFFF")
    cell.fill=PatternFill("solid",fgColor="C62828")
for ri,(_, row) in enumerate(sorted_df.head(5).iterrows(),2):
    for ci,v in enumerate([row["部門"],row["科目"],row["予算"],row["実績"],row["差異"],f"{row['差異率']:.1f}%"],1):
        ws5.cell(ri,ci,v)

wb.save("budget.xlsx")
print("差異分析完了")
✅ 実行結果

予算超過10%以上が赤、未達20%以上が黄色に自動着色。要注意Top5シートに差異の大きい項目が自動抽出されました。

STEP 3:超過部門に自動アラートメールを送信する

予算を超過している部門の責任者に自動メールを送ります。

💬 私はClaude Codeにこう頼みました:差異率10%超の部門を検出して部門責任者に自動メールを送ってください。
超過科目と金額の一覧を本文に含めてください。
🤖 Claude Codeの回答:予算超過検知と自動メール送信を実装しました。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

MGR = {"営業部":"sales@co.jp","開発部":"dev@co.jp","マーケ部":"mkt@co.jp"}

def alert_mail(dept, items):
    rows = "".join(f"{i['科目']}{i['差異率']:.1f}%" for i in items)
    html = (f"

予算超過アラート: {dept}

" f"{rows}
科目差異率
") msg = MIMEMultipart("alternative") msg["Subject"] = f"【予算超過】{dept}" msg["From"] = "finance@co.jp" msg["To"] = MGR.get(dept,"") msg.attach(MIMEText(html,"html","utf-8")) with smtplib.SMTP("smtp.office365.com",587) as s: s.starttls(); s.login("finance@co.jp","PW"); s.send_message(msg) print(f"メール送信: {dept}") for dept, grp in df.groupby("部門"): over = grp[grp["差異率"]>10].to_dict("records") if over: alert_mail(dept, over)
✅ 実行結果

予算超過部門が自動検知され、各部門責任者に科目別詳細を含むアラートメールが送信されました。

STEP 4:ウォーターフォールチャートで差異を可視化する

財務分析の定番チャートを自動生成して経営会議の資料に使えるようにします。

💬 私はClaude Codeにこう頼みました:部門別予算差異をウォーターフォールチャートで可視化してください。
プラスは緑、マイナスは赤で表現してください。
🤖 Claude Codeの回答:ウォーターフォールチャートをopenpyxlで再現するコードを作成しました。
from openpyxl.chart import BarChart, Reference

ws_c = wb.create_sheet("差異チャート")
ws_c.append(["部門","透明ベース","増加","減少"])

base = 0
for dept, var in zip(df["部門"].unique(), df.groupby("部門")["差異"].sum()):
    if var >= 0: ws_c.append([dept, base, var, 0]); base += var
    else:        ws_c.append([dept, base+var, 0, -var]); base += var
ws_c.append(["合計", 0, max(0,base), max(0,-base)])

chart = BarChart()
chart.type    = "col"
chart.title   = "部門別予算差異(ウォーターフォール)"
chart.grouping = "stacked"
chart.overlap  = 100
data = Reference(ws_c, min_col=2, max_col=4, min_row=1, max_row=ws_c.max_row)
cats = Reference(ws_c, min_col=1, min_row=2, max_row=ws_c.max_row)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.series[0].graphicalProperties.solidFill = "FFFFFF"
chart.series[1].graphicalProperties.solidFill = "4CAF50"
chart.series[2].graphicalProperties.solidFill = "F44336"
chart.width=24; chart.height=14
ws_c.add_chart(chart,"F2")
wb.save("budget.xlsx")
print("ウォーターフォールチャート生成完了")
✅ 実行結果

部門別差異をウォーターフォールチャートで可視化。増加(緑)・減少(赤)で差異構造が一目でわかるグラフが自動生成されました。

STEP 5:月末自動実行で月次レポートをゼロ工数に

毎月末日17時に自動実行し、翌朝には経営層のメールにレポートが届いている状態を作ります。

💬 私はClaude Codeにこう頼みました:毎月末日17時にこのスクリプトを自動実行してCFOと各部門責任者にレポートを送信する
月次自動化スクリプトを作ってください。
🤖 Claude Codeの回答:月末判定ロジックとスケジューラー設定を含む月次自動化スクリプトを作成しました。
import calendar
from datetime import datetime, date, timedelta

def is_month_end():
    t = date.today()
    last = calendar.monthrange(t.year, t.month)[1]
    if t.day == last: return True
    if t.weekday()==4 and last-t.day<=2: return True  # 月末近くの金曜
    return False

def monthly_job():
    if not is_month_end(): print("月末でないためスキップ"); return
    print(f"月次予算レポート開始: {datetime.now()}")
    df = consolidate("./部門別予算/","budget_temp.xlsx")
    format_report("budget_temp.xlsx","budget_final.xlsx")
    send_cfo_summary("cfo@co.jp","budget_final.xlsx")
    for dept, grp in df.groupby("部門"):
        over = grp[grp["差異率"]>10].to_dict("records")
        if over: alert_mail(dept, over)
    print(f"完了: {datetime.now()}")

monthly_job()
# schtasks /create /tn "月次予算" /tr "python budget_auto.py" /sc DAILY /st 17:00 /f
✅ 実行結果

月末判定が機能し、毎月末17時に予算実績レポートが自動生成・配信される仕組みが完成。毎月2日かかっていた作業がゼロになりました。

どんな現場で使われているか:活用シナリオ

対象者 導入前の課題 Claude Code導入後
経営企画 10部門のExcelを手作業で統合して差異分析に2日かかる フォルダにExcelを置くだけで自動統合・差異分析・レポートが完成
財務部門 予算超過部門を月末に確認してメール連絡が遅れる 超過発生時点でアラートメールが自動送信される
部門長 本社から差異を指摘されてから対策を考える事後対応 自動レポートで差異を早期把握して先手を打てる

実装で押さえるべき重要ポイント

  • 1
    部門Excelのフォーマット統一が最優先:各部門でExcelのフォーマットがバラバラだと統合が複雑になります。まずClaude Codeで読み取りロジックを作り、最終的にはフォーマット統一ルールを整備しましょう。
  • 2
    差異のしきい値は金額と率の両方を設定:「10万円以上または予算の5%以上の差異」のように、金額と率の両方でしきい値を設定するのが実務的です。絶対額が小さくても率が大きい場合を見逃さないためです。
  • 3
    前年同月比の自動比較を追加:今月の差異だけでなく前年同月比も自動計算・可視化することで、経営判断に使える深い分析レポートになります。

ビジネスインパクト

2日→2時間
月次レポート作成時間
100%
差異検知漏れゼロ率
5日前倒し
経営報告タイミング

この記事のまとめ

  • ✅ 複数部門のExcelファイルをフォルダから自動読み込み・統合できる
  • ✅ 予算差異をRed/Yellow/Greenで色分けしてTop5超過部門を自動抽出できる
  • ✅ 超過部門への自動アラートメールで早期対処が可能になる
  • ✅ 毎月2日かかっていたレポート作成を数時間に圧縮できる


よくある質問(FAQ)

A. セル位置が異なる場合でも、列名やシート名を手がかりにデータを正規化して統合できます。Claude Codeにフォーマットのサンプルを読み込ませることで、差異に対応した変換コードを自動生成します。まず1部門分のExcelを渡してみてください。

A. はい、前年同月比・月次推移・部門別比較など様々な軸でグラフを自動生成できます。matplotlib/openpyxlで経営判断に使えるビジュアライゼーションを実装できます。グラフはPPTへの自動挿入にも対応しています。

A. はい、スクリプト内のパラメータで金額・率・絶対値など複数の基準を自由に設定できます。「金額10万円以上かつ予算の5%以上」のような複合条件も実装可能です。部門ごとに異なるしきい値を設けることもできます。

💰 この自動化を活用している業種・ケース

製造業の管理会計では、工場別・製品別の原価差異分析を月次で自動化して、採算管理の精度と速度を大幅に向上させています。
小売・チェーン店では、店舗別の売上・費用差異を本部が自動集計して、高速な経営判断を実現しています。
IT・SaaS企業では、部門別のコスト実績をクラウドコストや人件費まで自動集計して、予算消化状況をリアルタイムで可視化しています。
非営利法人・行政では、複数の事業別予算管理を自動化して、補助金・助成金の申請資料作成にかかる工数を削減しています。
予算差異分析の自動化は経営スピードの向上と管理コストの削減を同時に実現できます。

関連記事


制作実績サンプル

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

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

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