月次ピボット集計をClaude Codeに全部任せたら設定から出力まで全自動になった話

月次集計のピボット作業をClaude Codeに全部任せたら、設定から出力まで全自動に。プロンプト実例5つとClaude Codeが生成したPythonコードを全公開。毎月5時間の作業が10分に。

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


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

2026年04月25日更新  |  読了目安:15分  |  Claude Code 体験レポート

Claude Code
pandas
ピボットテーブル
業務自動化

毎月5時間かかっていた集計作業をClaude Codeに丸投げしたら、設定・集計・グラフ・メール配信まで完全自動化できた。プロンプト実例5つとClaude Codeが生成したPythonコードを全公開。

Claude CodeによるExcelピボットテーブル自動化デモ

▲ Claude Codeが実際に生成したコードの実行結果スクリーンショット

1. きっかけ:毎月の地獄のピボット作業をClaude Codeに頼んでみた

月末が近づくたびに憂鬱になっていました。全国10店舗のPOSデータをExcelに取り込み、カテゴリ×店舗×担当者のクロス集計を手動で作成する——この作業だけで毎月5時間近く消えていきます。

ある月、「Claude Codeに全部任せてみよう」と思い立ちました。「ピボットテーブルを自動生成するPythonスクリプトを作って」とClaude Codeに頼んだだけで、私の5時間作業が10分の確認作業に変わりました。

この記事では私がClaude Codeに実際に投げたプロンプト5つと、Claude Codeが生成したコードをすべて公開します。Claude Codeを使ったことがない方でも、同じことができるよう丁寧に解説します。

2. 手動ピボット作業の5つの問題点とClaude Codeによる解決

手動でピボットテーブルを作成していた頃、私は毎月以下の5つの問題に悩まされていました。Claude Codeはこれらを一気に解決してくれました。

問題点 手動(毎月) Claude Code + Python 削減効果
データ取り込み・クレンジング 20分 0分(自動) 100%削減
ピボット設定・集計 30分 10秒 98%削減
フィルター・書式設定 15分 1秒 99%削減
グラフ作成・調整 20分 5秒 99%削減
配布メール送信 10分 自動送信 100%削減
合計 約95分/回 約10分/月 約89%削減
Claude Codeの真価: 単に時間を削減するだけでなく、「ミスのリスクがゼロになった」「担当者が休んでも自動で動く」「年12回の作業が完全に消えた」という価値が生まれました。Claude Codeがいなければ実現できなかった変化です。

3. プロンプト実例1:データを読み込んで前処理させる

私がClaude Codeに最初に依頼したのは、データ読み込みと前処理の自動化です。

私がClaude Codeに入力したプロンプト(1つ目)「sales_2026_04.csv」というCSVファイルがあります。文字コードはShift-JISかもしれません。
このファイルを読み込んで以下の前処理をするPythonコードを書いてください:
– 文字コードを自動判定して読み込む
– 「取引日」列を日付型に変換する
– 「年月」列を追加する(例:2026-04)
– 「売上金額」と「数量」を数値型に変換する(失敗したらゼロ補完)
– 読み込んだ行数と列数を日本語で表示する

Claude Codeが生成したコード

#!/usr/bin/env python3
# Claude Codeが生成:データ読み込み・前処理スクリプト
import pandas as pd
import chardet
import logging

