7月20日、How-To Geekが「I asked ChatGPT, Claude, and Gemini for the best Excel formula」と題した記事を公開した。3つのAIに同一のExcel問題を投げたところ、返ってきた数式はすべて正解——しかし設計はまったく異なっていた。「正しいかどうか」ではなく「どう設計するか」でAIの個性が分かれるという、実用的な比較実験の報告だ。
同一プロンプトで3つのAIが別々の数式を返した
テストに使ったプロンプトは以下の通りだ。
I have an Excel table named T_Sales. It contains the columns Product, Jan, Feb, Mar, Apr, May, Jun, and a blank column called First Month Over 10000. I need a formula for the First Month Over 10000 column that returns the first month where that row's sales exceed 10,000. If no month exceeds 10,000, return "None". I'm using Microsoft 365 Excel. Please provide the best formula and briefly explain why you chose that approach.
「売上が初めて10,000を超えた月を返し、該当月がなければ"None"を返す」という、Excel中級者なら一度は書いたことがある典型的な問題だ。Microsoft Copilotは使わず、ChatGPT・Claude・Geminiそれぞれのスタンドアロン版に同じ文面を投げ、各モデルが同一の条件から出発するようにした。
結果として返ってきた数式は以下の通りだ。
ChatGPT:
=LET(sales, T_Sales[@[Jan]:[Jun]], months, T_Sales[[#Headers],[Jan]:[Jun]], match_pos, XMATCH(TRUE, sales>10000), IFERROR(INDEX(months, match_pos), "None"))
Claude:
=LET(sales_data, T_Sales[@[Jan]:[Jun]], month_names, {"Jan","Feb","Mar","Apr","May","Jun"}, match_idx, XMATCH(TRUE, sales_data>10000), IF(ISNA(match_idx), "None", INDEX(month_names, match_idx)))
Gemini(2案):
=XLOOKUP(TRUE, T_Sales[@[Jan]:[Jun]]>10000, {"Jan","Feb","Mar","Apr","May","Jun"}, "None", 1)
=XLOOKUP(TRUE, T_Sales[@[Jan]:[Jun]]>10000, T_Sales[[#Headers],[Jan]:[Jun]], "None", 0)
なお、Geminiだけが2案を提示したのは、元記事によれば最初の回答で1案目を返したあと、著者がヘッダー参照版も追加で求めたためだ。最初から複数案を提示したわけではなく、対話の中で2案目が生まれた点は注意が必要だ。
全数式とも、実際にExcelに入力すると正しい結果を返した。問題は「動くかどうか」ではなく、設計上のトレードオフがどこにあるかだ。
各AIの設計判断はどこが違うか
ChatGPTとClaudeはLET関数で可読性を優先
ChatGPTとClaudeは、いずれもLET関数を選んだ。LET関数は数式内に名前付き変数を定義できる仕組みで、長い参照式に別名を付けることで数式全体を読みやすく整理できる。複雑な数式をあとから保守する場面では有効だが、記事では「AIが問題に対して必要以上に凝った数式を生成してしまうリスク」にも触れている。
両案ともLET関数の内部でXMATCH関数を使っている。XMATCHはVLOOKUPやMATCH関数の後継にあたる比較的新しい関数で、配列の中から条件に一致する最初の位置(インデックス)を返す。ここではXMATCH(TRUE, sales>10000)という形で「売上が10,000を超える最初の列位置」を取得し、その位置をINDEXで月名に変換するという2段構えの設計になっている。Microsoft 365以降で利用可能だ。
ヘッダー参照の有無が「動的さ」を分ける
この実験で最も実用的な差として浮かび上がったのが、月名をどこから取るかという点だ。
- ChatGPT と Geminiの2案目 はテーブルのヘッダー行を直接参照(
T_Sales[[#Headers],[Jan]:[Jun]])している。列名を変更すると数式も自動的に追従する。 - Claude と Geminiの1案目 は月名をハードコード(
{"Jan","Feb","Mar","Apr","May","Jun"})している。ヘッダーを変更した場合は数式側の修正も必要になる。
保守性の観点では、ヘッダー参照を使う前者のアプローチの方が堅牢だ。
GeminiはXLOOKUPで簡潔さを優先
Geminiが選んだXLOOKUPは、INDEXとXMATCHを別々に書く必要がなく、数式全体が短くなる。読み解きやすさという点ではLET関数に劣るが、「短くてシンプル」という方向性には一定の合理性がある。
「正解」はどれか
記事では特定の数式を「最良」と断言していない。どれが適切かは、可読性・保守性・簡潔さのどれを優先するかによって変わる、という立場だ。
ただし設計上の具体的な差ははっきりしており、整理すると以下になる。
| モデル | 関数 | 月名の取得方法 | 動的更新 |
|---|---|---|---|
| ChatGPT | LET + XMATCH + INDEX | ヘッダー参照 | ○ |
| Claude | LET + XMATCH + INDEX | ハードコード | × |
| Gemini(案1) | XLOOKUP | ハードコード | × |
| Gemini(案2) | XLOOKUP | ヘッダー参照 | ○ |
ヘッダーが変わる可能性があるならChatGPTかGemini案2、とにかく短く書きたいならGemini案1、チームで数式を共有・管理するならLET関数を使ったChatGPT or Claudeといった選び方になる。
同じ問いを投げても返ってくる数式が異なる以上、AIの提案をそのままコピペするのではなく、自分の環境と要件に合わせて選択する目を持つことが前提になる。
詳細はI asked ChatGPT, Claude, and Gemini for the best Excel formulaを参照していただきたい。