この記事にはアフィリエイトリンクが含まれる場合があります。

Excelは2026年でも業務の中心ツールですが、毎月繰り返す集計、請求書からの転記、数式の組み立てに時間を奪われがちです。Claude APIをPythonから呼び出し、openpyxlでシートを読み書きすると、これらの定型作業を実用的なレベルで自動化できます。
この記事では、2026年5月時点のスタック(anthropic 0.100.0+Claude Sonnet 4.6+openpyxl)を前提に、請求書の明細抽出、売上シートの要約、数式生成、データ検証、Batch APIによる大量行処理、Tool useでのシート操作エージェント化までを、コード例付きで一気通貫に解説します。VBAマクロは今でも有効な選択肢ですが、本記事ではAPI経由のワークフローを主軸に据えます。
ClaudeでExcelを自動化するメリット
Claude APIをExcel業務に組み込むと、3つの実利があります。第一に、自然言語で渡したシート概要から数式や集計ロジックを提案させられます。第二に、PDFや別Excelからの転記をテキスト抽出+構造化として処理できます。第三に、Sonnet 4.6の品質と1Mコンテキストにより、数千行のシートでも全体傾向を一度に把握させられます。
VBAマクロとの違いは、APIなら同じワークフローをWeb、Slackボット、定期ジョブから呼び出せる点です。Excelファイル単体に閉じず、ファイル受信→自動処理→通知のパイプラインを構成できます。
2026年5月のスタックと推奨モデル
本記事のサンプルは以下を前提とします。価格と仕様はAnthropic公式のPricingとModels overviewを確認した内容です。
| 用途 | モデル | 入力/出力単価 | 備考 |
|---|---|---|---|
| 通常の集計・要約・数式生成 | claude-sonnet-4-6 | $3 / $15 per MTok | 1Mコンテキスト、業務用の主力 |
| 分類・タグ付け・大量バッチ | claude-haiku-4-5 | $1 / $5 per MTok | 200kコンテキスト、低コスト |
| 複雑な数式設計・財務監査 | claude-opus-4-7 | $5 / $25 per MTok | 1Mコンテキスト、難所だけに使う |
ライブラリはanthropic 0.100.0(2026年5月6日リリース)とopenpyxl 3.1系を使います。PDFを扱う場合はpypdfもしくはAnthropicのFiles APIを併用します。
python -m pip install -U "anthropic>=0.100.0" openpyxl pypdf python-dotenv
パターン1:請求書PDFから明細を抽出してExcelに転記
毎月届く請求書PDFから取引先名、明細、金額を抜き出してExcel台帳に追記する作業は、Claudeの構造化出力と相性が良い領域です。Sonnet 4.6に「JSON形式で返す」と明確に指示し、Pythonでパースしてopenpyxlで書き込みます。
from anthropic import Anthropic
from openpyxl import load_workbook
from pypdf import PdfReader
import json
# 1. 請求書PDFからテキストを抽出
pdf = PdfReader("invoice.pdf")
chunks = []
for page in pdf.pages:
extracted = page.extract_text()
if extracted:
chunks.append(extracted)
text = "\n".join(chunks)
# 2. Claudeに構造化抽出を依頼
client = Anthropic()
prompt = (
"次の請求書から vendor, issued_at, items[{name, qty, unit_price, amount}], total "
"の形式でJSONのみを返してください。\n\n" + text
)
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system="あなたは経理アシスタントです。請求書から明細を厳密にJSONで抽出します。",
messages=[{"role": "user", "content": prompt}],
)
data = json.loads(resp.content[0].text)
# 3. openpyxlで台帳シートに転記
wb = load_workbook("ledger.xlsx")
ws = wb["明細"]
for it in data["items"]:
ws.append([data["vendor"], data["issued_at"], it["name"], it["qty"], it["unit_price"], it["amount"]])
wb.save("ledger.xlsx")
JSON以外の文字が混ざる事故を避けたい場合は、Sonnet 4.6にTool useでスキーマを渡し、引数として構造化データを返させる方法も使えます。後述のパターンで扱います。
パターン2:売上シートをClaudeで要約してサマリ行を生成