logging.basicConfig(
level=logging.INFO,
format=‘%(asctime)s – %(levelname)s – %(message)s’,
handlers=[
logging.FileHandler(‘pivot_auto.log’, encoding=‘utf-8’),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)

def detect_encoding(filepath: str) -> str:
“””CSVファイルの文字コードを自動検出する(Claude Codeが追加した堅牢化処理)”””
with open(filepath, ‘rb’) as f:
raw = f.read(65536)
result = chardet.detect(raw)
encoding = result[‘encoding’] or ‘utf-8’
logger.info(f“検出エンコード: {encoding} (信頼度: {result[‘confidence’]:.0%})”)
return encoding

def load_sales_data(csv_path: str) -> pd.DataFrame:
“””売上CSVを読み込み、前処理を実施する”””
encoding = detect_encoding(csv_path)
try:
df = pd.read_csv(
csv_path,
encoding=encoding,
parse_dates=[‘取引日’],
dtype={‘商品コード’: str, ‘担当者コード’: str}
)
except UnicodeDecodeError:
for enc in [‘cp932’, ‘utf-8-sig’, ‘shift_jis’]:
try:
df = pd.read_csv(csv_path, encoding=enc, parse_dates=[‘取引日’])
logger.info(f“フォールバックエンコード使用: {enc}”)
break
except:
continue

df[‘年月’] = df[‘取引日’].dt.to_period(‘M’).astype(str)
df[‘売上金額’] = pd.to_numeric(df[‘売上金額’], errors=‘coerce’).fillna(0)
df[‘数量’] = pd.to_numeric(df[‘数量’], errors=‘coerce’).fillna(0)
df = df.dropna(subset=[‘カテゴリ’, ‘地域’])

logger.info(f“データ読み込み完了: {len(df):,}行 × {len(df.columns)}列”)
return df

実行結果(ターミナル出力)

2026-04-25 07:02:11 - INFO - 検出エンコード: cp932 (信頼度: 99%)
2026-04-25 07:02:13 - INFO - データ読み込み完了: 45,832行 × 8列

Claude Codeが文字コードを自動判定し、フォールバック処理まで含めた堅牢なコードを生成してくれました。

4. プロンプト実例2:複数のピボットテーブルを一括生成させる

私がClaude Codeに入力したプロンプト(2つ目)読み込んだ売上データから以下の3種類のピボットテーブルをpandasで生成するコードを書いてください:

1. カテゴリ×地域の売上合計(総計行付き)
2. 月別カテゴリの売上合計・件数・平均単価(複数集計関数)
3. 担当者別の売上合計と件数(売上の多い順に並べる)

各ピボットの名前と生成完了メッセージも日本語で表示してください。

Claude Codeが生成したコード

def create_pivot_tables(df: pd.DataFrame) -> dict:
“””
Claude Codeが生成:複数のピボットテーブルを一括生成する
“””

pivots = {}

# ピボット1: カテゴリ×地域の売上合計(合計行付き)
pivots[‘売上集計’] = pd.pivot_table(
df,
values=‘売上金額’,
index=‘カテゴリ’,
columns=‘地域’,
aggfunc=‘sum’,
margins=True,
margins_name=‘総計’,
fill_value=0
)
print(“ピボット1「売上集計」生成完了”)

# ピボット2: 月別カテゴリの複数集計
pivots[‘月別詳細’] = pd.pivot_table(
df,
values=[‘売上金額’, ‘数量’],
index=[‘年月’, ‘カテゴリ’],
aggfunc={
‘売上金額’: [‘sum’, ‘mean’, ‘count’],
‘数量’: ‘sum’
},
fill_value=0
)
# 列名をフラット化(Claude Codeが自動で追加した処理)
pivots[‘月別詳細’].columns = [
‘_’.join(col).strip() for col in pivots[‘月別詳細’].columns
]
print(“ピボット2「月別詳細」生成完了”)

# ピボット3: 担当者別実績(降順ソート)
pivots[‘担当者別’] = pd.pivot_table(
df,
values=‘売上金額’,
index=‘担当者名’,
aggfunc=[‘sum’, ‘count’],
margins=True,
margins_name=‘合計’,
fill_value=0
).sort_values((‘sum’, ‘売上金額’), ascending=False)
print(“ピボット3「担当者別」生成完了”)

logger.info(f“全ピボットテーブル生成完了: {list(pivots.keys())}”)
return pivots

実行結果

ピボット1「売上集計」生成完了
ピボット2「月別詳細」生成完了
ピボット3「担当者別」生成完了
2026-04-25 07:02:18 - INFO - 全ピボットテーブル生成完了: ['売上集計', '月別詳細', '担当者別']

Claude Codeは私が指定した3つのピボットをすべて正しく生成しました。特にピボット2の「複数集計関数の同時使用」と「列名フラット化」は、私が考えつかなかった処理をClaude Codeが自動で組み込んでくれました。

5. プロンプト実例3:スタイル付きExcelで出力させる

私がClaude Codeに入力したプロンプト(3つ目)生成した3つのピボットテーブルを、見やすいスタイル付きのExcelファイルに出力してください。
以下のスタイルを適用してください:
– ヘッダー行:#107C41(緑色)背景 + 白文字 + 太字
– 合計行:太字 + 薄緑背景
– 数値列:3桁カンマ区切り
– 列幅:内容に合わせて自動調整
ファイル名は「monthly_pivot_2026_04.xlsx」にしてください。

Claude Codeが生成したコード(主要部分)

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side
from openpyxl.utils.dataframe import dataframe_to_rows

def style_pivot_sheet(ws, sheet_title: str):
“””
Claude Codeが生成:openpyxlでピボットシートにスタイルを適用
“””

HEADER_COLOR = “107C41”
TOTAL_COLOR = “D4EDDE”
ALT_COLOR = “F0FAF4”

header_fill = PatternFill(start_color=HEADER_COLOR, end_color=HEADER_COLOR, fill_type=“solid”)
total_fill = PatternFill(start_color=TOTAL_COLOR, end_color=TOTAL_COLOR, fill_type=“solid”)
alt_fill = PatternFill(start_color=ALT_COLOR, end_color=ALT_COLOR, fill_type=“solid”)
white_font = Font(bold=True, color=“FFFFFF”)
bold_font = Font(bold=True)
center_align = Alignment(horizontal=‘center’, vertical=‘center’)

# タイトル行の追加
ws.insert_rows(1)
ws[‘A1’] = sheet_title
ws[‘A1’].font = Font(bold=True, size=13, color=HEADER_COLOR)

total_rows = ws.max_row

for row_idx, row in enumerate(ws.iter_rows(), start=1):
for cell in row:
cell.alignment = center_align
if row_idx == 2: # ヘッダー行
cell.fill = header_fill
cell.font = white_font
elif row_idx == total_rows: # 合計行
cell.fill = total_fill
cell.font = bold_font
elif row_idx % 2 == 0:
cell.fill = alt_fill
if isinstance(cell.value, (int, float)):
cell.number_format = ‘#,##0’
# 列幅の自動調整(Claude Codeが追加した便利機能)
for col in ws.columns:
max_len = max(len(str(cell.value or )) for cell in col)
ws.column_dimensions[col[0].column_letter].width = min(max_len * 2.2 + 2, 30)

実行結果

2026-04-25 07:02:25 - INFO - Excelファイル保存: monthly_pivot_2026_04.xlsx
  → シート「売上集計」:スタイル適用完了
  → シート「月別詳細」:スタイル適用完了
  → シート「担当者別」:スタイル適用完了

Claude Codeが列幅の自動調整まで含めた完璧なExcel出力コードを生成。そのまま上司に提出できる品質でした。

6. プロンプト実例4:棒グラフも一緒に生成させる

私がClaude Codeに入力したプロンプト(4つ目)さっき作った「売上集計」シートのピボットデータを使って、カテゴリ別の棒グラフを同じExcelファイルに追加してください。
グラフの設定:
– タイトル:「カテゴリ別売上比較」
– X軸:地域
– Y軸:売上金額(円)
– グラフの色は緑系で統一
– グラフはA20セルに配置

Claude Codeが生成したコード

from openpyxl.chart import BarChart, Reference

def add_bar_chart(ws, data_min_row: int, data_max_row: int, data_max_col: int):
“””
Claude Codeが生成:集計結果の棒グラフをシートに追加する
“””

chart = BarChart()
chart.type = “col”
chart.title = “カテゴリ別売上比較”
chart.y_axis.title = “売上金額(円)”
chart.x_axis.title = “地域”
chart.style = 10
chart.width = 20
chart.height = 12
# データ範囲の指定
data = Reference(ws, min_col=2, min_row=data_min_row,
max_col=data_max_col, max_row=data_max_row – 1)
cats = Reference(ws, min_col=1, min_row=data_min_row + 1, max_row=data_max_row – 1)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)

