Amanity
Claude Code に Excel とスプレッドシート、どちらを作らせるか|15の操作と5つの観点で実測比較
ブログ›エンジニア向け2026-10-07約16分

Claude Code に Excel とスプレッドシート、どちらを作らせるか|15の操作と5つの観点で実測比較

対象読者: Claude Code などの AI エージェントに、表や資料を作らせ始めたエンジニア

Claude Code に表を作らせるとき、Excel にするか Google スプレッドシートにするかで迷うことがあります。どちらでも作れますが、AI エージェントに任せると、人が手で触るときとは違うところで差が出ます。

当社で両方を同じ条件で試したところ、差がはっきり出たのは次の点でした。

こんなとき向いているもの理由
新しい表を一気に作る・大量の行を書くExcel1000 行でも 0.04 秒。スプレッドシートは 1 回の操作に 0.5〜1.2 秒かかる
数式を含む表に、行を足したり消したりし続けるスプレッドシート行を挿入しても数式が追従する。Excel(openpyxl)は追従せず、合計が合わなくなった
計算結果を AI 自身に確かめさせたいスプレッドシート計算済みの値をそのまま読める。Excel は再計算の手間が要る
人から受け取ったファイルに記入して返すExcel(書き換え方に注意)保存し直すと図形が消える。スプレッドシートに変換するとフィルタが壊れた

どちらを選んでも共通して必要なのが、行番号を覚えたまま書き込まないことです。行を消したあとに、消す前に調べた行番号で書き込むと、両方とも合計の行を上書きしました。

この記事では、15 の基本操作と 5 つの観点について、Claude Code で実際に試した結果をまとめます。

検証の条件

  • エージェント: Claude Code(Linux 上で実行)
  • Excel: Python の openpyxl 3.1.5 で読み書きしました。新規作成には xlsxwriter、計算結果と見た目の確認には LibreOffice(画面を出さない headless モード)を使いました
  • スプレッドシート: Google Workspace を操作する CLI の gogcli(v0.12.0 に、行・列の削除コマンドを当社で追加したもの。以下 gog)を使いました。gog は Google Sheets API を呼ぶ道具で、認証は事前に済ませてあります
  • 比べる対象: 手元にある Excel ファイルと、Google ドライブ上のスプレッドシートです。OneDrive 上の Excel は対象外です

Codex など、ほかのエージェントでも考え方は同じです。この記事では、実際に確かめた Claude Code の結果だけを書きます。

Claude Code で Excel とスプレッドシートを操作する仕組み

Claude Code が表を書き換える経路。Excel は Claude Code から Python(openpyxl)で手元の xlsx を直接書く。認証は不要、1回 0.002〜0.005 秒、数式は計算されない。スプレッドシートは Claude Code から CLI(gog)でネット越しに Google Sheets API を呼び、ドライブ上のシートを操作する。認証が必要、1回 0.5〜1.2 秒、Google 側で計算される
Excel は手元のファイルを直接、スプレッドシートはドライブ上のファイルを API 越しに書き換える

Excel:手元のファイルを直接書き換える

Claude Code は、Python のスクリプトを書いて実行し、xlsx ファイルを直接読み書きします。ファイルは手元にあるので、認証は要りません。

openpyxl と xlsxwriter は pip で入ります。

bash
pip install openpyxl xlsxwriter
python
import openpyxl

wb = openpyxl.Workbook()
ws = wb.active
ws.append(["日付", "担当", "数量", "単価", "金額"])
ws.append(["9/1", "鈴木", 1, 1000, "=C2*D2"])
wb.save("売上.xlsx")

注意したいのは、openpyxl は数式を書くだけで、計算はしないことです。計算するのは、ファイルを開いた Excel や LibreOffice です。

スプレッドシート:ドライブ上のファイルを API で操作する

スプレッドシートは Google ドライブ上にあり、手元にはありません。Claude Code は、Sheets API を呼ぶ CLI を実行して、ネット越しに操作します。

bash
# 範囲をまとめて書き込む(値は JSON の 2 次元配列)
gog sheets update -a <アカウント> <スプレッドシートID> '売上!A1:E2' \
  --values-json '[["日付","担当","数量","単価","金額"],["9/1","鈴木",1,1000,"=C2*D2"]]'

