第105回


GAS(Google Apps Script)は、GoogleスプレッドシートをはじめとするGoogle Workspaceのサービスをプログラムで操作できるスクリプト環境です。繰り返し作業の自動化やデータ集計、メール送信など、手作業では時間がかかる業務をコードで効率化できます。
本記事では、GASの基本的な概念からスクリプトエディタの開き方、実際に使えるコード例まで、企業のIT担当者が導入・活用を進めるうえで必要な情報を順序立てて解説します。プログラミング経験が浅い方でも理解できるよう、丁寧に説明していきます。

GAS(Google Apps Script)は、Googleが提供するクラウドベースのスクリプト実行環境です。JavaScriptをベースとした言語でコードを記述し、スプレッドシートやGmail、Googleカレンダーなど複数のGoogleサービスを連携して操作できます。
GASはGoogleのサーバー上で動作するため、ユーザーのPCに特別なソフトウェアをインストールする必要がありません。ブラウザさえあれば、どのデバイスからでもスクリプトを作成・実行できる点が特長のひとつです。
GASで自動化できる主な作業の範囲を以下の表にまとめます。
| カテゴリ | できること | 対象サービス |
|---|---|---|
| データ処理 | セルへの読み書き、行の追加・削除、シートの並べ替え | スプレッドシート |
| メール操作 | メールの自動送信、受信メールの解析・振り分け | Gmail |
| カレンダー連携 | 予定の自動作成・更新、イベント情報の取得 | Googleカレンダー |
| フォーム処理 | 回答の自動整理、スプレッドシートへのデータ転記 | Googleフォーム |
| ドキュメント生成 | テンプレートへのデータ差し込み、PDF出力 | Googleドキュメント |
| 外部連携 | 外部APIへのHTTPリクエスト、Slackやチャットへの通知 | UrlFetchApp |
| 定期実行 | 毎日・毎時など指定したタイミングでの自動処理 | トリガー機能 |
上記のように、GASはスプレッドシートの自動化だけに限らず、Gmail、カレンダー、フォームなどのGoogleサービス全体をつなぐ連携基盤として機能します。複数のサービスをまとめて自動化できる点で、業務効率化の幅が大きく広がります。
GASをスプレッドシートと組み合わせることで得られる主なメリットを整理します。
特に「毎朝手動でデータをコピーして集計している」「月次レポートをひとつずつ作成して関係者にメールを送っている」といった定型業務を多く抱える職場では、GASの導入効果が出やすいといえます。
スプレッドシートの自動化手段としては、MicrosoftのExcelマクロ(VBA)と比較されることがよくあります。以下の表で、主な違いをまとめます。
| 比較項目 | Excelマクロ(VBA) | GAS(Google Apps Script) |
|---|---|---|
| 動作環境 | ユーザーのPC上(Officeアプリ内) | Googleのクラウドサーバー上 |
| 使用言語 | VBA(Visual Basic for Applications) | JavaScript(GAS仕様) |
| 実行条件 | PCの電源が入っている必要がある | PC不要。クラウド上で定期実行できる |
| 連携サービス | 主にOfficeアプリ間の連携 | GmailやGoogleカレンダー等との連携が容易 |
| 費用 | Officeライセンスが必要 | Googleアカウントがあれば無料で利用可能 |
| 共有・管理 | ファイルにマクロが紐づくため管理が複雑になりやすい | スクリプトプロジェクト単位で管理・共有しやすい |
| セキュリティ | マクロ有効ファイルの取り扱いに注意が必要 | Googleのセキュリティ基盤に準拠 |
ExcelマクロはPC上で完結する処理に向いており、既存のOffice環境が整っている組織では引き続き有効な選択肢です。
一方でGASは、クラウドベースで複数のGoogleサービスを横断した自動化を行いたい場合や、Google Workspaceを中心に業務を進めている組織では非常に相性がよい手段です。どちらが適しているかは、組織の利用環境と自動化したい業務の内容によって異なります。

