GASでスプレッドシートを自動化する方法|初心者向けの基本と実務の注意点

【元情シスが警告】GAS-スプレッドシート-自動化の罠!「6分の壁」の恐怖とSaaS移行のすすめ

SkillStack Lab運営者のスタックです。

Googleスプレッドシートで毎日同じ集計や転記をしていて、「この作業を自動化できないかな」と感じていませんか。

そんなときに役立つのが、GoogleのApps Script(GAS:Google Apps Script)です。

GASを使えば、スプレッドシートのデータ整理だけでなく、Googleフォームへの回答をきっかけに処理を実行したり、決まった時刻に集計したり、条件に合う相手へメールを送ったりできます。

しかも、スプレッドシートから「拡張機能」→「Apps Script」と進めばブラウザ上で開発を始められるため、一般的なプログラミング環境のように専用エディタや実行用サーバーを自分で用意する必要はありません。

一方で、GASには実行時間やメール送信数などの制限があり、作った本人しか直せない状態にすると業務の属人化につながります。

この記事では、GASでスプレッドシートを自動化する基本から、トリガーの設定、6分の実行時間制限、企業で安全に運用するためのポイントまで順番に解説します。

この記事で分かること
GASでスプレッドシートを自動化してできること、初心者向けの始め方、トリガーの種類、6分制限などのクォータ、会社で属人化させない運用方法が分かります。

目次

GASでスプレッドシートを自動化すると何ができる?

GASは、Google Workspaceの各サービスをJavaScriptベースのコードから操作できる仕組みです。

スプレッドシートでは、セルの読み書きだけでなく、Googleフォーム、Gmail、Googleドライブ、Googleカレンダーなどと組み合わせた自動化にも利用できます。

業務GASでできることの例
データ集計複数シートのデータを読み込み、集計用シートへまとめる
データ転記条件に合う行だけ別シートへ転記する
フォーム処理Googleフォームへの回答後に確認メールや通知を送る
期限管理期限が近い行を抽出し、担当者へメールを送る
定期レポート決まった時間に集計処理を実行する
ファイル操作Googleドライブ内のファイルやフォルダを整理する
GoogleスプレッドシートからApps Scriptを開き、専用サーバーを用意せず自動化を始める流れ

ブラウザだけで開発を始められる

GASの始め方はシンプルです。

  1. 自動化したいGoogleスプレッドシートを開く
  2. 「拡張機能」をクリックする
  3. 「Apps Script」を選択する
  4. 表示されたエディタへコードを書く
  5. 保存して実行する

現在のGoogle公式ドキュメントでも、スプレッドシートに紐づくスクリプトは「拡張機能」→「Apps Script」から作成する方法が案内されています。

最新の操作方法は、Google公式のApps Script・Google Sheetsガイドでも確認できます。

会社のGoogle Workspaceでは管理者設定も確認

個人で試せるからといって、会社の顧客情報や人事情報を自由にスクリプトから扱ってよいとは限りません。

業務利用では、自社のGoogle Workspaceの利用ルールやアクセス権限、外部APIへのデータ送信可否を確認してから進めましょう。

GASでスプレッドシートを自動化する基本手順

まずは小さな転記処理から始める

初めてGASを使うなら、いきなりメール送信や外部APIとの連携を作る必要はありません。

まずは「入力シートのデータを集計シートへコピーする」といった、結果を目で確認できる処理から始めると仕組みを理解しやすくなります。

例えば、次のコードは「入力」シートのA~C列を読み込み、「集計」シートへまとめて書き込むシンプルな例です。

function copyData() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const source = ss.getSheetByName('入力');
  const target = ss.getSheetByName('集計');

  const lastRow = source.getLastRow();
  if (lastRow < 2) return;

  const values = source.getRange(2, 1, lastRow - 1, 3).getValues();

  target.getRange(2, 1, values.length, values[0].length)
        .setValues(values);
}

重要なのは、1セルずつ読み書きするのではなく、必要な範囲をまとめて読み込み、配列で処理してまとめて書き戻すことです。

GoogleもApps Scriptの高速化方法として、スプレッドシートへの読み取りと書き込み回数を減らし、バッチ処理する方法を推奨しています。