# 読み取る(計算済みの値が返る)
gog sheets get -a <アカウント> <スプレッドシートID> '売上!A1:E2'

計算は Google 側で行われます。そのため、書いた直後に読むと、計算済みの値が返ってきます。

基本操作 15 項目の比較

よく使う操作を 15 に絞り、両方で試しました。時間は、1 回の操作にかかった実測値です。

操作Excel(openpyxl)スプレッドシート(gog)
新規作成できるできる
シートの追加・名前変更・削除できるできる
読み取りできる。数式の計算結果は読めないできる。計算済みの値が返る
セルの更新(1 セル・範囲)できるできる
行の追加(末尾)できるできる
行の追加(途中に挿入)できる。数式は追従しないできる。数式が追従する
行の削除できる。数式は追従しないできる。数式が追従する
列の追加・削除できるできる
検索して置換機能は無い。Python で 1 セルずつ置き換えるできる
数式と計算結果の読み返し数式は書ける。計算結果は LibreOffice で再計算しないと読めないできる
書式(太字・背景色)できるできる
表示形式(金額など)できるできる
セルの結合できるできる
見出し行の固定できるできる
CSV の取り込み・書き出しopenpyxl に機能は無い。Python の csv モジュールと組み合わせるできる
画像の挿入できる。画像ファイルを指定して置ける数式 =IMAGE("URL") で入れる。画像を誰でも開ける場所に置き、人がブラウザで「アクセスを許可」を押す必要がある
1 回の操作にかかる時間(参考)0.002〜0.005 秒0.5〜1.2 秒(行の削除で 4.8 秒かかった回もあった)

※ 行の追加は、末尾と途中で結果が違うため 2 行に分けています。末尾に足した行は、どちらも合計行の下に入り、合計の範囲に入りませんでした。

できることの範囲は、ほとんど同じでした。差が出たのは、数式の扱いと速さ、それに画像の挿入です。これを次の観点で詳しく見ていきます。

CSV の書き出しでも違いがありました。Excel(openpyxl と csv モジュール)では、数式が =C2*D2 という文字列のまま出力され、計算結果は入りません。スプレッドシートでは、表示形式が付いたままの値(¥2,000 など)が出力されます。どちらも、ほかのシステムに渡す前に中身を確かめる必要があります。

画像の挿入は、スプレッドシートだと公開の置き場所と人の許可が要る

Excel(openpyxl)は、画像ファイルを指定すればシートの上に置けます。手元の画像をそのまま使えます。

スプレッドシートは、API から画像を置く代わりに、セルに =IMAGE("画像のURL") という数式を書きます。画像を表示させるには、2 つの準備が要りました。

1 つめは、画像を誰でも開ける場所に置くことです。Google ドライブに置いただけの非公開の画像は、空欄のままでエラーも出ませんでした。同じ画像を「リンクを知っている全員」に公開すると、表示されました。

2 つめは、人がパソコンのブラウザでシートを開き、「アクセスを許可」を押すことです。数式を書き込んだ直後は、公開されている画像でも次のエラーになりました。

text
#REF! (Please use a desktop web browser to allow access to fetch data from external urls.)

つまり、AI エージェントだけでは画像入りのシートを完成させられず、画像の公開と、人の操作が 1 回ずつ必要になります。社外に出せない画像は、この方法では入れられません。

さらに、許可を出したあとで API からセルの値を読むと、表示された画像のセルも、空欄のセルも、どちらも値がありませんでした。AI が値を読むだけでは、画像が出ているかどうかを見分けられません。確かめるには、PDF にして見た目を見る必要があります(観点3)。

方法ごとの「できる/できない」

同じ Excel やスプレッドシートでも、使う道具によってできることが変わります。今回試した方法を並べます。

方法できることできないこと・注意点
openpyxl(Excel)読み書き・書式・シートの操作再計算しない。行の挿入・削除で数式が追従しない。保存し直すとテキストボックスが消える
xlsxwriter(Excel)新規作成。テキストボックスなども作れる既存のファイルは開けない
LibreOffice(Excel)再計算(0.92 秒)。PDF にして見た目を確認表を組み立てる道具ではない。確認用に使う
XML の直接書き換え(Excel)セルだけを書き換え、ほかは一切変えない行の挿入や書式の変更は、自分で XML を扱う必要がある
gog(スプレッドシート)値の読み書き・行と列の操作・書式・結合・固定・検索置換・CSV使える操作は CLI が用意したコマンドの範囲に限られる
Claude の Google ドライブ連携(スプレッドシート)読み取り。計算済みの値や結合セルも見えるセルは編集できない(変えられるのはファイル名と置き場所だけ)。1000 行のシートは途中までしか返らなかった

