Google SheetsをAIで自動化する — アドオンとApps Scriptの実践手順
GPT for SheetsのようなアドオンとApps Scriptによる自作カスタム関数の2通りで、スプレッドシート上にAI呼び出しを組み込む手順を解説します。
この記事では、Google Sheets の数式内からAIを呼び出す2つの方法(Google Workspace Marketplace のアドオン、Apps Scriptによるカスタム関数の自作)と、行数が多いデータをバッチ処理する際のコスト管理を扱います。所要時間の目安はアドオン利用なら15〜30分、Apps Scriptでの自作は1時間前後(APIキーの取得を含む)。前提条件はGoogleアカウントと、AnthropicまたはOpenAIなどAIベンダーのAPIキーです。ただし、機密情報を含む列をそのまま外部APIに送る設計は避けるべきです。
なぜ表計算ソフトにAIを組み込むと効くのか
問い合わせ内容の分類、レビューの要約、商品説明文の下書き作成など、行ごとに同じ処理を繰り返す作業は、スプレッドシート上でAI呼び出しを数式化しておくと、担当者がツールを行き来せずに済みます。特に、すでにZapier・Make・n8nのような自動化ツールでデータをスプレッドシートに集約している場合、集約後の一括処理をシート内で完結させられるのは実務上の利点です。
一方で、数式内でAIを呼び出す方式は、行数が増えるとAPIの呼び出し回数とコストが比例して増える点に注意が必要です。この点は後段のコスト管理で扱います。
前提条件
- Googleアカウント(個人アカウントでも、管理者権限のあるWorkspaceアカウントでも可)
- AnthropicまたはOpenAIなど、利用するAIベンダーのAPIキー(発行には支払い情報の登録が必要な場合があります)
- アドオンを使う場合はGoogle Workspace Marketplaceからのインストール権限
- Apps Scriptでカスタム関数を自作する場合は、スクリプトエディタでコードを書く程度の知識
方法A — Marketplaceのアドオンを使う
もっとも手早いのは、Google Workspace Marketplace で公開されている「GPT for Sheets and Docs」のようなAI連携アドオンをインストールする方法です。インストール後、メニューからAPIキーを登録すると、セルに専用の関数を入力するだけでAI呼び出しができるようになります。
関数名や引数の順番はアドオンのバージョンによって変わることがあるため、正確な書き方はインストール後にアドオンのヘルプメニュー内のリファレンスで確認してください。一般的には、対象セルの値とプロンプトを引数として渡し、戻り値としてAIの応答テキストがセルに表示される形式です。ノーコードで完結する反面、アドオン側の仕様変更や提供終了の影響を受けやすい点は理解しておく必要があります。
方法B — Apps Scriptでカスタム関数を自作する
アドオンに依存せず、API呼び出しの中身を自分で制御したい場合は、Apps Script(Google Sheets に組み込まれたスクリプト環境)でカスタム関数を作る方法があります。次はAnthropicのMessages APIを呼び出し、セルのテキストを要約するカスタム関数の例です。
function CLAUDE_SUMMARY(text) {
var apiKey = PropertiesService.getScriptProperties().getProperty('ANTHROPIC_API_KEY');
var url = 'https://api.anthropic.com/v1/messages';
var payload = {
// モデルIDは執筆時点のものが将来廃止される可能性があるため、
// docs.anthropic.com の最新リファレンスで正しい値を確認してから指定すること
model: '<現行のモデルID>',
max_tokens: 300,
messages: [
{ role: 'user', content: '次のテキストを日本語で2行に要約してください: ' + text }
]
};
var options = {
method: 'post',
contentType: 'application/json',
headers: {
'x-api-key': apiKey,
'anthropic-version': '2023-06-01'
},
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(url, options);
var json = JSON.parse(response.getContentText());
if (json.content && json.content[0]) {
return json.content[0].text;
}
return 'ERROR: ' + response.getContentText();
}
APIキーはコードに直接書き込まず、スクリプトプロパティ(Apps Scriptの「プロジェクトの設定」から登録できる非公開の設定領域)に保存します。シート上では =CLAUDE_SUMMARY(A2) のように、対象セルを引数にして呼び出します。エラー時に例外で処理全体が止まらないよう、レスポンスの中身を確認してから返す形にしています。
バッチ処理の設計
カスタム関数を数百行に貼り付けると、シートを開くたびに全行が再計算され、APIへの呼び出しが一斉に発生します。これは処理時間の増大とレート制限(一定時間内に呼び出せる回数の上限)超過の両方を招きます。対策として、次のいずれかを組み合わせます。
- 手動再計算に切り替える — スプレッドシートの計算方法を「手動」にし、必要なタイミングだけ再計算する
- 結果を値として固定する — 一度計算した結果は「値の貼り付け」で数式から静的な値に変換し、再計算の対象から外す
- Apps Scriptのトリガーでバッチ実行する — カスタム関数を数式として置くのではなく、スクリプトを時間主導型トリガーやメニュー操作で一括実行し、未処理の行だけをまとめて処理する
行数が多いデータ(数千行単位)を扱う場合は、数式形式ではなく3つ目のバッチ実行方式のほうが、レート制限やコストの管理がしやすくなります。
コスト管理
API呼び出しは、入力と出力のトークン数(テキストを分割した処理単位)に応じて課金されるのが一般的です。1行あたりのコストは小さくても、数千行を一括処理すると無視できない金額になることがあります。目安として、コストは処理する行数とプロンプトの長さにほぼ比例するため、まず数十行の小規模なテストで単価を把握し、そこから全体のコストを見積もる進め方が安全です。
コストを抑える工夫としては、同じ入力に対して毎回API呼び出しをせず結果をキャッシュする、プロンプトの指示文を簡潔にする、要約のように出力トークン数を抑えられるタスクでは max_tokens を必要最小限に設定する、といった方法があります。もっとも、コストを切り詰めすぎてプロンプトの指示が曖昧になると、出力の精度が落ち、結局は人による手直しが増えて本末転倒になります。コストと精度のバランスは、実際のデータで検証しながら調整するのが実務的です。
よくあるつまずき
まず、無料枠や請求上限を把握しないまま数千行に一括適用し、想定外の請求が発生するケースです。テスト段階で少数行に対する実コストを確認してから本番データに適用する順番を守る必要があります。次に、個人情報や取引先の機密情報を含む列をそのまま外部のAI APIに送ってしまう問題です。業務データを外部サービスに渡す場合は、社内のセキュリティ・プライバシーポリシーに従い、必要であれば列をマスキングしてから処理する設計にしてください。また、Apps Scriptの実行時間制限(1回の実行に上限がある)を超えて処理が途中で止まる場合もあるため、大量データはあらかじめ分割して実行する設計が要ります。
次のステップ
スプレッドシート単体での自動化に慣れたら、フォームやメールなど他のツールと組み合わせた一連の流れをZapier・Make・n8nの自動化フローとして組むと、手動でのシート起動が不要になります。また、シートに取り込む前段としてPDFやWordファイルから情報を抽出したい場合は、AIを使ってドキュメントを分析する方法が参考になります。
参考文献
- Anthropic. "Messages API Reference." Anthropic Documentation, 2026年時点。
- Google for Developers. "Custom Functions in Google Sheets." Apps Script Documentation, 2026年時点。
- Google. "Google Workspace Marketplace." 2026年時点。
関連する記事
RLNPay アカデミー
会員登録で、フルコースとニュースレターを受け取る
無料の記事だけでも実務に役立つ内容を目指していますが、会員登録いただくと、 アドバンストAIコースのフル動画レッスンと、新着チュートリアル・更新情報のニュースレターをお届けします。 登録は無料です。メールアドレスは配信目的のみに使用し、第三者へ提供することはありません。