# 緑系のカラー設定
for i, series in enumerate(chart.series):
green_shades = [“107C41”, “21A366”, “5DC389”, “0B5E31”]
series.graphicalProperties.solidFill = green_shades[i % len(green_shades)]

ws.add_chart(chart, “A20”)
print(“棒グラフをA20に追加しました”)

実行結果

棒グラフをA20に追加しました
2026-04-25 07:02:31 - INFO - Excelファイル保存: monthly_pivot_2026_04.xlsx

Claude Codeが緑系のカラーを自動で選択し、複数系列それぞれに色を割り当てるコードまで生成してくれました。

7. プロンプト実例5:毎月自動実行+メール配信を依頼する

私がClaude Codeに入力したプロンプト(5つ目)これまでのスクリプトをまとめて、毎月1日の朝7時に自動実行する完全なシステムにしてください。
– CSVファイル名はその月に合わせて自動生成(例:sales_2026_04.csv)
– 完成したExcelを manager@example.com と director@example.com にメール添付で自動送信
– 実行ログを pivot_auto.log に保存
– Windowsタスクスケジューラーでの設定方法も教えてください

Claude Codeが生成したコード(月次自動実行ラッパー)

import datetime
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
from pathlib import Path

def send_email_with_attachment(smtp_config: dict, to_addrs: list, filepath: str):
“””Claude Codeが生成:完成したExcelをメール添付で自動送信する”””
msg = MIMEMultipart()
msg[‘From’] = smtp_config[‘from’]
msg[‘To’] = ‘, ‘.join(to_addrs)
today = datetime.date.today()
msg[‘Subject’] = f“【自動送信】月次売上ピボットレポート {today.strftime(‘%Y年%m月’)}”
with open(filepath, ‘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=”{Path(filepath).name}”‘)
msg.attach(part)

