Excel×スプレッドシート連携:HTTP GETで学ぶGAS API設計入門
このレポートでは、ExcelからGoogleスプレッドシートのデータを操作するためのAPIを、Google Apps Script (GAS) とHTTP GETリクエストを用いて作成する方法を詳しく解説します。Excelの利便性とクラウドのスケーラビリティを組み合わせることで、データ管理の新たな可能性を体験しましょう。
はじめに
API設計プロンプト
このプロンプトをいきなり書いたわけではなく、Geminiと実現したい機能の話し合いを重ね、その話し合いの内容をGeminiにまとめてもらいプロンプトとして出力してもらったものです。
そのプロンプトの出力も1回で完成したわけではなく、何回かの試行錯誤を重ねた結果出来上がったものです。
## Google Apps Script API作成依頼プロンプト (GETリクエストによる取得・設定)
**目的:**
ExcelからGoogleスプレッドシートのセルデータを取得および**設定**するためのGoogle Apps Script (GAS) を用いたWeb APIを作成します。このスクリプトは、HTTP GETリクエストのみでこれらの操作を実現し、ウェブアプリとしてデプロイされることを前提とします。
**APIの仕様概要:**
1. **GASスクリプトの形態:**
* このGAS APIは、後述する専用の「API管理スプレッドシート」に**紐付けられた(バインドされた)スクリプト**として作成してください。
2. **API管理スプレッドシート:**
* 「API管理スプレッドシート」内には、`ConfigSheet` という名前のシートが存在します。
* `ConfigSheet` の1行目はヘッダー行とし、A列に `スプシ名` (操作対象を識別するための任意の名前)、B列に `スプレッドシートID` (操作対象スプレッドシートの実際のID) を記述して管理します。
**`ConfigSheet` の例:**
| スプシ名 | スプレッドシートID |
| :----------- | :------------------------------------- |
| 売上データ | (ここに売上データスプレッドシートのID) |
| 在庫リスト | (ここに在庫リストスプレッドシートのID) |
3. **APIエンドポイントと機能 (`doGet(e)` 関数のみ):**
* HTTP GETリクエストを処理します。
* **必須URLパラメータ:**
* `spreadsheetName`: `ConfigSheet` の「スプシ名」に対応する文字列。
* `sheetName`: 操作対象シートの実際のシート名。
* `rangeA1`: 操作対象のセル範囲をA1形式で指定。
* `action`: 操作の種類を指定します。"get" (取得) または "set" (設定)。
* `value`: `action` が "set" の場合に必須。セルに設定する新しい値 (単一の文字列)。
* **処理フロー:**
1. 受け取った `spreadsheetName` を基に `ConfigSheet` を検索し、対応する「スプレッドシートID」を取得します。見つからない場合はエラーメッセージ(テキスト形式推奨、例: "エラー: 指定されたスプシ名が見つかりません。")を返します。
2. 取得した「スプレッドシートID」、およびパラメータの `sheetName` を使用して対象スプレッドシートおよびシートを開きます。シートが見つからない場合はエラーメッセージを返します。
3. `action` パラメータの値に応じて処理を分岐します。
* **`action` が "get" の場合 (データ取得):**
1. 指定された `rangeA1` のセル範囲の値を取得します。
2. 取得した値 (二次元配列) をXML形式で返します。XMLの構造は以下を参考にしてください。
```xml
<data>
<row>
<cell>値1A</cell>
<cell>値1B</cell>
</row>
<row>
<cell>値2A</cell>
<cell>値2B</cell>
</row>
</data>
```
※単一セルの場合は `<data><row><cell>値</cell></row></data>` のようになります。
3. XMLに含める文字列データは、必要に応じて適切にエスケープ処理してください。
4. 範囲指定が不正などの場合は適切なエラーメッセージをXML形式で返します。
* **`action` が "set" の場合 (データ設定):**
1. `value` パラメータが提供されているか確認します。不足している場合はエラーメッセージ(テキスト形式推奨、例: "エラー: valueパラメータが不足しています。")を返します。
2. 指定された `rangeA1` のセル範囲に、提供された単一の `value` を設定します (範囲内の全セルに同じ値を設定、または範囲が単一セルの場合はそのセルに設定)。
3. 設定が成功した場合、成功を示すメッセージ(テキスト形式推奨、例: "設定成功: セル範囲に値を設定しました。")を返します。
4. 範囲指定が不正などの場合は適切なエラーメッセージ(テキスト形式推奨)を返します。
4. その他のエラー(パラメータ不足など)が発生した場合も、適切なエラーメッセージ(テキスト形式推奨)を返します。
4. **ExcelからのAPI利用方法の説明作成依頼:**
* 上記で作成されるGAS APIについて、Excelから利用する方法を説明するドキュメントまたはセクションを作成してください。説明には以下を含めてください。
* **データ取得 (`action=get`):**
* Excelの `WEBSERVICE` 関数を使用した具体的な呼び出し例(`spreadsheetName`, `sheetName`, `rangeA1`, `action=get` パラメータを含む)。
* `ENCODEURL` 関数の使用推奨箇所。
* 返却されるXMLデータをExcelシート上で扱うための簡単な方法 (例: `FILTERXML` 関数の利用例)。
* **データ設定 (`action=set`):**
* Excelの `WEBSERVICE` 関数を使用した具体的な呼び出し例(`spreadsheetName`, `sheetName`, `rangeA1`, `action=set`, `value` パラメータを含む)。
* `ENCODEURL` 関数の使用推奨箇所。
* GETリクエストによるデータ設定は一般的に推奨されない旨、およびその主なリスク(サーバーログへの記録、ブラウザ履歴、キャッシュ問題、べき等性の欠如など)について**簡潔に**注意喚起してください。
* 返却されるテキストメッセージの確認方法。
5. **GAS APIのデプロイ(公開)手順の説明作成依頼:**
* 作成したGASスクリプトをウェブアプリとしてデプロイし、外部(Excelなど)からアクセス可能なURLを取得するまでの基本的な手順の概要を説明してください。
* **説明に含めるべきポイント (簡潔に):**
* スクリプトエディタの「デプロイ」メニューから「新しいデプロイ」を選択する流れ。
* デプロイの種類として「ウェブアプリ」を選択すること。
* 主な設定項目:「説明」(任意)、「次のユーザーとして実行」(通常は自分)、「アクセスできるユーザー」(この設定の重要性と、例えば「全員」を選択する場合のセキュリティ上の注意点)。
* デプロイ後に発行される「ウェブアプリURL」の確認方法。
**補足:**
* このAPIは、GETリクエストによるデータ設定のリスクを理解した上で利用されることを前提としています。
* GASのウェブアプリとしてデプロイする際の設定(アクセス権限など)についても考慮が必要ですが、今回はスクリプト自体の作成と、その利用・デプロイに関する説明の作成に焦点を当てています。
GASのAPI作成と手順
1. API管理スプレッドシートの準備
- 新しいGoogleスプレッドシートの作成: API管理用の新しいスプレッドシートを作成し、任意の名前を付けます(例: "GAS_API_Manager")。
- ConfigSheetの作成: 作成したスプレッドシート内に「ConfigSheet」という名前のシートを作成します。
- ヘッダー行の設定: ConfigSheetの1行目をヘッダー行とし、以下のように設定します。
- A列: 「スプシ名」 (操作対象のスプレッドシートを識別するための任意の名前)
- B列: 「スプレッドシートID」 (操作対象スプレッドシートの実際のID)ConfigSheet の例:
ヒント: スプレッドシートIDは、対象のGoogleスプレッドシートのURLから取得できます。
URLがhttps://docs.google.com/spreadsheets/d/********************/edit#gid=0のような形式の場合、d/と/editの間の********************の部分がスプレッドシートIDです。
2. Google Apps Script (GAS) コード
コードの貼り付け: デフォルトで表示されているCode.gsファイルの内容をすべて削除し、以下のGASコードを貼り付けます。
3. GAS APIのデプロイ(公開)手順
Googleカレンダーの日本の祝日をGASとExcelで取得する ~APIキー不要、XML連携ガイド~
- スクリプトエディタを開く: API管理スプレッドシートを開き、「拡張機能」メニューから「Apps Script」を選択してスクリプトエディタを開きます。
- デプロイ:
- スクリプトエディタ右上の「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
- スクリプトエディタ右上の「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
- デプロイの種類を選択:
- 歯車アイコン(種類の選択)をクリックし、「ウェブアプリ」を選択します。
- 歯車アイコン(種類の選択)をクリックし、「ウェブアプリ」を選択します。
- 設定項目を構成: 以下の項目を設定します。
- 説明: デプロイの説明を任意で入力します (例: Excel連携API v1)。
- 次のユーザーとして実行: 通常は「自分 (あなたのメールアドレス)」を選択します。これにより、スクリプトはあなたの権限で実行されます。
- アクセスできるユーザー:
- 自分のみ: あなただけがAPIにアクセスできます。
- (あなたのドメイン)内の全員: 同じGoogle Workspaceドメイン内のユーザーのみがアクセスできます。
- 全員: Googleアカウントを持つ人、または匿名アクセスを含む全員がAPIにアクセスできます。Excelから利用する場合は、通常「全員」を選択する必要があります。
- セキュリティ上の注意: 「全員」を選択すると、URLを知っていれば誰でもAPIにアクセスできてしまうため、取り扱うデータの機密性に応じて慎重に選択してください。必要であれば、APIキーのような仕組みをスクリプトに別途実装することも検討できますが、今回のスクリプトには含まれていません。
- デプロイボタンをクリック: 設定が完了したら、「デプロイ」ボタンをクリックします。
- 承認: 初回デプロイ時やスクリプトがアクセスするGoogleサービスの範囲(スコープ)が変更された場合、承認を求められます。内容を確認し、「アクセスを承認」をクリックして進めてください。
- ウェブアプリURLの取得: デプロイが成功すると、「ウェブアプリ」セクションにURLが表示されます。このURLをコピーしてください。これがExcelからAPIを呼び出す際に使用するURLです。 「完了」をクリックしてダイアログを閉じます。
注意: 一度デプロイした後、スクリプトを修正した場合は、再度「デプロイ」メニューから「デプロイを管理」を選択し、対象のデプロイを選んで「編集」(鉛筆アイコン)をクリックし、「バージョン」で「新バージョン」を選択して「デプロイ」することで更新できます。
Excelでの使用方法
ここでは、ExcelのWEBSERVICE関数とFILTERXML関数を使った具体的な利用方法を説明します。
データ取得 (action=get)
=CONCATENATE(
"ここにデプロイしたウェブアプリのURLを貼り付け",
"?spreadsheetName=", ENCODEURL("ConfigSheetに登録したスプシ名"),
"&sheetName=", ENCODEURL("対象シート名"),
"&rangeA1=", ENCODEURL("A1:B5などの範囲"),
"&action=get"
)
例えば、A1セルにウェブアプリURL、B1にスプシ名、C1にシート名、D1に範囲を入力する場合、URL生成セルには以下のように記述できます。
=A1 & "?spreadsheetName=" & ENCODEURL(B1) & "&sheetName=" & ENCODEURL(C1) & "&rangeA1=" & ENCODEURL(D1) & "&action=get"