GASのコードを書く場所は「スクリプトエディタ」です。スプレッドシートのメニューから簡単に開くことができ、特別な開発環境のセットアップは不要です。初めてGASを使う方でも、数クリックで操作を始められます。
スクリプトエディタはGoogleスプレッドシートのメニューから直接開くことができます。手順は以下のとおりです。
初回起動時には、プロジェクト名の入力を求められる場合があります。任意の名前を設定してください。スクリプトエディタは、開いているスプレッドシートに紐づく形で起動します。スプレッドシートに紐づいたスクリプトは「コンテナバインドスクリプト」と呼ばれ、スプレッドシートの操作と連動して動作させやすい特長があります。
なお、スプレッドシートを介さずに独立したスクリプトプロジェクトを作成したい場合は、Google Drive上で「新規」→「その他」→「Google Apps Script」を選択する方法もあります。こちらは「スタンドアロンスクリプト」と呼ばれ、特定のスプレッドシートに縛られない汎用的なスクリプトを作成する際に使います。
スクリプトエディタを開くと、以下の要素が表示されます。各部の役割を把握しておくと、操作がスムーズになります。
| 画面要素 | 役割・説明 |
|---|---|
| コードエディタ(中央) | スクリプト(コード)を記述するメインの作業エリア。デフォルトでmyFunction()の雛形が表示される |
| ファイル一覧(左サイドバー) | プロジェクト内のファイル(.gsファイル)が一覧表示される。複数のスクリプトファイルを作成して管理できる |
実行ボタン( ) |
選択中の関数を手動で実行するボタン。動作確認や初回テストに使用する |
| 保存ボタン | 記述したコードを保存する。Ctrl+S(Cmd+S)のショートカットも利用可能 |
| 関数選択プルダウン | 実行する関数を選択するドロップダウン。プロジェクト内に複数の関数がある場合に使用する |
| ログパネル(下部) | Logger.log()で出力したメッセージや、実行結果・エラー情報が表示される |
| トリガーメニュー | 左サイドバーの時計アイコン。スクリプトを定期実行するトリガーの設定・管理画面を開く |
エディタ画面は直感的な構成になっており、コードを書いて実行ボタンを押すだけで動作確認できます。実行後は下部のログパネルに結果が表示されるため、スクリプトが意図どおりに動いているかをすぐ確認できる点が便利です。

GASのコードはJavaScriptをベースとしており、スプレッドシートを操作するための専用クラスが用意されています。基本的な構文とスプレッドシートの操作方法を理解することで、実用的なスクリプトを作成できるようになります。
GASの処理は「関数(function)」の単位で記述します。スクリプトエディタに記載するコードの基本的な形は以下のとおりです。
function 関数名() {
// 実行したい処理をここに記述する
}
関数名はアルファベットで始める必要があり、任意の名前をつけることができます。スクリプトエディタの関数選択プルダウンから実行したい関数を選び、実行ボタン(
)をクリックすると処理が動き出します。
初回実行時には「このアプリにアクセスを許可しますか?」という確認画面(認証フロー)が表示されます。Googleアカウントにサインインした状態で「許可」を選択することで、スクリプトがスプレッドシートや他のGoogleサービスにアクセスできるようになります。認証は一度行えば、同じスクリプトプロジェクトでは再度求められません。
注意:認証フローで表示される「このアプリはGoogleで確認されていません」という警告は、自分で作成したスクリプトに対しても表示されます。自身が作成したスクリプトであることを確認したうえで「詳細」→「〜(安全でないページ)に移動」から許可を進めてください。他者から共有されたスクリプトを実行する際は、コードの内容を必ず確認してから認証を行うことを推奨します。
GASでスプレッドシートを操作する際に使う主なオブジェクトは「SpreadsheetApp」「Sheet(シートオブジェクト)」「Range(セル範囲オブジェクト)」の3種類です。これらを組み合わせることで、セルへのデータ読み書きが実現できます。
セルのデータを取得してログに出力する基本的なコード例を以下に示します。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var value = sheet.getRange("A1").getValue();
Logger.log(value);
}
各行の意味は以下のとおりです。
次に、セルへデータを書き込む場合のコード例を示します。
function writeToSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
sheet.getRange("B1").setValue("GASからの書き込みです");
}
上記のコードを実行すると、B1セルに「GASからの書き込みです」というテキストが入力されます。getValue()で読み取り、setValue()で書き込むという組み合わせが基本パターンです。複数のセルをまとめて操作したい場合は、getRange("A1:C3")のように範囲指定したうえで、getValues()やsetValues()(配列形式)を使います。
GASのトリガー機能を使うと、スクリプトを特定のタイミングで自動実行できます。手動で実行ボタンを押さなくても、定期的または特定のイベントをきっかけに処理が動きます。
トリガーの主な種類は以下のとおりです。
| トリガーの種類 | 実行タイミング | 主な用途 |
|---|---|---|
| 時間主導型(毎分) | 1分おきに実行 | リアルタイムに近いデータ更新 |
| 時間主導型(毎時) | 1時間おきに実行 | 定期的なデータ集計 |
| 時間主導型(毎日) | 指定した時間帯に1日1回実行 | 朝の集計レポート送信など |
| 時間主導型(毎週) | 指定した曜日・時間帯に実行 | 週次レポートの自動送信など |
| 時間主導型(毎月) | 月の指定日に実行 | 月次集計・請求書生成など |
| スプレッドシートの起動時 | スプレッドシートを開いたとき | 初期化処理や通知の表示 |
| スプレッドシートの変更時 | シートの値が変更されたとき | 入力値のバリデーションや自動計算 |
| フォーム送信時 | Googleフォームが送信されたとき | 回答の自動転記・通知メール送信 |
トリガーの設定手順は次のとおりです。スクリプトエディタの左サイドバーにある時計アイコン(トリガー)をクリックし、「トリガーを追加」ボタンを押します。実行する関数、トリガーのソース(時間主導型かスプレッドシート等かを選択)、実行タイミングをそれぞれ設定して保存すれば完了です。設定したトリガーはGoogleのサーバー上で管理されるため、PCの電源状態に関係なく動作します。