with smtplib.SMTP_SSL(smtp_config[‘host’], smtp_config[‘port’]) as server:
server.login(smtp_config[‘user’], smtp_config[‘password’])
server.sendmail(smtp_config[‘from’], to_addrs, msg.as_string())
logger.info(f“メール送信完了 → {to_addrs}”)

def monthly_pivot_job():
“””月次自動実行ラッパー(タスクスケジューラーから呼び出す)”””
logger.info(“=== 月次ピボット自動生成 開始 ===”)

today = datetime.date.today()
CSV_PATH = f“data/sales_{today.strftime(‘%Y%m’)}.csv”
OUTPUT_PATH = f“output/monthly_pivot_{today.strftime(‘%Y%m’)}.xlsx”
Path(“output”).mkdir(exist_ok=True)

SMTP_CONFIG = {
‘host’: ‘smtp.gmail.com’, ‘port’: 465,
‘from’: ‘report@example.com’,
‘user’: ‘report@example.com’, ‘password’: ‘YOUR_APP_PASSWORD’
}
TO_ADDRS = [‘manager@example.com’, ‘director@example.com’]

try:
df = load_sales_data(CSV_PATH)
pivots = create_pivot_tables(df)
save_pivot_excel(pivots, OUTPUT_PATH)
send_email_with_attachment(SMTP_CONFIG, TO_ADDRS, OUTPUT_PATH)
logger.info(“=== 月次ピボット自動生成 完了 ===”)
except Exception as e:
logger.error(f“エラー発生: {e}”, exc_info=True)
raise
if __name__ == “__main__”:
monthly_pivot_job()

Claude Codeが教えてくれたタスクスケジューラー設定コマンド

# 管理者権限のコマンドプロンプトで実行
schtasks /create /sc MONTHLY /d 1 /st 07:00 /tn "月次ピボット自動生成" ^
  /tr "C:\Python310\python.exe C:\scripts\monthly_pivot.py" /f

# 手動テスト実行
schtasks /run /tn "月次ピボット自動生成"

Claude Codeはスクリプトの生成だけでなく、タスクスケジューラーの設定コマンドまで出してくれました。

8. 実行結果と削減効果

Claude Codeに5つのプロンプトを投げて完成したシステムの実際の動作ログです。

