月次ピボット集計をClaude Codeに全部任せたら設定から出力まで全自動になった話
月次集計のピボット作業をClaude Codeに全部任せたら、設定から出力まで全自動に。プロンプト実例5つとClaude Codeが生成したPythonコードを全公開。毎月5時間の作業が10分に。
目次 クリックで開く
| Claude Code × Excel 自動化メディア
pandas
ピボットテーブル
業務自動化
毎月5時間かかっていた集計作業をClaude Codeに丸投げしたら、設定・集計・グラフ・メール配信まで完全自動化できた。プロンプト実例5つとClaude Codeが生成したPythonコードを全公開。
▲ Claude Codeが実際に生成したコードの実行結果スクリーンショット
1. きっかけ:毎月の地獄のピボット作業をClaude Codeに頼んでみた
ある月、「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%削減 |
3. プロンプト実例1:データを読み込んで前処理させる
私がClaude Codeに最初に依頼したのは、データ読み込みと前処理の自動化です。
このファイルを読み込んで以下の前処理をするPythonコードを書いてください:
– 文字コードを自動判定して読み込む
– 「取引日」列を日付型に変換する
– 「年月」列を追加する(例:2026-04)
– 「売上金額」と「数量」を数値型に変換する(失敗したらゼロ補完)
– 読み込んだ行数と列数を日本語で表示する
Claude Codeが生成したコード
# 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:複数のピボットテーブルを一括生成させる
1. カテゴリ×地域の売上合計(総計行付き)
2. 月別カテゴリの売上合計・件数・平均単価(複数集計関数)
3. 担当者別の売上合計と件数(売上の多い順に並べる)
各ピボットの名前と生成完了メッセージも日本語で表示してください。
Claude Codeが生成したコード
“””
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で出力させる
以下のスタイルを適用してください:
– ヘッダー行:#107C41(緑色)背景 + 白文字 + 太字
– 合計行:太字 + 薄緑背景
– 数値列:3桁カンマ区切り
– 列幅:内容に合わせて自動調整
ファイル名は「monthly_pivot_2026_04.xlsx」にしてください。
Claude Codeが生成したコード(主要部分)
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:棒グラフも一緒に生成させる
グラフの設定:
– タイトル:「カテゴリ別売上比較」
– X軸:地域
– Y軸:売上金額(円)
– グラフの色は緑系で統一
– グラフはA20セルに配置
Claude Codeが生成したコード
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:毎月自動実行+メール配信を依頼する
– CSVファイル名はその月に合わせて自動生成(例:sales_2026_04.csv)
– 完成したExcelを manager@example.com と director@example.com にメール添付で自動送信
– 実行ログを pivot_auto.log に保存
– Windowsタスクスケジューラーでの設定方法も教えてください
Claude Codeが生成したコード(月次自動実行ラッパー)
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()
# 管理者権限のコマンドプロンプトで実行 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つのプロンプトを投げて完成したシステムの実際の動作ログです。
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)
Claude CodeでExcelピボット作業を今日ゼロにしませんか
月次集計・週次レポート・担当者別分析——どんなピボット作業もClaude Codeへのプロンプト5つで全自動化できます。
関連記事