Claude の Google ドライブ連携は、Claude に Google ドライブをつなぐ機能です。スプレッドシートの中身を読むのには便利ですが、編集はできませんでした。編集させるなら、gog のような CLI か、Sheets API を使う道具が要ります。

観点1:既存ファイルを壊さずに直せるか

openpyxl で保存し直すと、テキストボックスが消える

人から受け取った Excel に記入して返す場面を想定しました。テキストボックス 2 つ、コメント、プルダウン(入力規則)、フィルタ、非表示の行を含むファイルを作り、1 つのセル(B2)に名前を書き込みました。

項目元のファイルopenpyxl で保存し直しXML を直接書き換えスプレッドシートに変換して戻す
ファイル内の部品数15131513
テキストボックス2022
コメント1111
入力規則1111
フィルタの条件1110
非表示の行10101020(全部)
カスタムプロパティ1110

セルを 1 つ書き換えただけでも、openpyxl で保存し直すとテキストボックスが消えました。「ここに社印を押してください」のような案内が、黙って消えるということです。なお、別に試したところ、シートに置いた画像は保存し直しても残りました。

当社では、取引先から受け取ったヒアリングシートで同じことが起きました。openpyxl で開いて保存し直しただけで、ファイル内の部品が 66 から 20 に減り、シート名も変わりました。

スプレッドシートに変換すると、フィルタが壊れる

「では、スプレッドシートに変換して編集し、Excel に戻せばよいか」というと、そうでもありませんでした。テキストボックスは残りましたが、フィルタの条件が消え、データの行がすべて非表示の状態で保存されていました。

壊さずに直すなら、XML を直接書き換える

xlsx ファイルの中身は、XML ファイルを zip でまとめたものです。書き換えたいセルの XML だけを差し替え、ほかのファイルは 1 バイトも変えずにコピーすれば、部品は何も失われません。

python
import re, zipfile
from xml.sax.saxutils import escape

def set_cell(src, dst, sheet_xml, ref, text):
    """シートの XML の中で、セル 1 つだけを文字列で書き換える。ほかのファイルはそのままコピーする"""
    row = re.sub(r"\D", "", ref)
    value = escape(text)  # & < > をエスケープしないと、ファイルが壊れる

    def new_cell(attrs):
        attrs = re.sub(r'\s+t="[^"]*"', "", attrs)  # 型だけ差し替え、書式(s="…")は残す
        return f'<c{attrs} t="inlineStr"><is><t xml:space="preserve">{value}</t></is></c>'

    with zipfile.ZipFile(src) as zin, zipfile.ZipFile(dst, "w", zipfile.ZIP_DEFLATED) as zout:
        for item in zin.infolist():
            data = zin.read(item.filename)
            if item.filename == sheet_xml:
                s = data.decode()
                if f'<c r="{ref}"' in s:
                    s = re.sub(rf'<c( r="{ref}"[^>]*?)(?:/>|>.*?</c>)',
                               lambda m: new_cell(m.group(1)), s, count=1, flags=re.S)
                else:  # セルが無ければ行の末尾に足す(右隣の列にセルが無い場合だけ使える)
                    s = re.sub(rf'(<row r="{row}"[^>]*>.*?)(</row>)',
                               lambda m: m.group(1) + new_cell(f' r="{ref}"') + m.group(2), s, count=1, flags=re.S)
                data = s.encode()
            zout.writestr(item, data)

set_cell("申込書.xlsx", "申込書_記入済み.xlsx", "xl/worksheets/sheet1.xml", "B2", "山田太郎")

書き込む値は、必ずエスケープしてから XML に入れます。「田中&鈴木」のように & や < を含む値をそのまま入れると、openpyxl では開けないファイルになりました。LibreOffice ではエラーにならず、その値だけが消えていました。気づきにくい壊れ方です。