仮にE1セルにURLが生成されている場合:
=WEBSERVICE(E1)
この関数は、APIからのXMLレスポンスを文字列として返します。

仮にA3セルにWEBSERVICE(E1)の結果 (XML文字列) がある場合:
=FILTERXML(F1,"//data/row/cell")
または短縮して
=FILTERXML(F1,"//cell")
・最初の行の最初のセルの値を取得:
=FILTERXML(F1,"//data/row[1]/cell[1]")
・2行目の全てのセルの値を取得 (縦一列に展開):
=FILTERXML(F1,"//data/row[2]/cell")
注意: FILTERXML関数の結果は、Excelのバージョンによってはスピル配列として自動的に展開されます。古いバージョンの場合は、結果を表示したいセル範囲を選択し、数式を入力後 Ctrl+Shift+Enter で配列数式として入力する必要がある場合があります。
データ設定 (action=set)
=CONCATENATE(
"ここにデプロイしたウェブアプリのURLを貼り付け",
"?spreadsheetName=", ENCODEURL("ConfigSheetに登録したスプシ名"),
"&sheetName=", ENCODEURL("対象シート名"),
"&rangeA1=", ENCODEURL("C1などの単一セルまたは範囲"),
"&action=set",
"&value=", ENCODEURL("設定したい値")
)
例えば、A1セルにウェブアプリURL、B1にスプシ名、C1にシート名、D1に範囲、E1に設定したい値を入力する場合:
=A1 & "?spreadsheetName=" & ENCODEURL(B1) & "&sheetName=" & ENCODEURL(C1) & "&rangeA1=" & ENCODEURL(D1) & "&action=set&value=" & ENCODEURL(E1)