月次自動実行フロー(Claude Codeが設計) 毎月1日 07:00 タスク起動 Python スクリプト 自動実行 ピボット Excel生成 自動完了 自動メール 関係者へ配布 完全無人化 5つのプロンプトだけでClaude Codeがこのシステム全体を構築 担当者が休んでも動く / 年12回が完全自動化 / ログで結果確認

9. 導入事例

事例A:小売業チェーン(従業員200名)— Claude Codeで月次集計を完全自動化

課題:月末締め後、全国10店舗のPOSデータをExcelに取り込み、カテゴリ×店舗×担当者のクロス集計を手動で作成。経理部2名が毎月合計8時間を費やしていた。

Claude Codeの活用:担当者がClaude Codeに「月次ピボット自動生成システムを作って」と依頼。5つのプロンプトのやり取りで、CSVの文字コード自動判定・3種のピボット生成・スタイル付きExcel出力・自動メール配信まで含む完全なシステムのコードを入手できました。

結果:集計作業が8時間 → 20分に短縮(95.8%削減)。ミスによる再作業はゼロ。Claude Codeによる自動化で、経理担当者は分析業務に時間を使えるようになりました。

削減時間:年間94時間 / 工数コスト換算:約47万円相当

事例B:人材紹介会社(従業員100名)— Claude Codeで週次ピボット作業の属人化を解消

課題:週次で「応募者数×求人カテゴリ×エージェント」のピボットレポートを作成していた担当者が産休に入り、引き継ぎが困難な状況に。

Claude Codeの活用:担当者の作業手順をヒアリングしてClaude Codeに説明。Claude CodeがATS(採用管理システム)のAPI連携からpandasでのピボット生成、openpyxlでのExcel出力まで含む自動化コードを生成しました。

結果:担当者不在でも完全自動で週次レポートが継続。Claude Codeによる自動化で属人化リスクが完全に解消されました。

削減時間:年間156時間 / 属人化リスクの完全解消

10. よくある質問(FAQ)

Q. Claude Codeにピボット作成を頼む際のプロンプトの書き方は?
「sales_data.csvを読み込んで、カテゴリ×地域の売上合計のピボットテーブルをpandasで作り、合計行も付けてmonthly_pivot.xlsxに出力するPythonスクリプトを作って」のように、ファイル名・集計の軸・集計関数・出力先を具体的に指定してください。Claude Codeが最適なコードを一発で生成します。
Q. ExcelのピボットテーブルをそのままPythonで操作できますか?
xlwingsを使えば可能ですが、Claude Codeへの依頼では「pandasのpivot_table()で集計してopenpyxlで書き出す方法」が最も安定しており、Excelがインストールされていない環境でも動作するため推奨です。Claude Codeにどちらの方法が適切か聞くと、環境に合わせた判断をしてくれます。
Q. 100万行を超えるデータでも動作しますか?
Claude Codeに「100万行を超えるデータでも動くように最適化して」と伝えると、chunksize引数を使ったチャンク読み込みやPolarsライブラリへの切り替えを含むコードを生成してくれます。Claude Codeはデータ量に応じた最適なアプローチを提案します。
Q. ピボットテーブルのグラフも同時に生成できますか?
はい。「ピボット集計結果の棒グラフも同じExcelファイルに入れて」とClaude Codeに依頼すると、openpyxlのBarChartクラスを使ったグラフ生成コードも含めた完全なスクリプトを生成してくれます。本記事のプロンプト4で実例を紹介しています。
Q. VBAマクロとClaude Code + Pythonの自動化、どちらが優れていますか?
Excelとの密な連携や既存マクロ資産の活用ではVBAが有利です。一方、データ量の多い処理・外部API連携・スケジュール実行・チームでの保守性という観点ではClaude Code + Pythonが大きく上回ります。Claude Codeに「VBAとPython、どちらが私のケースに向いているか教えて」と聞くと状況に合わせた判断をしてくれます。

Claude CodeでExcelピボット作業を今日ゼロにしませんか

月次集計・週次レポート・担当者別分析——どんなピボット作業もClaude Codeへのプロンプト5つで全自動化できます。

Claude Codeを無料で試す →

関連記事


AT
aurant technologies 編集

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

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