GASの実用的なコード例を紹介します。スプレッドシートへの自動入力やメール送信など、業務でよく求められる処理をサンプルコードとともに解説します。実際の業務に合わせてコードを調整してご活用ください。
スクリプト実行日時を自動でセルに記録するのは、業務ログや更新履歴を管理する際によく使われる処理です。以下のコードは、実行するたびにシートの最終行の次の行にタイムスタンプと任意のメッセージを書き込みます。
function appendLog() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("ログ"); // シート名を指定
var lastRow = sheet.getLastRow(); // データが入っている最終行を取得
var now = new Date();
sheet.getRange(lastRow + 1, 1).setValue(now); // A列に現在日時を記入
sheet.getRange(lastRow + 1, 2).setValue("処理完了"); // B列にステータスを記入
}
getLastRow()はデータが入力されている最終行の行番号を返すメソッドです。常にデータの末尾に追記する形になるため、既存のデータを上書きする心配がありません。シート名を変更したい場合は、getSheetByName()の引数を実際のシート名に合わせて書き換えてください。
GASではGmailApp.sendEmail()を使ってGmailからメールを自動送信できます。以下のコードは、指定した宛先・件名・本文でメールを1通送信するシンプルな例です。
function sendAutoEmail() {
var to = "sample@example.com"; // 送信先メールアドレス
var subject = "GASからの自動送信テスト";
var body = "このメールはGoogle Apps Scriptによって自動送信されました。";
GmailApp.sendEmail(to, subject, body);
}
宛先・件名・本文をスクリプト内に直接書く方法に加えて、スプレッドシートに入力された値を使って動的にメールを送る応用も可能です。たとえばA列に宛先リスト、B列に個別メッセージが入力されている場合、ループ処理で各行のデータを取り出してメールを送ることができます。
function sendEmailsFromSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("送信リスト");
var lastRow = sheet.getLastRow();
for (var i = 2; i <= lastRow; i++) { // 2行目からデータ行として処理
var to = sheet.getRange(i, 1).getValue();
var name = sheet.getRange(i, 2).getValue();
var subject = name + " 様へのご連絡";
var body = name + " 様\n\nこのメールはGASにより自動送信されました。";
GmailApp.sendEmail(to, subject, body);
}
}
送信リストをスプレッドシートで管理することで、メールアドレスや個別メッセージの追加・修正をシート上で簡単に行えます。メール送信の自動化は、社内報告や顧客への定期連絡など、一定のリストに向けて同じフォーマットのメールを繰り返し送る業務に特に効果的です。
スプレッドシートの集計結果を毎朝指定した担当者にメールで送る、といった定期レポート配信を自動化することで、手動での報告作業を大幅に削減できます。
以下のコードは、「集計」シートのA1セルの値を本文に含めてメールを送信するサンプルです。
function sendDailyReport() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("集計");
var totalSales = sheet.getRange("A1").getValue();
var today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");
var to = "manager@example.com";
var subject = today + " 日次売上レポート";
var body = "お疲れさまです。\n\n本日の売上合計:" + totalSales + " 円\n\n※本メールはGASにより自動送信されています。";
GmailApp.sendEmail(to, subject, body);
}
送信先・件名・本文の各変数をスプレッドシートから取得するよう拡張すれば、より柔軟なレポート配信が実現できます。このスクリプトに「毎日・午前8時〜9時」のトリガーを設定することで、毎朝自動でレポートメールが届く仕組みが完成します。
Googleフォームはデフォルトでスプレッドシートに回答を記録しますが、GASを組み合わせることで回答データのさらなる加工や他シートへの転記が自動化できます。
フォームの送信をトリガーにして、特定の条件に合致する回答だけを別シートに転記するコード例を示します。
function onFormSubmit(e) {
var responses = e.values; // フォームの回答データ(配列)
var category = responses[2]; // 3列目の回答を取得(例:カテゴリ)
var ss = SpreadsheetApp.getActiveSpreadsheet();
var targetSheet;
if (category === "営業") {
targetSheet = ss.getSheetByName("営業");
} else if (category === "サポート") {
targetSheet = ss.getSheetByName("サポート");
} else {
targetSheet = ss.getSheetByName("その他");
}
targetSheet.appendRow(responses); // 対象シートの末尾に行を追加
}
上記のコードをフォーム送信時のトリガーに設定することで、フォーム回答が届くたびに「営業」「サポート」「その他」のカテゴリ別シートに自動で振り分けられます。問い合わせフォームや申請フォームの回答を担当部署ごとに整理する際に活用できます。appendRow()はシートの末尾に1行追加するメソッドで、データ蓄積型の処理に適しています。
サテライトオフィスの業務自動化のためのGASアプリ一覧はこちら