大量データを扱うようになっても、この考え方が処理時間を抑える基本になります。

初回実行時はGoogleへのアクセス許可が必要

GASからスプレッドシート、Gmail、Googleドライブなどのユーザーデータへアクセスする処理では、初回実行時などにGoogleアカウントから権限を許可する必要があります。

どの権限を要求するかはコード内で利用しているサービスなどから判定されます。

メール送信やドライブへのアクセスを追加すると、新しい権限の承認を求められる場合もあります。

企業で利用する場合は、「動けばよい」ではなくそのスクリプトがどのデータへアクセスする権限を持つのかも確認してください。

GASのトリガーでスプレッドシートを自動実行する

コードを作っただけでは、基本的には人が実行する必要があります。

そこで利用するのがトリガーです。

トリガーを設定すると、特定の操作や時間をきっかけにスクリプトを自動で実行できます。

Google Apps Scriptで時間主導やフォーム送信をきっかけに処理を自動実行するトリガーの仕組み

よく使うトリガーの種類

トリガー利用例
編集時スプレッドシートの値が編集されたときに処理する
変更時シート追加などスプレッドシート構造が変わったときに処理する
フォーム送信時Googleフォームへの回答を受信した後に処理する
時間主導一定時間ごと、毎日、毎週などのタイミングで処理する

インストール型トリガーはApps Scriptエディタ左側の「トリガー」から追加できます。

「毎朝集計する」「毎週月曜日にレポートを作成する」など、人がPCを開いていない時間にも処理を動かせるのが大きなメリットです。

「毎朝9時」は9時ちょうどとは限らない

時間主導トリガーを使うときに知っておきたいのが、実行時刻には一定の幅があることです。

Google公式では、例えば9時台の定期実行を設定した場合、9時から10時の間で時刻が選ばれ、その後はおおむね同じタイミングで実行される仕組みが案内されています。

そのため、「毎日9:00:00ちょうどに外部システムへデータを送らなければならない」といった厳密な時刻制御が必要な用途では、GASの時間主導トリガーだけで要件を満たせるか確認が必要です。

トリガーの現在の仕様は、Google公式のインストール型トリガーガイドで確認できます。

GASの6分制限と2026年現在の主なクォータ

GASを実務で使うなら、コードの書き方と同じくらい重要なのがクォータ(利用上限)です。

2026年8月時点のGoogle公式情報では、主な制限は次のようになっています。

項目個人向けアカウントGoogle Workspace
スクリプトの実行時間6分/1回6分/1回
カスタム関数の実行時間30秒/1回30秒/1回
トリガー合計実行時間90分/日6時間/日
メール受信者数100人/日1,500人/日
トリガー数20/ユーザー/スクリプト20/ユーザー/スクリプト

※クォータはGoogleによって変更される可能性があります。最新値はApps Script公式のクォータ一覧を確認してください。

クォータは必ず午前0時にリセットされるわけではありません

Google公式では、日次クォータは最初のリクエストから24時間後にリセットされると案内されています。

「月曜日に100通送ったから、火曜日の0時になればまた100通送れる」といった前提では設計しない方が安全です。

6分を超えると処理は途中で終了する

通常のApps Scriptでは、1回の実行時間は6分までです。

6分を超えると実行時間超過の例外が発生し、処理が終了します。

ここで注意したいのは、必ずしも「データが壊れる」というわけではないことです。

ただし、上から順番に1行ずつ書き込む処理の場合、途中まで更新されて、その後の処理だけ終わっていない状態になる可能性があります。

そのため、重要な処理では「どこまで完了したか」を記録したり、同じ処理を再実行しても二重登録にならないように設計したりすることが大切です。

GASが遅い・6分を超えるときの改善方法

セルを1つずつ読み書きしない

大量データで処理が遅くなる原因の一つが、スプレッドシートへのアクセスをループ内で何度も繰り返すコードです。

例えば1万セルを処理するときに、1セル読む→1セル書く→次のセルを読む、と繰り返すとサービスへのアクセス回数が増えます。

基本は次の流れです。

  • 必要な範囲をgetValues()でまとめて取得する
  • JavaScriptの配列上で計算・加工する
  • setValues()でまとめて書き戻す