また、元のセルに付いている書式の指定(s="…")は残します。セルを丸ごと差し替えると、記入欄の太字や背景色、罫線が消えます。上の関数で、書式付きのセルや & を含む値を書き込んでも、値と書式がそのまま残ることを確かめました。

これは文字列を 1 か所書き込むための最小限の例です。数値や日付を入れる場合や、シート名から XML ファイル名を調べる場合は、処理を足す必要があります。

AI エージェントに記入を任せるときは、「openpyxl で開いて保存し直さないこと」「XML のセルだけを差し替えること」を指示に入れておくと安全です。

観点2:準備の手間と、AI が書き込めるか

Excel は準備が要らない

Excel は手元のファイルなので、Python と openpyxl があればすぐに書き込めます。認証も要りません。

スプレッドシートは認証が要る

スプレッドシートを操作するには、Google アカウントの認証と、Sheets API を使うための設定が必要です。一度済ませてしまえば、あとは CLI を呼ぶだけで操作できます。

観点3:AI が結果を自分で確かめられるか

Excel は、計算結果を読み返せない

openpyxl で数式を書いたファイルは、計算結果を持っていません。計算結果として読もうとすると、空(None)が返ります。

python
wb = openpyxl.load_workbook("売上.xlsx", data_only=True)  # 計算結果を読む指定
print(wb.active["E2"].value)  # → None

AI が「合計が正しいか確かめて」と言われても、このままでは確かめられません。LibreOffice で再計算したファイルを作れば、計算結果を読めるようになります。

bash
soffice --headless --calc --convert-to xlsx --outdir recalc 売上.xlsx

今回の環境では、再計算は 0.92 秒で終わりました。

スプレッドシートは、計算済みの値をそのまま読める

スプレッドシートは Google 側で計算されるので、書いた直後に読めば計算済みの値が返ります。数式そのものを見たいときは、--render FORMULA を付けます。

bash
gog sheets get -a <アカウント> <スプレッドシートID> '売上!E2'                   # → 1000
gog sheets get -a <アカウント> <スプレッドシートID> '売上!E2' --render FORMULA  # → =C2*D2

見た目は、どちらも画像にすれば確認できる

AI が見た目まで確かめたいときは、PDF にして画像に変換し、それを読ませます。

  • Excel: LibreOffice で PDF にします。テキストボックスは描かれ、非表示の行は描かれませんでした
  • スプレッドシート: gog sheets export --format pdf で PDF にします。2.76 秒かかりました。見出しの太字や背景色、結合、表示形式が確認できました

観点4:置き場所と処理速度

1 回の操作の重さが 100 倍以上違う

Excel は手元のファイルを書き換えるだけなので、1 回の操作が 0.002〜0.005 秒で終わります。スプレッドシートはネット越しの操作になるので、1 回に 0.5〜1.2 秒かかりました。

書き込む量Excelスプレッドシート(まとめて 1 回)
100 行0.009 秒0.58 秒
1000 行0.04 秒0.76 秒
書き込みにかかった時間の横棒グラフ。100 行: Excel 0.009 秒、スプレッドシート(まとめて1回)0.58 秒。1000 行: Excel 0.04 秒、スプレッドシート 0.76 秒。スプレッドシートに 1 行ずつ 100 回書くと 69.4 秒(59 回目で回数制限)
書き込みにかかった時間(スプレッドシートはまとめて 1 回で送った場合)

スプレッドシートでも、まとめて 1 回で送れば 1000 行で 1 秒かかりませんでした。問題になるのは、1 行ずつ送る場合です。

1 行ずつ送ると、回数制限に引っかかる

スプレッドシートに 100 行を 1 行ずつ書き込んだところ、69.4 秒かかりました。さらに、59 回目で次のエラーが返りました。

text
Google API error (429 rateLimitExceeded): Quota exceeded for quota metric 'Write requests'
and limit 'Write requests per minute per user' of service 'sheets.googleapis.com'

Sheets API には、1 分あたりの書き込み回数の制限があります。公式ドキュメントでは、書き込みは 1 ユーザー・1 プロジェクトあたり 1 分に 60 回までとされています。59 回目で止まったのは、この上限に達したためと考えられます。

出典: Usage limits | Google Sheets | Google for Developers

