Claude CodeでExcelを操作する方法 ― 公式xlsxスキル・MCP・アドインを実際に検証した
Claude CodeでExcel(.xlsx)を読み書きする3つの方法(公式xlsxスキル・MCPサーバー・Claude for Excelアドイン)を実際に試して比較。フリーランスエンジニアが受け取る崩れたExcelを整形する具体的な手順とハマりどころまで整理した。
エンジニアのゆとです。
クライアントから送られてくる稼働報告用のExcelが、毎回微妙に壊れている。対応者名のセルが結合されていて2行目以降が空欄、日付が「2026/9/1」だったり「9-3」だったりバラバラ、単価も「8,000円」とただの「8000」が混在。これを毎月手で直すのがずっと地味に嫌だった。
「Claude Codeに投げれば一発では」と思って調べ始めたが、検索結果に出てくる記事の大半が「Claude in Excel」(Microsoftアドイン)と「Claude Code」(ターミナルのCLIエージェント)を曖昧にごちゃまぜにしていて、結局どれをどう使えばいいのか分かりにくかった。この記事では実際に手を動かして、3つの方法の違いと、自分が踏んだハマりどころまで整理する。
まず結論 — 3つの「ClaudeでExcel」の違い
| 方法 | 実体 | 向いている場面 | 向いていない場面 |
|---|---|---|---|
| Claude for Excel(公式アドイン) | Excel内のサイドバーからチャットでセルを操作するMicrosoft AppSource製品 | Excelを開いたまま数式の意味を聞く、ピボット的な集計をその場で試す | 大量ファイルの一括処理、Gitで管理したい定型処理 |
| Claude Code + 公式xlsxスキル | anthropics/skillsリポジトリで公開されているAgent Skill。pandas・openpyxlをベースに読み書き・数式・書式・グラフを扱う | ファイル単位のバッチ処理、崩れたフォーマットの整形、CSV化して他システムに渡す | Excel上でリアルタイムに触りながら会話したい場合 |
| Claude Code + MCP Excelサーバー | サードパーティ製MCPサーバー経由でExcel操作を関数呼び出し化したもの | 他のMCPツール(DB・API等)と組み合わせた自動化パイプラインに組み込みたい場合 | 単発の整形作業。セットアップの手間に見合わない |
結論だけ言うと、フリーランスエンジニアが「クライアントから来た崩れたExcelを整える」という自分のようなユースケースなら、公式xlsxスキル一択でいい。アドインはExcelを開いた状態が前提だし、MCPサーバーはこの程度の作業には大げさすぎる。
混同されがちな3つを整理する
検索上位の記事を10本近く読んで分かったのは、「Claude in Excel」と「Claude Code」を同じ記事内で行き来しながら説明しているケースが多いということだった。両方ともAnthropicが出しているのは事実だが、動いている場所がまったく違う。
Claude for Excelは、Microsoft AppSourceから追加するExcelアドインで、Excelを開いた状態でサイドバーにチャットを表示し、ワークブックの内容を理解しながら数式を作らせたり修正させたりする。あくまでExcelというアプリケーションの中で完結する製品で、Word/PowerPoint版と同じ系譜にある。
一方Claude Codeは、ターミナルで動くAIエージェント。Excelファイルをそのまま理解する機能は持っていないので、実体としては「Pythonスクリプトを書いて実行し、結果を報告する」という形でExcelを操作する。その「Pythonでどう操作するか」の定石をあらかじめまとめておいたのが、Anthropic公式のxlsxスキルという位置づけになる。
つまりアドインは「Excelの中にAIが来る」方式、Claude Codeは「AIがコードを書いてExcelの外から手を入れる」方式。前者はセル単位の対話、後者はファイル単位の一括処理に強い。ここを混同すると「Claude Codeでもアドインみたいにセルをクリックしながら対話できる」と誤解してハマる。
実際にやってみた — 崩れた稼働報告Excelを整形する
言葉で説明するより手を動かした方が早いので、自分が実際に受け取るタイムシートに近い形でサンプルを作って試した。想定したのは以下のような崩れ方。
- 対応者名の列が結合セルになっていて、2行目以降が空欄
- 稼働日が「2026/9/1」「2026-09-02」「9/3」の3パターン混在
- 工数が「4.5」「6」「3.5h」のように単位ありなし混在
- 単価が「8,000円」「8000」「6,500円」のように表記ゆれ
Claude Codeのxlsxスキルは内部でpandasとopenpyxlを使う設計になっているため、同じ組み合わせで処理ロジックを組んで実行した。手順は次の3段階。
まず結合セルの解除。openpyxlで結合範囲を取得し、左上セルの値を範囲内の全セルにコピーしてからunmerge_cells()する。これをやらないとpandasで読み込んだ時に2行目以降が全部NaNになる。
for merged_range in list(ws.merged_cells.ranges):
min_col, min_row, max_col, max_row = merged_range.bounds
top_left_value = ws.cell(row=min_row, column=min_col).value
ws.unmerge_cells(str(merged_range))
for row in range(min_row, max_row + 1):
for col in range(min_col, max_col + 1):
ws.cell(row=row, column=col, value=top_left_value)
次に表記ゆれの正規化。日付はpandas.to_datetimeに通す前に「-」区切りを「/」区切りに統一し、年省略のものは補完。工数は末尾の「h」を除去してfloat化。単価は「,」と「円」を除去してint化する。
df["稼働日_正規化"] = df["稼働日"].apply(parse_date)
df["工数h_正規化"] = df["工数h"].apply(parse_hours)
df["単価_正規化"] = df["単価"].apply(parse_price)
実行結果はこうなった。
[2] 稼働日の表記ゆれ(修正前): ['2026/9/1', '2026-09-02', '9/3', '2026/09/04']
→ 正規化後: ['2026-09-01', '2026-09-02', '2026-09-03', '2026-09-01', '2026-09-04']
[3] 工数の表記ゆれ(修正前): ['4.5', '6', '3.5h', '8', '5']
→ 正規化後: [4.5, 6.0, 3.5, 8.0, 5.0]
[4] 単価の表記ゆれ(修正前): ['8,000円', '8000', '6,500円', '6500円']
→ 正規化後: [8000, 8000, 8000, 6500, 6500]
[5] 合計工数: 27.0h / 合計金額: 196,500円
5行程度のサンプルなら手で直しても大差ないが、これが月末にまとめて届く数十行〜数百行のシートになると効果が違ってくる。何より、パースルールをコードとして残しておけば「先月はこう直した」を毎回思い出さなくていい。ここがExcelアドインで都度チャットするのとの一番の違いだと感じた。
実際に踏んだハマりどころ
結合セルは「解除してから触る」の順番を間違えると値が消える
一番危なかったのがこれ。検証中、対応者の「姓」と「名」が別々のセルに入っている状態で、後から誤ってA〜B列を結合する処理を試したところ、結合範囲の中で左上セル以外の値が問答無用で消えた。openpyxlのmerge_cells()は仕様として「範囲内の値は左上セルだけ残し、他は破棄する」動きをする。
実務のExcelは大抵「最初から結合された状態」で送られてくるので、今回のように後から結合して壊すケースは稀かもしれない。ただ「一度結合セルに触る処理を書くと、意図しない列まで巻き込んで値を消しうる」というのは覚えておく価値がある。対処法は単純で、結合を解除・変更する処理の前に必ず元ファイルのコピーに対して作業し、merged_cells.rangesから値を読み取ってから初めてunmerge_cells()を呼ぶこと。
数式入りのセルはpandasで読むと「計算結果」しか見えない
競合記事でも指摘されていた点で、自分の検証でも同様の挙動を確認した。openpyxl.load_workbook()はデフォルトで数式の文字列(=SUM(A1:A10)など)を返すが、pandas.read_excel()はExcelが最後に保存した時点の計算結果しか返さない。数式そのものを保持したまま加工したい場合は、openpyxl側でdata_only=Falseのまま処理し、pandasに渡すのは値だけで十分な集計・分析フェーズに限定する必要がある。ここを混同すると「数式が消えた」と勘違いする。
ファイルサイズと機密データ
これは自分で大きいファイルを壊したわけではないが、実務上の注意点として書いておく。数十MBを超えるExcelをそのまま丸ごと読み込ませると処理が重くなるので、必要な列・シートだけを先に絞ってから渡す方が安全。氏名や請求金額が入ったシートをAIに渡す運用にする場合は、Claude Codeのファイルアクセス範囲を作業ディレクトリ内に限定し、外部に送信されるデータの扱いを事前に確認しておくべきところ。
Claude Codeで公式xlsxスキルを使えるようにする
Anthropicがanthropics/skillsというリポジトリでdocx/pdf/pptx/xlsxのAgent Skillを公式に公開している。Claude Codeへの追加はプラグイン経由で行う。
# 1. マーケットプレイスとして登録
/plugin marketplace add anthropics/skills
# 2. document-skills プラグインをインストール(xlsxを含む)
/plugin install document-skills@anthropic-agent-skills
インストール後は、通常のプロンプトでExcelファイルのパスを渡すだけでスキルが自動的に参照される。「このExcelを整形して」と頼むだけで、スキル側がpandas/openpyxlを使った処理方針を組み立ててくれる形だ。ローカル環境にopenpyxlとpandasが入っていない場合は、Claude Codeがpip installから提案してくることが多い。
使い分けの早見表
- Excelを開いた状態で数式の意味を聞きたい、ピボットっぽい分析をその場で試したい → Claude for Excelアドイン
- クライアントから届いた崩れたファイルを毎月同じルールで整形したい、CSVに変換して他システムに流したい → Claude Code + xlsxスキル
- 複数のツール(DB・SaaS API等)と繋いだ自動化パイプラインの一部としてExcel入出力を組み込みたい → Claude Code + MCP Excelサーバー
自分のような1人で複数クライアントの請求・稼働管理をこなすフリーランスの場合、月次で同じ整形作業が発生するなら、プロンプトをスキル化またはコマンド化しておくと2回目以降がほぼゼロ手間になる。



よくある質問
Claude for ExcelとClaude Codeのxlsxスキル、どちらも同じAnthropicアカウントで使えますか?
Claude for Excelは対応プランでのMicrosoft AppSource経由の利用、Claude Codeのxlsxスキルはコーディング用プランでの利用になる。契約している範囲によって使える方が変わるので、両方使いたい場合は自分の契約プランを確認しておくのが確実。
Google スプレッドシートには使えますか?
xlsxスキルは.xlsx/.xlsm/.csv/.tsvが対象。Google スプレッドシートを使う場合は一度Excel形式でエクスポートしてから渡すか、別途Google Sheets APIと組み合わせる構成にする必要がある。
数式を壊さずに集計だけしたいのですが
openpyxlでdata_only=Falseのまま数式を保持しつつ、集計に必要な部分だけpandasのDataFrameに変換するとよい。数式ごと書き換えたい場合は、保存前にLibreOffice等での再計算確認を挟むと事故が減る。
崩れたExcelを直す作業自体は地味だが、フリーランスとして複数の現場を掛け持ちしていると地味な作業ほど積み重なる。1回分の処理をコードとして残しておけば、来月の自分が同じ苦労をしなくて済む。それだけでも試す価値はあると思う。