このバッチ処理はGoogleもApps Scriptのベストプラクティスとして案内しています。

長い処理は複数回に分割する

処理を効率化しても6分以内に終わらない場合は、無理に1回ですべて処理するのではなく、複数回へ分割します。

例えば、最後に処理した行番号をProperties Serviceなどへ保存し、次回の実行ではその続きから処理する方法があります。

Google公式のベストプラクティスでも、大きな処理を分割し、必要に応じて時間主導トリガーで続きを実行する方法が案内されています。

データ量そのものが大きいなら保存先を見直す

GASの高速化だけで解決しようとしないことも重要です。

大量のデータを長期間蓄積したり、多数のユーザーから高頻度で書き込みが発生したりする場合、GoogleもCloud SQLやBigQueryなどのデータ基盤を検討するよう案内しています。

「GASが悪い」のではなく、スプレッドシートをデータベース代わりに使い続ける設計そのものが限界に近づいていないかを確認しましょう。

企業でGASを運用するときに重要な属人化対策

実務では、6分制限以上に注意したいポイントがあります。

それが「誰のアカウントで動いているのか」です。

インストール型トリガーは作成者の権限で動く

Google公式によると、インストール型トリガーは、そのトリガーを作成したユーザーのアカウント権限で実行されます。

例えばAさんが「毎朝メールを送信する」というトリガーを作った場合、別の社員がスプレッドシートを操作していても、トリガー自体はAさんの権限で実行されます。

この仕組みを理解せず、個人アカウントに重要な自動化を依存させるのは避けたいところです。

GASのコードやトリガーを一人だけが管理すると異動や退職時に保守が難しくなるリスクを示した図

最低限残しておきたい運用情報

  • スクリプトの目的
  • 対象となるスプレッドシート
  • 使用しているトリガー
  • トリガーを作成したアカウント
  • 利用しているGoogleサービス・外部API
  • エラーが起きた場合の確認場所
  • 担当者変更時の引き継ぎ手順

Googleは複数人でApps Scriptを開発・保守する場合、共有ドライブの利用もベストプラクティスとして案内しています。

ただし、ファイルを共有ドライブに置いたからといって、作成済みのインストール型トリガーまで自動的に別の担当者へ引き継がれるわけではありません。

退職・異動時にはトリガーも含めて確認する運用にしましょう。

自動実行の失敗を確認できるようにする

自動化は「誰も見なくてよい仕組み」ではありません。

インストール型トリガーでエラーが発生すると、Googleから作成者へ失敗通知メールが送られるほか、Apps Scriptの「実行数」画面から成功・失敗した履歴を確認できます。

重要な業務ほど、次のような監視方法を決めておきましょう。

  • 実行履歴を定期的に確認する
  • エラー通知メールを見落とさない
  • 処理件数や最終実行日時をシートへ記録する
  • 失敗時に再実行できる手順を用意する

GASと専用SaaSはどこで使い分ける?

GASには制限がありますが、だからといって企業で使ってはいけないわけではありません。

重要なのは、業務の重要度と処理量に合わせて使い分けることです。

業務の状況選択肢
部署内の簡単な集計・通知GASを使いやすい
Googleフォームからの小規模な自動処理GASを使いやすい
毎日数百件程度の軽いデータ加工処理時間・クォータを確認してGASを検討
大量データを継続的に処理するBigQueryやデータベースなども検討
給与・請求・勤怠など停止時の影響が大きい業務専用SaaSや十分に管理されたシステムも比較
厳密な監査・権限制御・SLAが必要要件を満たす業務システムを検討
業務の重要度やデータ量に応じてGASと専用SaaSを使い分ける判断基準

GASを使い続けるために複雑な回避処理を何重にも追加し始めたら、別の仕組みへ移行するタイミングかもしれません。

バックオフィス業務そのものを専用サービスへ移した方がよいケースについては、バックオフィス向け脱Excelツールの比較記事で詳しく解説しています。

生成AIでGASのコードを作るときの注意点

現在はChatGPTやGeminiなどへ「このスプレッドシートを自動化するGASを書いて」と依頼すれば、プログラミング初心者でもコードを作りやすくなりました。

これは非常に便利ですが、生成されたコードをそのまま本番環境へ貼り付けるのはおすすめしません。

