メインコンテンツへ移動
, ,

【実践】ClaudeでExcel業務を自動化する方法:AI関数生成・VBAマクロ・データ分析

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

ClaudeとPythonでExcel業務を自動化するワークフローを示すフラットイラスト

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公式のPricingModels overviewを確認した内容です。

用途モデル入力/出力単価備考
通常の集計・要約・数式生成claude-sonnet-4-6$3 / $15 per MTok1Mコンテキスト、業務用の主力
分類・タグ付け・大量バッチclaude-haiku-4-5$1 / $5 per MTok200kコンテキスト、低コスト
複雑な数式設計・財務監査claude-opus-4-7$5 / $25 per MTok1Mコンテキスト、難所だけに使う

ライブラリは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で要約してサマリ行を生成

CSVとPDFをopenpyxlとClaude APIが処理しExcelへ書き戻すパイプラインの図

月次レポートでは、シート末尾にコメント行として「総括」を入れたいことがあります。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でスプレッドシート操作をエージェント化

Tool useでClaudeがread_cellとwrite_cellを呼び出してExcelを操作する概念図

もう一歩進めて、Claudeに直接「シートを編集してよい」権限を与えるのがTool useです。read_cellwrite_celladd_formulaadd_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講座を公開しています。

あわせて読みたい

Next Action

Python自動化を手元で動かす

メール、Excel、スクレイピング、定期実行まで、毎日の作業を小さく自動化する記事から始められます。

Python自動化を手元で動かす Python自動化の記事を読む