仮にF1セルに設定用URLが生成されている場合:
=WEBSERVICE(F1)
この関数は、APIからのテキストメッセージ(成功またはエラー)を返します。セルに「設定成功: セル範囲に値を設定しました。」などのメッセージが表示されれば成功です。

- 非推奨: 通常、データの状態を変更する操作(作成、更新、削除など)にHTTP GETリクエストを使用することは推奨されません。HTTP POSTやPUTメソッドが適切です。
- 主なリスク:
- ログ: URLパラメータにデータが含まれるため、サーバーのアクセスログやブラウザの履歴に機密情報が残る可能性があります。
- キャッシュ: GETリクエストはキャッシュされることがあるため、意図しない動作を引き起こすことがあります。
- べき等性の欠如: 同じGETリクエストを複数回送信すると、意図せず複数回データが変更される可能性があります (今回のスクリプトでは同じ値を設定するため問題は起きにくいですが、操作内容によっては問題となります)。
- セキュリティ: URLが第三者に知られた場合、容易にデータを改ざんされる可能性があります。
このAPIは、これらのリスクを理解した上で、限定的(臨時的)な状況での利用を想定しています。
更新タイミング等の注意点
- 更新される場合
- WEBSERVICE関数のセルをダブルクリックして編集モードに入り、Enterキーで確定する
- セルを選択してF2キーを押し、編集モードにしてからEnterキーで確定する
- 参照しているセル(引数)の値が変更された時(引数が動的な場合のみ)
- 行や列の追加・削除を行った時(シート全体の再計算が発生するため)
- 強制再計算による更新:Ctrl + Alt + F9(全ブックの強制再計算)※大量リクエスト発生の注意
- 更新されない場合
- 通常の再計算では更新されない:
- F9キー(アクティブシートの再計算)
- Shift + F9(選択範囲の再計算)
- 自動計算モードでの通常の再計算
- ファイルを開いた時(自動実行されない)
- 保存時
- 他のセルの値が変更された時(WEBSERVICE関数の引数に関係ない場合)
- WEBSERVICE関数が入っている各セルが、それぞれ独立してサーバーに問い合わせを行う
- 同じURLを指定していても、セル数分だけリクエストが発生する
- 10個のセルにWEBSERVICE関数があれば、10回のサーバーアクセスが実行される
大量リクエストによる影響が問題となる場合が発生しますので、十分に注意してください。
おわりに
※本記事の作成にあたっては、一部の文章作成に生成AI(Gemini)を使用しています。最終的な内容は人間による確認・編集を経て掲載しています。
同じテーマ「生成AI活用研究」の記事
AI時代の「Hello World」のすすめ:すべてはこの一歩から
AI擬人化の光と影:その心理と健全な付き合い方
AIと『対話』する時代に問う:あなたの前には誰がいますか?
生成AIが拓く「もう一人の自分」とパーソナライゼーションの未来
生成AIパスポート試験 キーワード解説
生成AIパスポート試験 練習問題(四股択一式)
Googleカレンダーの日本の祝日をGASとExcelで取得する ~APIキー不要、XML連携ガイド~
AI×ひらめき ― 「ネタ」が飛躍する創造の増幅プロセス
Excel×スプレッドシート連携:HTTP GETで学ぶGAS API設計入門
AI時代のプログラミング再考:記述の自由と知の民主化
Excel×スプレッドシート連携:HTTP GETで学ぶGAS API設計入門
新着記事NEW ・・・新着記事一覧を見る
エクセル関数辞典 AI版|エクセル入門(6月10日)
生成AIと100本ノック 28本目:シートをブックに分割|生成AI活用研究(6月8日)
生成AIと脱Excelの時代:ブラックボックスと共に進む知的変革|生成AI活用研究(2025-06-08)
生成AIと100本ノック 27本目:ハイパーリンクのURL|生成AI活用研究(6月7日)
生成AIと100本ノック 26本目:ファイル一覧作成|生成AI活用研究(6月6日)
AI時代のプログラミング再考:記述の自由と知の民主化|生成AI活用研究(2025-06-06)
Excel×スプレッドシート連携:HTTP GETで学ぶGAS API設計入門|生成AI活用研究(2025-06-04)
AI×ひらめき ― 「ネタ」が飛躍する創造の増幅プロセス|生成AI活用研究(2025-06-03)
Googleカレンダーの日本の祝日をGASとExcelで取得する ~APIキー不要、XML連携ガイド~|生成AI活用研究(2025-06-02)
究極のVBA転記プロンプト公開!あなたの事務作業を劇的に効率化|生成AI活用研究(2025-06-02)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.変数宣言のDimとデータ型|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。