最低限ここだけは確認する

  • どのシートや範囲を書き換えるコードなのか
  • GmailやGoogleドライブへアクセスしていないか
  • 外部URLへデータを送信していないか
  • エラーになったとき途中まで処理されないか
  • 同じ処理を2回実行しても問題ないか

生成AIを「コードを書いてくれる人」として使うだけでなく、「このコードが何をしているのか1行ずつ説明して」「想定されるエラーを挙げて」と確認する使い方がおすすめです。

GASのスプレッドシート自動化に関するよくある質問

GASは無料で使えますか?

Apps Script自体を始めるために専用サーバーを契約する必要はありません。

ただし、個人向けGoogleアカウントとGoogle Workspaceでは利用できるクォータが異なり、会社ではGoogle Workspace自体の契約や管理者ポリシーも関係します。

GASはパソコンを閉じても動きますか?

時間主導などのトリガーを設定していれば、利用者のPCを起動していなくてもGoogle側でスクリプトを実行できます。

ただし、トリガーやクォータ、アクセス権限などが原因で失敗することはあるため、完全に監視不要になるわけではありません。

GASの実行時間は本当に6分ですか?

2026年8月時点のGoogle公式クォータでは、通常のスクリプト実行時間は個人向け・Google Workspaceともに1回6分です。

一方、スプレッドシートのセルから呼び出すカスタム関数には1回30秒という別の制限があります。

大量データを扱うと必ず6分を超えますか?

データ量だけで決まるわけではありません。

セルを1件ずつ読み書きするコードは遅くなりやすいため、まずgetValues()とsetValues()を使った一括処理へ改善しましょう。

それでも収まらない規模なら、処理分割やデータベースへの移行を検討します。

担当者が退職するとGASは止まりますか?

すべてのGASが即座に止まると一概には言えませんが、インストール型トリガーは作成者のアカウントで実行されるため、アカウント停止などの影響を受ける可能性があります。

業務利用では、コードだけでなくトリガーの作成者まで含めて引き継ぐことが重要です。

GASによるスプレッドシート自動化のまとめ

GASの特性と限界を理解して業務の重要度に合う自動化方法を選ぶ考え方

GASは、Googleスプレッドシートを使った定型業務を自動化するうえで非常に便利な選択肢です。

  • ブラウザからすぐApps Scriptを始められる
  • スプレッドシートの集計・転記を自動化できる
  • フォーム送信や時間をきっかけに自動実行できる
  • GmailやGoogleドライブなどと連携できる
  • 1回6分などのクォータがある
  • トリガーは作成者のアカウントで動くため引き継ぎも重要
  • 大量データではバッチ処理や別のデータ基盤も検討する

最初から大規模な業務システムを作ろうとせず、まずは「毎朝の集計」「定型的な転記」「フォーム送信後の通知」など、失敗しても業務への影響が小さい処理から始めるのがおすすめです。

GASの価値は、すべてを自作することではなく、手作業を減らせる場所へ適切に使うことにあります。

コードをコピペするだけではなく、配列・条件分岐・繰り返し・エラー処理などの基礎を理解しておくと、後から業務が変わったときにも自分で修正しやすくなります。

\ GAS・スプレッドシート自動化を体系的に学ぶ /


次は、仕事で使えるスキルをもう一段積み上げる

SkillStack Labでは、Excel・生成AI・自動化・オンライン学習を、実務で使うことを前提に解説しています。今の課題に近いテーマから次の記事へ進んでみてください。

生成AIを仕事で使いたい

ChatGPTなどを「触ったことがある」から、実際の仕事で使えるレベルへ進みたい方へ。

生成AIの勉強方法・学習順序を見る →

Excel作業を自動化したい

関数だけでは限界を感じてきたら、Power Query・VBA・Pythonなども含めて自動化を考えます。

Excel業務を自動化する方法を見る →

体系的にスキルを学びたい

Excel・VBA・Python・生成AIなどを、動画講座で効率よく学びたい方へ。

社会人向けUdemy講座の選び方を見る →

何から始めるか迷ったら、今の仕事で最も時間がかかっている作業や、身につけたいスキルに近いテーマから選んでください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次