今回のスクリプトはエラーを記録して次の行へ進む作りだったため、エラーになった 1 行だけが空欄のまま残りました。

スプレッドシートに大量のデータを書かせるときは、「まとめて 1 回で書き込むこと」を指示に入れ、書き込んだあとに件数を確かめさせると安全です。

観点5:行や数式のずれ

Excel(openpyxl)は、行を挿入しても数式が追従しない

5 行のデータと合計の行がある表に、4 行目へ 1 行を挿入しました。正しい合計は 25,000 です。

Excel(openpyxl)スプレッドシート(gog)
挿入した行より下の金額の数式=C4*D4 =C5*D5 =C6*D6(1 行ずつずれたまま)=C5*D5 =C6*D6 =C7*D7(正しく追従)
合計の数式=SUM(E2:E6)(挿入した行が範囲から外れる)=SUM(E2:E7)
合計(再計算後)26,00025,000

openpyxl で行を挿入すると、行の位置だけが動き、数式は元の文字列のまま残ります。その結果、挿入した行より下の金額が、1 つ上の行の数量で計算されていました。

openpyxl で行を挿入・削除するときは、数式を書き直す処理も自分で書く必要があります。数式を含む表を何度も更新するなら、スプレッドシートのほうが安全です。

どちらも、古い行番号で書き込むと別の行を上書きする

次は、AI エージェントが「9/5 の行の数量を 99 に直す」と決めて行番号を調べたあと、別の指示で 2 行目を削除し、そのあとで調べておいた行番号のまま書き込む場面です。

Excel(openpyxl)スプレッドシート(gog)
書き込んだ場所合計の行の数量欄合計の行の数量欄
数式すべて 1 行ずつずれた正しく追従した

行を削除すると、その下の行は 1 つずつ上に詰まります。削除する前に調べた行番号は、もう別の行を指しています。これはスプレッドシートでも防げません。当社でも、AI エージェントがスプレッドシートの別の行を上書きしてしまったことがあります。

防ぐには、書き込む直前に、日付や ID のような変わらない値で行を探し直すことです。AI エージェントには「行番号を覚えておいて後で使わない」「書き込む直前に探し直す」と指示しておきます。

使い分けの指針

試した結果から、次のように使い分けるのがよいと考えています。

Excel が向いている場面

  • 新しい表やレポートを、まとめて作る
  • 大量の行を扱う(スプレッドシートの回数制限を気にしなくてよい)
  • 画像を入れた資料を作る(手元の画像をそのまま置ける)
  • ネットにつながらない環境や、ファイルで納品する場面

スプレッドシートが向いている場面

  • 数式を含む表に、行を足したり消したりし続ける
  • 計算結果を AI に確かめさせながら進める

どちらでも気をつけること

  • 行番号を覚えたまま書き込まない。書き込む直前に探し直す
  • Excel で人から受け取ったファイルを直すときは、openpyxl で保存し直さない
  • スプレッドシートに大量に書くときは、まとめて 1 回で送る

まとめ

Claude Code に Excel とスプレッドシートを作らせて比べたところ、できる操作の範囲はほとんど変わりませんでした。差が出たのは、速さと数式の扱い、それに画像の挿入です。

  • Excel は速く、準備も要りません。ただし、openpyxl は計算をせず、行を挿入しても数式を直しません
  • スプレッドシートは 1 回の操作が遅く、回数制限もあります。画像を入れるには、画像を公開したうえで、人が一度許可を出す必要があります。そのかわり、数式は Google 側で正しく直され、計算結果もすぐに読めます
  • 人から受け取った Excel を直すときは、どちらの方法でも部品が失われることがあります。XML のセルだけを書き換えるのが確実です

AI エージェントに表を任せるときは、どちらのツールかよりも、「どう書き換えさせるか」を指示に書いておくことが大切です。

私たちは、AIエージェントを実際の業務に組み込んで運用しています。表の作成や更新を AI に任せる仕組みづくりや、開発体制そのもののご相談も承っています。お問い合わせはこちらよりお気軽にご相談ください。

この検証を行ったのは 株式会社Amanity です。 自社で手を動かして技術を確かめたうえで、モバイルアプリ・LINEアプリ・Webアプリの受託開発を行っています。

開発について相談する