GASでスプレッドシートを操作する際に頻繁に使うメソッドを一覧で紹介します。各メソッドの役割と使用例を把握しておくことで、スクリプト作成のスピードが上がります。
スプレッドシートを操作するGASの主要なメソッドをカテゴリ別にまとめます。
| メソッド | 対象オブジェクト | 役割 | 使用例 |
|---|---|---|---|
| getActiveSpreadsheet() | SpreadsheetApp | 現在開いているスプレッドシートを取得 | SpreadsheetApp.getActiveSpreadsheet() |
| getActiveSheet() | Spreadsheet | 現在アクティブなシートを取得 | ss.getActiveSheet() |
| getSheetByName(name) | Spreadsheet | 名前を指定してシートを取得 | ss.getSheetByName("Sheet1") |
| getRange(a1Notation) | Sheet | セル範囲を指定して取得 | sheet.getRange("A1:C3") |
| getRange(row, col) | Sheet | 行・列の番号でセルを指定 | sheet.getRange(1, 1) |
| getValue() | Range | セルの値を1つ取得 | range.getValue() |
| getValues() | Range | 範囲内の値を2次元配列で取得 | range.getValues() |
| setValue(value) | Range | セルに値を1つ書き込む | range.setValue("入力値") |
| setValues(values) | Range | 範囲に2次元配列で値を書き込む | range.setValues([[1,2],[3,4]]) |
| getLastRow() | Sheet | データが入力されている最終行の行番号を取得 | sheet.getLastRow() |
| getLastColumn() | Sheet | データが入力されている最終列の列番号を取得 | sheet.getLastColumn() |
| appendRow(rowContents) | Sheet | シートの末尾に1行追加する | sheet.appendRow(["値1","値2"]) |
| deleteRow(rowPosition) | Sheet | 指定した行を削除する | sheet.deleteRow(3) |
| clearContents() | Range | 指定セル範囲の値をクリアする(書式は保持) | range.clearContents() |
| setBackground(color) | Range | セルの背景色を設定する | range.setBackground("#FFFF00") |
| setFontColor(color) | Range | セルの文字色を設定する | range.setFontColor("#FF0000") |
| sort(columnPosition) | Range | 指定列を基準に並べ替える | range.sort(1) |
上記のメソッドを組み合わせることで、データの取得・書き込み・書式設定・行列操作といったスプレッドシート上の処理の大部分をカバーできます。まず「getRange」「getValue/setValue」「getLastRow」「appendRow」の4つを覚えるだけでも、実用的なスクリプトを多数作成できます。慣れてきたら書式設定やソート機能を加えて、より完成度の高い自動化を目指してみてください。