月次レポートでは、シート末尾にコメント行として「総括」を入れたいことがあります。openpyxlで集計済みデータを取り出し、Sonnet 4.6に1〜2段落でまとめさせます。
from openpyxl import load_workbook
from anthropic import Anthropic
wb = load_workbook("sales_2026_04.xlsx")
ws = wb["月次"]
rows = [[c.value for c in row] for row in ws.iter_rows(min_row=1, values_only=False)]
table_text = "\n".join("\t".join(str(v) for v in r) for r in rows)
client = Anthropic()
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
system="あなたは売上分析担当です。日本語で簡潔にコメントします。",
messages=[{
"role": "user",
"content": f"次の月次売上表を200字以内で要約し、最も伸びたカテゴリと注意点を1点ずつ述べてください。\n\n{table_text}",
}],
)
ws.append(["総括", resp.content[0].text])
wb.save("sales_2026_04.xlsx")
シートが大きい場合は、pandasで集計してから渡すと入力トークンを大幅に節約できます。
パターン3:自然言語からExcel数式を提案させる
「A列商品名、B列販売数、C列単価。D列に売上金額、E列に売上ランキングを表示したい」のような依頼を投げると、Sonnet 4.6はXLOOKUP、FILTER、SORT、UNIQUE、LET、LAMBDAなどの動的配列関数を含めて妥当な数式を返します。生成された式は人間が必ず1回検算し、エッジケースを別シートで試してから本番シートに展開してください。
プロンプトには「使えるExcelバージョン」「日本語ロケール」「区切り文字(カンマかセミコロン)」を明示すると、無効な式を返す確率が下がります。
パターン4:データ検証ルールをAIで自動生成
入力シートの列ごとに「整数のみ」「日付のみ」「在庫マスタからの選択」といったData Validationを設定したい場合、Claudeに列定義を渡してルールJSONを返させ、openpyxlのDataValidationで適用すると、シート間で検証ルールを統一できます。
from openpyxl.worksheet.datavalidation import DataValidation
dv = DataValidation(type="list", formula1='"A,B,C"', allow_blank=True)
ws.add_data_validation(dv)
dv.add("F2:F1000")
Claudeには「openpyxlのDataValidationに渡す引数の組をJSONで返して」と指示し、コード側はそれをループで適用するだけにすると、レビューと運用が楽になります。
パターン5:Batch APIで数万行を半額で一括処理
問い合わせログのカテゴリ分類、商品名のクレンジング、レビュー文の感情分類など、行単位で独立した処理はMessage Batches APIに向きます。公式仕様では最大100,000リクエスト、256MBまで、標準価格から50%割引で、多くのバッチが1時間未満に完了します。
from anthropic import Anthropic
client = Anthropic()
requests = [
{
"custom_id": f"row-{i}",
"params": {
"model": "claude-haiku-4-5",
"max_tokens": 256,
"messages": [{"role": "user", "content": f"次のレビューを positive/neutral/negative に分類: {row}"}],
},
}
for i, row in enumerate(reviews)
]
batch = client.messages.batches.create(requests=requests)
print(batch.id)
完了後はclient.messages.batches.results(batch.id)で順次取得し、openpyxlで該当列に書き戻します。Haiku 4.5は分類用途で十分な品質を持ち、Batchの50%割引と組み合わせると数万行でも数百円規模で処理できます。
Tool useでスプレッドシート操作をエージェント化

もう一歩進めて、Claudeに直接「シートを編集してよい」権限を与えるのがTool useです。read_cell、write_cell、add_formula、add_sheetなどのツールを定義し、Sonnet 4.6が判断、Python側がopenpyxlで実行する分担にします。
tools = [
{
"name": "write_cell",
"description": "指定シートのセルに値または数式を書き込みます。",
"input_schema": {
"type": "object",
"properties": {
"sheet": {"type": "string"},
"cell": {"type": "string"},
"value": {"type": "string"},
},
"required": ["sheet", "cell", "value"],
},
}
]
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
tools=tools,
messages=[{"role": "user", "content": "D2:D100に売上=B列×C列の数式を入れて。"}],
)
判断はモデル、ファイル書き込みはアプリ側という分離が安全運用の基本です。書き込み前にバックアップを取り、ループの最大回数とトークン上限を必ず設定してください。
コストと注意点
同じテンプレートを何度も投げる夜間ジョブでは、システムプロンプトと共通参考データにPrompt Cachingを掛けると、2回目以降の入力コストが0.1倍まで下がります。AIが書いた数式やマクロは必ず人間レビューを通し、税務・会計・人事のような重要シートには直接書き込まず、別シートで確認してからコピーする運用が安全です。
機密情報をプロンプトに入れる前に、Workspace単位のデータ取り扱い設定や、社内ガイドラインの「外部APIに送ってよい列・送ってはいけない列」を整理しておくと安心です。
まとめ
2026年5月のExcel自動化は、openpyxlでデータの入出力を担い、Claude Sonnet 4.6を集計・要約・数式生成のエンジン、Haiku 4.5とBatch APIを大量処理、Tool useをエージェント化レイヤーとして組み合わせるのが現実解です。まずは1つの定型業務に絞って実装し、レビューフローまで含めて回せたら、横展開で一気に成果が伸びます。
Claude API × Python × Excelを体系的に学ぶ
業務自動化とAIエージェント開発を実践形式で学べるUdemy講座を公開しています。