GASには便利な機能が多い一方で、無料版・有料版を問わず実行時間の上限や各種クォータ(割り当て量)による制限があります。制限事項を事前に把握しておくことで、スクリプト設計の際に問題を避けることができます。
GASには1回のスクリプト実行につき処理できる最大時間が定められています。この上限を超えると、処理の途中でスクリプトが強制終了されます。
| アカウントの種類 | 1回の実行時間の上限 |
|---|---|
| 無料のGoogleアカウント | 最大6分 |
| Google Workspaceアカウント | 最大30分 |
大量データの処理や複雑な繰り返し処理を行う場合、6分または30分の壁にぶつかることがあります。実行時間が長くなりそうなスクリプトを設計する際は、以下のような対策が有効です。
GASの実行時間の上限は無料版と有料版(Google Workspace)で大きく異なるため、業務規模が大きくなるほどGoogle Workspaceの導入が実質的に必要になる場面が増えます。
サテライトオフィスの業務自動化のためのGASアプリ一覧はこちら
GASには実行時間以外にも、各サービスの操作に対するクォータ(1日あたりの上限回数・量)が設定されています。無料のGoogleアカウントでは特に制限が厳しく、大量の処理を行う業務には向きません。
主要なクォータの比較を以下の表に示します。
| 機能 | 無料のGoogleアカウント(1日あたり) | Google Workspace(1日あたり) |
|---|---|---|
| メール送信(GmailApp) | 100通 | 1,500通 |
| スプレッドシートの読み書き | 制限あり(数万セル程度) | 制限あり(無料より大幅に緩和) |
| URL取得(UrlFetchApp) | 20,000リクエスト | 100,000リクエスト |
| トリガーの合計実行時間 | 90分/日 | 6時間/日 |
| スクリプトプロパティの書き込み | 50,000回 | 500,000回 |
クォータの詳細はGoogleが定期的に更新するため、最新の数値はGoogleの公式ドキュメント(Google Apps Script のクォータのページ)で確認することを推奨します。
注意:クォータを超えると、スクリプトがエラーで停止します。「Exception: Service using too much computer time for one day」というエラーが出た場合はトリガーの実行頻度を下げるか、Google Workspaceへの移行を検討してください。無料アカウントでの業務利用は小規模なテスト・試作段階にとどめ、本格運用ではGoogle Workspaceを利用することが安定稼働のポイントです。
クォータの制約を踏まえると、組織全体で業務自動化にGASを活用する場合はGoogle Workspaceの利用が実質的な前提条件となります。特にメール送信を伴う業務では、無料アカウントの100通/日という制限がすぐに問題になります。
※プライバシーポリシはこちら

本記事では、GASを使ってスプレッドシートを自動化する方法として、以下の内容を解説しました。
GASの活用は、スプレッドシート単体の自動化にとどまりません。Gmail・Googleカレンダー・Googleフォームといった他のGoogle Workspaceツールと組み合わせることで、組織全体のワークフローを自動化・効率化できます。
GASを活用した業務自動化を組織全体で本格的に導入するには、Google Workspaceの適切なプラン選定と運用体制の整備が欠かせません。
サテライトオフィスは、Google Workspaceプレミアパートナーとして8万社以上のアドオンツールの導入実績を持ちます。Google Workspaceの各エディションの比較・選定から、GASを活用した業務自動化の設計・運用支援まで、組織の規模やニーズに合わせたサポートを提供しています。
「どのGoogle Workspaceプランが自社に適しているかわからない」「GASで実現できる自動化の範囲を相談したい」「現行の運用をクラウドに移行したい」といったご相談は、ぜひサテライトオフィスにお問い合わせください。
サテライトオフィスの業務自動化のためのGASアプリ一覧はこちら
※プライバシーポリシはこちら