スプレッドシート

【2026年版】GAS入門ガイド|スプレッドシート自動化の始め方を完全解説

Google Apps Script入門 スプレッドシート自動化の始め方を示すサムネイル画像
しんたろ。

VBAユーザーなら、GASは2時間で使えるようになります。無料で業務自動化を始めましょう!

この記事でわかること
  • GASの基本概念と連携サービス一覧
  • 環境構築不要で5分で始められるGASの使い方
  • スプレッドシート操作の基本コード
  • 業務自動化の実践例3つ(完成品コード付き)
  • Excel VBAユーザーのためのGAS移行ガイド
  • トリガー設定で完全自動化する方法
この記事の目次
  1. GAS(Google Apps Script)とは?3分で理解する基礎知識
  2. Excel VBAユーザーのためのGAS入門
  3. GASの始め方【環境構築〜Hello World】
  4. スプレッドシート操作の基本【コピペOKコード付き】
  5. GASで業務を自動化する【3つの実践ユースケース】
  6. トリガー設定で完全自動化する
  7. 外部API連携とChatGPT連携
  8. よくあるエラーと対処法
  9. よくある質問(FAQ)
  10. まとめ
  11. LINEでExcelを気軽に学べる

GAS(Google Apps Script)とは?3分で理解する基礎知識

Google Apps Script(GAS)は、Googleが提供する無料のスクリプト環境です。Gmail、Googleスプレッドシート、Googleドライブなど、Googleサービス全体をJavaScriptベースのコードで自動化できます。

ExcelのVBAがMicrosoft Office製品を操作するように、GASはGoogleサービスを操作するプログラミング環境と考えるとわかりやすいでしょう。

GASの概要と3つの特徴(無料・環境不要・JavaScript互換)

GASが多くのビジネスパーソンに支持される理由は、次の3つの特徴にあります。

特徴1:完全無料で使える

Googleアカウントさえあれば、追加費用ゼロで利用できます。VBAのようにMicrosoft Officeのライセンスは不要です。個人のGmailアカウントでもGoogle Workspaceアカウントでも使えます。

特徴2:環境構築不要、ブラウザだけでOK

開発環境のインストールは一切不要です。ブラウザ(Chrome推奨)でスプレッドシートを開き、「拡張機能」→「Apps Script」を選ぶだけでコードを書き始められます。5分で最初のスクリプトを実行できます。

特徴3:JavaScriptベースで学習コストが低い

GASの文法はJavaScriptとほぼ同じです。Web開発の経験がある方はもちろん、VBAの経験があれば文法の違いはわずかです。ChatGPTにコード生成を頼む際も、JavaScript系は最も精度が高い言語の一つです。

VBAではExcelの起動が必要ですが、GASはブラウザさえあればどこからでも実行できます。また、JavaScriptの知識はWeb開発にも応用できるため、学習コストの投資効率が非常に高いのも魅力です。

GASでできること一覧(連携サービスマップ)

GASは単体のツールではなく、Googleの各サービスを橋渡しする自動化基盤です。以下の表で、GASが連携できるサービスと具体的にできることを一覧にまとめました。

連携サービスGASクラス名できること(例)
スプレッドシートSpreadsheetAppセル読み書き、自動集計、データ整形、帳票生成
GmailGmailAppメール自動送信、一斉送信、添付ファイル処理、ラベル付け
GoogleドライブDriveAppファイル作成・移動・共有、フォルダ管理、PDF変換
GoogleフォームFormApp回答収集の自動化、回答内容に応じたメール通知
GoogleカレンダーCalendarApp予定の自動登録、リマインダー送信、スケジュール一覧出力
GoogleスライドSlidesAppテンプレートから自動生成、データ差し込み
GoogleドキュメントDocumentApp請求書・報告書の自動生成、テキスト置換
外部APIUrlFetchAppChatGPT連携、X(旧Twitter)投稿、Slack通知、LINE通知

このように、GASはGoogleサービス同士を繋げる「接着剤」として機能します。単独のサービスでは手作業が必要な処理も、GASで自動化すれば手間がなくなります。

料金と制限(Google Workspace プラン別比較表)

GASは無料のGoogleアカウントでも利用可能です。ただし、プランによって1日の実行制限に差があります。

制限項目無料(Gmail)Google Workspace
スクリプト実行時間(1回)6分6分(※30分に拡張可)
トリガー合計実行時間/日90分6時間
メール送信数/日100通1,500通
UrlFetch呼び出し/日20,000回100,000回
トリガー数20個/ユーザー20個/ユーザー
スプレッドシートの作成/日250件250件

個人の業務自動化であれば、無料プランの制限で十分です。1日100通のメール送信や20,000回のAPI呼び出しが可能なので、大半の自動化ニーズをカバーできます。大量処理が必要な場合はGoogle Workspaceの導入を検討しましょう。

スクリプトの実行を体験してみよう!

「▶ 実行」ボタンを押すと、GASの動作をシミュレーション体験できます(JavaScript不使用・CSS-onlyアニメーション)。

1 スプレッドシート操作デモ
</> Apps Script – writeToSheet.gs
1function writeToSheet() {
2  const sheet = SpreadsheetApp.getActiveSheet();
3  sheet.getRange(“A1”).setValue(“Hello GAS!”);
4  sheet.getRange(“B1”).setValue(100);
5  sheet.getRange(“C1”).setValue(new Date());
6}
実行ボタンでセルに値が書き込まれます
実行ログ – writeToSheet
09:00:01[INFO] 実行開始…
09:00:01[INFO] セルA1に “Hello GAS!” を書き込み
09:00:02[INFO] セルB1に 100 を書き込み
09:00:02[INFO] セルC1に現在日時を書き込み
09:00:02[OK] 実行完了(0.8秒)
売上管理 – Google スプレッドシート
ABC
1 (空白) Hello GAS! (空白) 100 (空白) 2026/03/02 9:00
2
3
シート1 100%
✅ 3つのセルにデータが書き込まれました!
☝ GASならスプレッドシートのセル操作を自動化できます

2 メール自動送信デモ
</> Apps Script – sendEmail.gs
1function sendEmail() {
2  GmailApp.sendEmail(
3    “example@gmail.com”,
4    “【自動送信】月次レポート”,
5    “今月の売上データを添付します。”
6  );
7}
実行ボタンでメール送信を再現します
実行ログ – sendEmail
09:00:01[INFO] 実行開始…
09:00:02[INFO] GmailApp.sendEmail() を呼び出し
09:00:03[INFO] 宛先: example@gmail.com
09:00:03[OK] メール送信完了(1.2秒)
メールを送信しました — 件名:「【自動送信】月次レポート」
✅ GmailApp.sendEmail() でメールが送信されました!
☝ トリガーと組み合わせれば毎日自動でレポート送信できます

3 トリガー設定デモ
⚙ トリガーを追加
実行する関数を選択
sendEmail
イベントのソースを選択
時間主導型
実行頻度を選択
トリガーを保存しました
📅 次回実行: 明日 午前 9:00〜10:00 次回実行: 明日 午前 9:00〜10:00 次回実行: 来週月曜 午前 9:00〜10:00 次回実行: フォーム送信を検知次第

Excel VBAユーザーのためのGAS入門

ExcelのVBAを使ったことがある方なら、GASの習得は非常にスムーズです。ここでは、VBAとGASの文法の違いを比較しながら、最短ルートでGASを理解できるように解説します。

VBAとGASの文法比較表(7つの対応例)

以下の表で、VBAの基本構文がGASではどう書くかを一覧にしました。

操作VBAGAS(JavaScript)
プロシージャ定義Sub 名前()function 名前() {}
変数宣言Dim x As Stringconst x = “” / let x = “”
メッセージ表示MsgBox “テキスト”Browser.msgBox(“テキスト”)
セルの値を取得Range(“A1”).ValuegetRange(“A1”).getValue()
ループ処理For Each item In colarray.forEach(item => {})
アクティブシート取得ActiveSheetSpreadsheetApp.getActiveSheet()
ワークシート関数WorksheetFunction.Sum()JavaScriptで直接計算
ファイルパス取得ThisWorkbook.PathDriveApp.getFileById(id)

VBAのSubがGASのfunctionに対応し、Range("A1").ValueがGASのgetRange("A1").getValue()に対応するなど、概念はほぼ同じです。JavaScriptの文法に慣れるだけで、すぐにGASを書けるようになります。

VBAの○○はGASではこう書く(7つのコード比較)

ここからは、VBAの代表的な処理がGASではどう書くかを、実際のコードで比較します。すべてのコードはコピーしてそのまま使えます。

1. プロシージャの定義(Sub → function)

VBAの書き方:

Sub SayHello()
    MsgBox "Hello!"
End Sub

GASの書き方:

function sayHello() {
  Browser.msgBox("Hello!");
}

VBAではSubEnd Subでプロシージャを囲みますが、GASではfunction{}(波括弧)で囲みます。関数名はキャメルケース(先頭小文字)が推奨です。

2. セルの値を取得(Range → getRange)

VBAの書き方:

Dim val As String
val = Range("A1").Value

GASの書き方:

const val = SpreadsheetApp.getActiveSheet().getRange("A1").getValue();

GASではシートオブジェクトを経由してセルにアクセスします。VBAのRangeプロパティに直接アクセスする方法とは異なり、SpreadsheetApp.getActiveSheet()でシートを取得してから操作します。

3. 繰り返し処理(For Each → forEach)

VBAの書き方:

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    Debug.Print ws.Name
Next ws

GASの書き方:

const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
sheets.forEach(sheet => {
  Logger.log(sheet.getName());
});

GASではJavaScriptのforEachメソッドを使って配列をループします。アロー関数(=>)を使うと、VBAのFor Eachよりも簡潔に書けます。

4. アクティブシートの取得(ActiveSheet → getActiveSheet)

VBAの書き方:

Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("A1").Value = "テスト"

GASの書き方:

const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A1").setValue("テスト");

5. ワークシート関数の利用(WorksheetFunction → JavaScript計算)

VBAの書き方:

Dim total As Double
total = Application.WorksheetFunction.Sum(Range("A1:A10"))

GASの書き方:

const values = SpreadsheetApp.getActiveSheet().getRange("A1:A10").getValues();
const total = values.flat().reduce((sum, v) => sum + (Number(v) || 0), 0);

GASにはWorksheetFunctionに相当するものがないため、JavaScriptの配列メソッド(reduce, filter, mapなど)を使って計算します。慣れるとVBAより柔軟に書けます。

6. ファイルパスの取得(ThisWorkbook.Path → DriveApp)

VBAの書き方:

Dim filePath As String
filePath = ThisWorkbook.Path

GASの書き方:

const fileId = SpreadsheetApp.getActiveSpreadsheet().getId();
const file = DriveApp.getFileById(fileId);
const folders = file.getParents();
if (folders.hasNext()) {
  Logger.log("フォルダ: " + folders.next().getName());
}

GASはクラウド上で動作するため、ローカルのファイルパスという概念がありません。代わりにDriveAppを使ってGoogleドライブ上のファイル位置を取得します。

7. メッセージボックスの確認ダイアログ(MsgBox → Browser.msgBox)

VBAの書き方:

Dim result As VbMsgBoxResult
result = MsgBox("続行しますか?", vbYesNo)
If result = vbYes Then
    MsgBox "実行します"
End If

GASの書き方:

const result = Browser.msgBox("続行しますか?", Browser.Buttons.YES_NO);
if (result === "yes") {
  Browser.msgBox("実行します");
}

VBAのvbYesNoがGASではBrowser.Buttons.YES_NOに対応します。戻り値は文字列("yes"/"no")で返される点に注意してください。

VBAのプロシージャの基本(Sub/Function)について詳しく知りたい方は、VBAのSubとFunctionの違いをご覧ください。また、VBAの変数宣言(Dim)の使い方はVBAのDim宣言の使い方で詳しく解説しています。

VBAからGASに移行するメリット・デメリット

VBAからGASへの移行を検討する際は、以下のメリット・デメリットを把握しておきましょう。

移行のメリット
  • 完全無料:Excelのライセンス費用が不要(Microsoft 365の契約不要)
  • 環境不要:ブラウザだけで開発・実行が完結(PCにExcelがなくてもOK)
  • 自動実行:トリガー機能でPCを起動していなくてもサーバー側で実行される
  • 共有が簡単:Googleアカウントがあれば誰でもスクリプトを共有・共同編集できる
  • 外部連携が豊富:Gmail、Googleドライブ、外部APIとの連携が標準サポート
移行のデメリット
  • 実行速度:VBAの方がローカル実行のため処理速度が速い場合がある
  • 実行時間制限:1回の実行が6分まで(VBAは時間制限なし)
  • Excel固有機能:ピボットテーブル操作やActiveXコントロールなど一部未対応
  • オフライン非対応:インターネット接続が必須(VBAはオフラインでも動作)
  • 学習コスト:JavaScript文法を新たに覚える必要がある(ただしVBA経験者なら短期間で習得可能)

結論:社内でGoogleスプレッドシートを主に使っている環境であれば、GASへの移行メリットは大きいです。一方、Excelファイルでの配布が必須な業務では、引き続きVBAの方が適しています。両方使えるようになるのが理想的です。

GASの始め方【環境構築〜Hello World】

GASを始めるのに必要な準備は、Googleアカウントだけです。ソフトウェアのインストールは一切不要で、ブラウザから直接コードを書いて実行できます。

スクリプトエディタの開き方(コンテナバインド型 / スタンドアロン型)

GASには2つの作成方法があります。用途に応じて使い分けましょう。

方法1:コンテナバインド型(スプレッドシートに紐づけ)

スプレッドシートに紐づいたスクリプトで、最もよく使われる方法です。

  1. Googleスプレッドシートを開く
  2. メニューから「拡張機能」→「Apps Script」をクリック
  3. スクリプトエディタが新しいタブで開く

コンテナバインド型はSpreadsheetApp.getActiveSpreadsheet()で紐づいたスプレッドシートに直接アクセスできるため、スプレッドシートの操作に最適です。

方法2:スタンドアロン型(独立したスクリプト)

特定のファイルに紐づかない独立したスクリプトです。

  1. Googleドライブを開く
  2. 「新規」→「その他」→「Google Apps Script」をクリック
  3. スクリプトエディタが開く

スタンドアロン型は複数のスプレッドシートやサービスをまたいで処理する場合に適しています。また、script.google.comから直接アクセスすることもできます。

最初のスクリプト(スプレッドシートのセルに「Hello World」を書き込む)

では、実際にGASを動かしてみましょう。スプレッドシートのA1セルに「Hello, GAS!」と書き込むスクリプトです。

function myFirstFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange("A1").setValue("Hello, GAS!");
  Browser.msgBox("セルA1に書き込みました!");
}

実行手順:

  1. スプレッドシートから「拡張機能」→「Apps Script」を開く
  2. 既存のコードを削除し、上記のコードを貼り付ける
  3. 上部の「実行」ボタン(▶)をクリック
  4. 初回は承認画面が表示されるので「許可」をクリック
  5. スプレッドシートに戻ると、A1セルに「Hello, GAS!」が入力されている
初回の承認について

GASを初めて実行する際、「このアプリは確認されていません」という警告が表示されます。これは自分で作成したスクリプトでは正常な動作です。「詳細」→「(プロジェクト名)に移動」をクリックして承認してください。

スクリプトの実行を体験してみよう!
1 myFirstFunction() — Hello World
</> Apps Script – myFirstFunction.gs
1function myFirstFunction() {
2  SpreadsheetApp.getActiveSheet()
3    .getRange(“A1”).setValue(“Hello World!”);
4}
▶実行ボタンでA1セルに「Hello World!」が書き込まれます
実行ログ – myFirstFunction
10:00:01[INFO] 実行開始…
10:00:01[INFO] スプレッドシート取得: アクティブシート
10:00:01[INFO] セルA1に “Hello World!” を書き込み
10:00:01[OK] 実行完了(0.5秒)
スプレッドシート1 – Google スプレッドシート
ABC
1 (空白) Hello World!
2
✔ A1セルに「Hello World!」が書き込まれました SpreadsheetApp → getActiveSheet() → getRange() → setValue() の順で操作します

デバッグとログの確認方法(Logger.log / console.log)

GASでのデバッグには、Logger.logconsole.logの2つの方法があります。

function debugExample() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = sheet.getRange("A1").getValue();

  // 方法1: Logger.log(実行ログに表示)
  Logger.log("A1の値: " + value);

  // 方法2: console.log(Cloud Loggingに記録)
  console.log("A1の値:", value);

  // 変数の型を確認する
  Logger.log("型: " + typeof value);
}

ログの確認方法:

  • Logger.log:スクリプトエディタの「実行ログ」パネルに表示される(軽量で手軽)
  • console.log:左メニューの「実行数」から確認可能(Cloud Loggingに記録、永続的)

VBAのDebug.Printに相当するのがLogger.logです。開発中はLogger.logを使い、本番運用ではconsole.logでエラーを追跡すると効率的です。

スクリプトの実行を体験してみよう!
2 debugExample() — デバッグ出力
</> Apps Script – debugExample.gs
1function debugExample() {
2  const data = SpreadsheetApp.getActiveSheet()
3    .getRange(“A1”).getValue();
4  Logger.log(“取得した値: “ + data);
5  console.log(“コンソール出力: “ + data);
6}
Logger.log と console.log の出力を実行ログで確認できます
実行ログ – debugExample
10:05:01[INFO] 実行開始…
10:05:01[INFO] A1セルの値を取得: “東京”
10:05:01[Logger] 取得した値: 東京
10:05:01[console] コンソール出力: 東京
10:05:01[OK] 実行完了(0.4秒)
✔ Logger.log と console.log の両方でデバッグ出力を確認できます Logger.log はGASのログ表示パネルに、console.log はStackdriver Loggingに記録されます

スプレッドシート操作の基本【コピペOKコード付き】

GASでスプレッドシートを操作するには、SpreadsheetAppクラスを使います。ここでは、実務で頻出する操作パターンをそのままコピーして使えるコードで紹介します。

セルの読み書き(getValue / setValue)

最も基本となるセルの読み取りと書き込みのコードです。

function readWriteCell() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // セルの値を読み取り
  const value = sheet.getRange("A1").getValue();
  Logger.log("A1の値: " + value);

  // セルに値を書き込み
  sheet.getRange("B1").setValue("書き込みテスト");

  // 数値を書き込み
  sheet.getRange("C1").setValue(12345);

  // 数式を書き込み
  sheet.getRange("D1").setFormula("=SUM(A1:C1)");

  // 日付を書き込み
  sheet.getRange("E1").setValue(new Date());
}

VBAのRange("A1").ValueがGASではgetRange("A1").getValue()に対応します。getter/setterメソッドを使うのがGASの特徴です。

スクリプトの実行を体験してみよう!
3 readWriteCell() — セル読み書き
</> Apps Script – readWriteCell.gs
1function readWriteCell() {
2  const sheet = SpreadsheetApp.getActiveSheet();
3  const val = sheet.getRange(“A1”).getValue(); // “りんご”
4  sheet.getRange(“B1”).setValue(val + ” は果物です”);
5}
A1の値を読み取り、加工してB1に書き込みます
実行ログ – readWriteCell
10:10:01[INFO] 実行開始…
10:10:01[INFO] A1の値を取得: “りんご”
10:10:01[INFO] B1に書き込み: “りんご は果物です”
10:10:01[OK] 実行完了(0.6秒)
果物データ – Google スプレッドシート
ABC
1 りんご (空白) りんご は果物です
2
✔ A1「りんご」を読み取り、B1に「りんご は果物です」を書き込みました getValue() で読み取り → 加工 → setValue() で書き込みが基本パターンです

範囲操作(getValues / setValues)

複数のセルをまとめて操作する場合は、getValues()/setValues()を使います。1セルずつ読み書きするより大幅に高速です。

function rangeOperations() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // 範囲の値を一括取得(2次元配列)
  const data = sheet.getRange("A1:C10").getValues();
  Logger.log("取得したデータ: " + JSON.stringify(data));

  // 特定の値にアクセス(0始まりのインデックス)
  Logger.log("A1の値: " + data[0][0]); // 1行目1列目
  Logger.log("B3の値: " + data[2][1]); // 3行目2列目

  // 範囲に一括書き込み(行数・列数を一致させる)
  const output = [
    ["名前", "部署", "売上"],
    ["田中", "営業", 500000],
    ["佐藤", "開発", 450000]
  ];
  sheet.getRange("A1:C3").setValues(output);
}
パフォーマンスのコツ

GASではgetValue()/setValue()を1セルずつ繰り返し呼ぶと非常に遅くなります。必ずgetValues()/setValues()でまとめて読み書きしましょう。1,000行のデータでも一括操作なら数秒で完了します。

スクリプトの実行を体験してみよう!
4 rangeOperations() — 範囲操作
</> Apps Script – rangeOperations.gs
1function rangeOperations() {
2  const sheet = SpreadsheetApp.getActiveSheet();
3  const data = sheet.getRange(“A1:C2”).getValues();
4  sheet.getRange(“E1:G2”).setValues(data);
5}
getValues()で2D配列を取得し、setValues()で別範囲にコピーします
実行ログ – rangeOperations
10:15:01[INFO] 実行開始…
10:15:01[INFO] A1:C2 の範囲を取得(2行×3列)
10:15:01[DATA] [[“商品名”,”数量”,”単価”],[“りんご”,10,150]]
10:15:01[INFO] E1:G2 にデータを書き込み中…
10:15:02[OK] 実行完了(0.9秒)
範囲操作デモ – Google スプレッドシート
ABCDEFG
1 商品名 数量 単価 (空白) 商品名 (空白) 数量 (空白) 単価
2 りんご 10 150 (空白) りんご (空白) 10 (空白) 150
✔ A1:C2の2D配列をE1:G2にコピーしました getValues()は2次元配列を返し、setValues()で一括書き込みできます(1回のAPI呼び出しで効率的)

シートの追加・削除・コピー

シートの管理もGASで自動化できます。月次レポートのテンプレート自動生成などに活用できるパターンです。

function sheetManagement() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // 新しいシートを追加
  const newSheet = ss.insertSheet("売上データ_2026");

  // シートをコピー(同じスプレッドシート内)
  const original = ss.getSheetByName("テンプレート");
  if (original) {
    const copied = original.copyTo(ss);
    copied.setName("テンプレートのコピー");
  }

  // シートを削除(確認なしで即削除されるため注意)
  const oldSheet = ss.getSheetByName("古いシート");
  if (oldSheet) {
    ss.deleteSheet(oldSheet);
  }

  // 全シート名を一覧表示
  const sheets = ss.getSheets();
  sheets.forEach(sheet => {
    Logger.log(sheet.getName());
  });
}

insertSheet()でシートを追加し、copyTo()でコピー、deleteSheet()で削除します。deleteSheet()は確認ダイアログなしで即座に削除されるため、実行前にシート名を必ず確認しましょう。

スクリプトの実行を体験してみよう!
5 sheetManagement() — シート管理
</> Apps Script – sheetManagement.gs
1function sheetManagement() {
2  const ss = SpreadsheetApp.getActiveSpreadsheet();
3  const newSheet = ss.insertSheet();
4  newSheet.setName(“売上データ”);
5  newSheet.copyTo(ss).setName(“売上データ(コピー)”);
6}
シート追加・名前変更・コピーをプログラムで自動実行します
実行ログ – sheetManagement
10:20:01[INFO] 実行開始…
10:20:01[INFO] 新しいシートを挿入: “売上データ”
10:20:01[INFO] シートをコピー: “売上データ(コピー)”
10:20:02[OK] 実行完了(1.1秒)
管理台帳 – Google スプレッドシート
ABC
1 (シートが追加されます)
2
シート1
売上データ
売上データ(コピー)
✔ 「売上データ」シートを追加し、「売上データ(コピー)」としてコピーしました insertSheet() / setName() / copyTo() でシートをプログラム管理できます

データのフィルタリングと並び替え

スプレッドシートのデータを条件でフィルタリングしたり、並び替えたりする方法です。JavaScriptの配列メソッドを活用します。

function filterAndSort() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const header = data[0]; // 1行目をヘッダーとして保持
  const rows = data.slice(1); // 2行目以降がデータ

  // フィルタリング: C列(インデックス2)が80以上のデータ
  const filtered = rows.filter(row => row[2] >= 80);

  // 並び替え: C列の値で降順ソート
  filtered.sort((a, b) => b[2] - a[2]);

  // 結果を別シートに出力
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const outputSheet = ss.getSheetByName("結果") || ss.insertSheet("結果");
  outputSheet.clear();

  // ヘッダーを書き込み
  outputSheet.getRange(1, 1, 1, header.length).setValues([header]);

  // フィルタ結果を書き込み
  if (filtered.length > 0) {
    outputSheet.getRange(2, 1, filtered.length, filtered[0].length)
      .setValues(filtered);
  }

  Logger.log(filtered.length + "件のデータを出力しました");
}

JavaScriptのfilter()sort()メソッドを使えば、Excelのフィルター機能やVBAのAutoFilterと同等の処理がシンプルに書けます。getDataRange()を使うとデータが存在する範囲を自動検出するため、行数を気にする必要がありません。

スクリプトの実行を体験してみよう!
6 filterAndSort() — フィルタ・並び替え
</> Apps Script – filterAndSort.gs
1function filterAndSort() {
2  const sheet = SpreadsheetApp.getActiveSheet();
3  const range = sheet.getRange(“A1:C5”);
4  range.createFilter(); // フィルタを設定
5  range.sort({column: 2, ascending: false}); // B列降順
6}
フィルタを設定し、B列(数量)の降順で並び替えます
実行ログ – filterAndSort
10:25:01[INFO] 実行開始…
10:25:01[INFO] A1:C5 にフィルタを設定
10:25:01[INFO] B列(数量)で降順ソート実行中…
10:25:02[INFO] ソート完了: みかん(30)→りんご(10)→バナナ(5)の順
10:25:02[OK] 実行完了(1.3秒)
在庫管理 – Google スプレッドシート
A 商品名 B 数量 C 単価
1 みかん 30 80
2 ぶどう 25 300
3 りんご 10 150
4 バナナ 5 120
✔ フィルタを設定し、B列(数量)の降順に並び替えました createFilter() でフィルタ機能を追加し、sort() で並び替えができます。低数量の行(バナナ:5)がフィルタで絞り込まれています

GASで業務を自動化する【3つの実践ユースケース】

GASの基本操作を覚えたら、次は実務で使える自動化スクリプトを作ってみましょう。ここでは、そのままコピペで使える完成品コードを3つ紹介します。

ユースケース1: メール自動送信(完成品コード)

スプレッドシートに宛先リストを用意し、テンプレート変数を差し込んでGmailから一斉送信するスクリプトです。A列にメールアドレス、B列に名前、C列に会社名を入力して実行するだけで、全員にパーソナライズされたメールを送れます。

function sendBulkEmails() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getRange("A2:C" + sheet.getLastRow()).getValues();

  data.forEach(function(row) {
    const email = row[0];    // A列: メールアドレス
    const name = row[1];     // B列: 名前
    const company = row[2];  // C列: 会社名

    const subject = name + "様へのご案内";
    const body = name + "様\n\n"
      + "いつもお世話になっております。\n"
      + company + "の件についてご連絡いたします。\n\n"
      + "よろしくお願いいたします。";

    MailApp.sendEmail(email, subject, body);
  });

  Browser.msgBox("メール送信が完了しました!");
}
MailApp.sendEmail() の引数
  • 第1引数: 宛先メールアドレス(文字列)
  • 第2引数: 件名(文字列)
  • 第3引数: 本文(文字列)
  • HTML形式で送る場合は第4引数にオプション {htmlBody: '<h1>HTML</h1>'} を指定

1日あたりのメール送信上限は、無料のGoogleアカウントで100通、Google Workspaceで1,500通です。大量送信する場合は上限に注意してください。

スクリプトの実行を体験してみよう!
7 メール一括送信デモ
</> Apps Script – sendBulkEmails.gs
1function sendBulkEmails() {
2  const sheet = SpreadsheetApp.getActiveSheet();
3  const data = sheet.getDataRange().getValues();
4  for (let i = 1; i < data.length; i++) {
5    const [name, email, subject] = data[i];
6    GmailApp.sendEmail(email, subject,
7      `${name} 様、ご連絡ありがとうございます。`);
8  }
9}
スプレッドシートの全行に自動でメール送信します
実行ログ – sendBulkEmails
10:00:01[INFO] 実行開始… 3件のデータを取得
10:00:02[INFO] 送信: 田中太郎 <tanaka@example.com>
10:00:02[OK] ✓ 1件目 送信完了
10:00:03[INFO] 送信: 鈴木花子 <suzuki@example.com>
10:00:03[OK] ✓ 2件目 送信完了
10:00:04[OK] ✓ 3件目 送信完了 — 合計3通
「田中太郎」様へメール送信完了
「鈴木花子」様へメール送信完了
「佐藤一郎」様へメール送信完了
✅ 3名へのメール一括送信が完了しました!
☝ スプレッドシートのリストから宛先を取得し、全員に自動送信できます

ユースケース2: フォーム回答の自動集計+通知

Googleフォームに回答が届くたびに、自動で管理者にメール通知を送るスクリプトです。アンケートや問い合わせフォームの管理に最適で、回答を見逃す心配がなくなります。

function onFormSubmit(e) {
  const responses = e.values;
  const timestamp = responses[0];
  const name = responses[1];
  const email = responses[2];
  const message = responses[3];

  // 管理者に通知メール送信
  const adminEmail = "admin@example.com";
  const subject = "【フォーム回答】" + name + "さんから新しい回答";
  const body = "回答日時: " + timestamp + "\n"
    + "名前: " + name + "\n"
    + "メール: " + email + "\n"
    + "内容: " + message;

  MailApp.sendEmail(adminEmail, subject, body);
}

設定手順: スクリプトエディタの「トリガー」画面から、onFormSubmit を「フォーム送信時」に設定します。以降、フォームに回答が届くたびに自動でメール通知が送信されます。

スクリプトの実行を体験してみよう!
8 フォーム回答自動処理デモ
</> Apps Script – onFormSubmit.gs
1function onFormSubmit(e) {
2  const response = e.response;
3  const answers = response.getItemResponses();
4  const name = answers[0].getResponse();
5  const email = answers[1].getResponse();
6  GmailApp.sendEmail(email,
7    “回答を受け付けました”, `${name} 様`);
8}
フォーム送信をトリガーに自動処理が走ります
📄 お問い合わせフォーム
お名前
山田 花子
メールアドレス
yamada@example.com
お問い合わせ内容
GASの導入について詳しく教えてください
実行ログ – onFormSubmit
11:30:01[INFO] フォーム送信イベント検知
11:30:01[INFO] 回答者: 山田 花子
11:30:02[INFO] スプレッドシートへ記録中…
11:30:02[OK] 行追加完了
11:30:03[OK] 確認メール送信完了
お問い合わせ一覧 – Google スプレッドシート
A: 名前B: メールC: 内容
1 (見出し) (見出し) (見出し)
2 (空白) 山田 花子 (空白) yamada@example.com (空白) GASの導入につ…
シート1 100%
「山田 花子」様へ確認メール送信完了
✅ フォーム送信 → シート記録 → 確認メール送信が自動実行されました!
☝ onFormSubmit トリガーで、フォーム回答を受けた瞬間に処理できます

ユースケース3: SNS予約投稿

スプレッドシートに投稿スケジュールを管理し、GASとAPIを組み合わせてSNSへの予約投稿を自動化するワークフローです。X(旧Twitter)やThreadsなどのSNSに対応できます。

GASからX APIを使って自動投稿する仕組みは、トリガーと組み合わせることで完全自動化が実現できます。詳しい設定方法は以下の記事を参考にしてください。

関連: SNS予約投稿ツールの比較はこちら

関連: X APIのキー取得方法

トリガー設定で完全自動化する

GASのトリガー機能を使えば、スクリプトを手動で実行する必要がなくなります。「毎朝9時にレポート送信」「フォーム回答が届いたら即通知」など、完全自動のワークフローを構築できます。

時間主導型トリガー(毎日/毎週/毎月/分単位)

指定した時間間隔や特定の時刻にスクリプトを自動実行します。日次レポートの送信、定期的なデータバックアップなどに最適です。

function createTimeTrigger() {
  // 毎日午前9時に実行
  ScriptApp.newTrigger("dailyReport")
    .timeBased()
    .atHour(9)
    .everyDays(1)
    .create();
}

function createMinuteTrigger() {
  // 5分ごとに実行
  ScriptApp.newTrigger("checkUpdates")
    .timeBased()
    .everyMinutes(5)
    .create();
}

注意: トリガー設定関数は1回だけ実行すればOKです。2回実行すると同じトリガーが重複登録されるので気をつけてください。

スクリプトの実行を体験してみよう!
9 時間トリガー設定デモ
</> Apps Script – createTimeTrigger.gs
1function createTimeTrigger() {
2  ScriptApp.newTrigger(“sendBulkEmails”)
3    .timeBased()
4    .everyHours(1)
5    .create();
6  Logger.log(“トリガー作成完了”);
7}
1時間ごとに自動実行するトリガーを設定します
実行ログ – createTimeTrigger
12:00:01[INFO] ScriptApp.newTrigger(“sendBulkEmails”) 呼び出し
12:00:01[INFO] timeBased().everyHours(1) — 1時間ごと設定
12:00:02[INFO] create() — トリガーをプロジェクトに保存
12:00:02[OK] トリガー作成完了
⚙ 登録されたトリガー
実行する関数
sendBulkEmails
イベントのソース
時間主導型
実行間隔
🕑 1時間ごと
時間トリガーを保存しました
🕑 次回実行: 今から1時間後(13:00 頃)
✅ 1時間ごとに自動実行するトリガーが設定されました!
☝ ScriptApp.newTrigger() で様々な実行スケジュールを設定できます

イベント主導型トリガー(スプシ編集時/フォーム送信時)

スプレッドシートの編集やフォームの送信などのイベントをきっかけに、スクリプトを自動実行します。リアルタイムな自動化に最適です。

function createEditTrigger() {
  const ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("onSheetEdit")
    .forSpreadsheet(ss)
    .onEdit()
    .create();
}

function onSheetEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  Logger.log(sheet.getName() + "の" + range.getA1Notation() + "が編集されました");
}
シンプルトリガーとインストーラブルトリガーの違い
  • シンプルトリガー(onEdit, onOpen): 関数名を予約名にするだけで動作。ただしメール送信やUrlFetchAppなど一部の機能が使えない
  • インストーラブルトリガー: ScriptApp.newTrigger() で明示的に登録。全ての機能が利用可能で、エラー通知メールも受け取れる
  • 外部APIの呼び出しやメール送信が必要な場合は、インストーラブルトリガーを使いましょう
スクリプトの実行を体験してみよう!
10 編集トリガー設定デモ
</> Apps Script – createEditTrigger.gs
1function createEditTrigger() {
2  const ss = SpreadsheetApp.getActiveSpreadsheet();
3  ScriptApp.newTrigger(“onSheetEdit”)
4    .forSpreadsheet(ss)
5    .onEdit()
6    .create();
7}
スプレッドシートを編集するたびに実行されます
実行ログ – createEditTrigger
14:00:01[INFO] forSpreadsheet(ss).onEdit() — 編集イベント設定
14:00:01[INFO] create() — トリガーをプロジェクトに保存
14:00:02[OK] 編集トリガー作成完了
編集トリガーを保存しました
スプレッドシート編集時に onSheetEdit() が実行されます
✅ スプレッドシート編集をトリガーにする設定が完了しました!
☝ onEdit トリガーで、セルを変更した瞬間にコードを実行できます

トリガーの管理と監視

登録済みのトリガーは、スクリプトエディタの「トリガー」(時計アイコン)から一覧を確認できます。コードからも管理が可能です。

function listTriggers() {
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(function(trigger) {
    Logger.log("関数: " + trigger.getHandlerFunction() + " / 種別: " + trigger.getEventType());
  });
}

function deleteAllTriggers() {
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(function(trigger) {
    ScriptApp.deleteTrigger(trigger);
  });
}

不要なトリガーが溜まるとエラーの原因になるため、定期的に listTriggers() で確認し、使わないトリガーは削除しておきましょう。

スクリプトの実行を体験してみよう!
11 トリガー一覧取得デモ
</> Apps Script – listTriggers.gs
1function listTriggers() {
2  const triggers = ScriptApp.getProjectTriggers();
3  triggers.forEach(t => {
4    Logger.log(
5      t.getHandlerFunction() +
6      ” / “ + t.getEventType()
7    );
8  });
9}
プロジェクトに登録された全トリガーを確認します
実行ログ – listTriggers
15:00:01[INFO] getProjectTriggers() — トリガー一覧を取得
15:00:01[LOG] sendBulkEmails / CLOCK
15:00:01[LOG] onSheetEdit / ON_EDIT
15:00:01[LOG] onFormSubmit / ON_FORM_SUBMIT
15:00:02[OK] 合計 3 件のトリガーが見つかりました
関数名 タイプ スケジュール
sendBulkEmails 時間主導型 毎時
onSheetEdit 編集時 シート編集時
onFormSubmit フォーム送信 フォーム送信時
✅ 3件のトリガー情報を取得しました!
☝ getProjectTriggers() でトリガーの管理・削除も行えます

トリガーの注意点(6分制限、同時実行数)

トリガーで自動実行するスクリプトにはいくつかの制限があります。知らないとエラーで止まる原因になるため、以下を押さえておきましょう。

トリガーの制限事項(重要)
  • 1回の実行時間: 通常アカウント6分、Google Workspace 30分
  • 1日の総実行時間: 通常アカウント90分/日
  • 同時実行数: 最大30
  • トリガー上限: 20個/プロジェクト/ユーザー
  • 6分制限を超える処理は、PropertiesServiceで処理位置を記録し、複数回に分けて実行する「チャンク処理」で回避できます

外部API連携とChatGPT連携

GASの真価は外部APIとの連携にあります。UrlFetchApp を使えば、あらゆるWebサービスのAPIをスプレッドシートから呼び出せます。ここでは基本パターンから、X API、ChatGPT APIとの連携方法まで解説します。

UrlFetchAppの基本(REST API呼び出し)

UrlFetchAppは、GASから外部のWeb APIにHTTPリクエストを送るための組み込みクラスです。GET / POST / PUT / DELETE すべてのHTTPメソッドに対応しています。

function fetchWeatherData() {
  const url = "https://api.example.com/weather?city=Tokyo";
  const response = UrlFetchApp.fetch(url);
  const data = JSON.parse(response.getContentText());
  Logger.log("天気: " + data.weather);
}

UrlFetchApp.fetch() はGETリクエストがデフォルトです。POSTやPUTの場合は第2引数に {method: 'post'} を指定します。muteHttpExceptions: true を追加すると、エラーレスポンスでも例外が発生せず、レスポンスコードで判定できます。

スクリプトの実行を体験してみよう!
12 天気API連携デモ
</> Apps Script – fetchWeatherData.gs
1function fetchWeatherData() {
2  const url = “https://api.weather.example.com/tokyo”;
3  const res = UrlFetchApp.fetch(url);
4  const json = JSON.parse(res.getContentText());
5  const sheet = SpreadsheetApp.getActiveSheet();
6  sheet.getRange(“B2”).setValue(json.weather);
7  sheet.getRange(“C2”).setValue(json.temp);
8}
外部APIからデータを取得してセルに書き込みます
実行ログ – fetchWeatherData
09:00:01[INFO] UrlFetchApp.fetch() — APIリクエスト送信
09:00:02[OK] HTTP 200 OK — レスポンス受信
09:00:02[INFO] JSON.parse() — データ解析完了
09:00:02[OK] スプレッドシートへ書き込み完了
🌐 APIレスポンス (JSON)
{
  “weather”: “晴れ”,
  “temp”: 22,
  “humidity”: 45,
  “city”: “Tokyo”
}
天気データ – Google スプレッドシート
AB: 天気C: 気温D: 湿度
1 取得日時 天気 気温(℃) 湿度(%)
2 2026/03/03 9:00 ☀ 晴れ 22°C 45%
シート1 100%
✅ 天気APIのデータをスプレッドシートに自動記録しました!
☝ UrlFetchApp.fetch() でHTTP通信が可能。時間トリガーと組み合わせれば定期取得も

X API連携(投稿の自動化)

GASからX(旧Twitter)のAPIを呼び出して、投稿を自動化できます。OAuth 2.0認証が必要ですが、一度設定すればスプレッドシートから自動投稿が可能です。

function postToX() {
  const url = "https://api.x.com/2/tweets";
  const payload = { text: "GASからの自動投稿テスト" };
  const options = {
    method: "post",
    headers: {
      "Authorization": "Bearer YOUR_ACCESS_TOKEN",
      "Content-Type": "application/json"
    },
    payload: JSON.stringify(payload)
  };
  const response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

X APIのキー取得・設定方法は以下の記事で詳しく解説しています。

関連: X API v2のキー取得方法はこちら

スクリプトの実行を体験してみよう!
13 X(Twitter)自動投稿デモ
</> Apps Script – postToX.gs
1function postToX() {
2  const token = PropertiesService.getScriptProperties()
3    .getProperty(“BEARER_TOKEN”);
4  const options = {
5    method: “post”,
6    headers: { Authorization: `Bearer ${token}` },
7    payload: JSON.stringify({ text: “GASで自動投稿!” })
8  };
9  UrlFetchApp.fetch(“https://api.twitter.com/2/tweets”, options);
10}
OAuth認証を経てX APIにPOSTリクエストを送ります
実行ログ – postToX
10:00:01[INFO] Bearer Token 取得済み (PropertiesService)
10:00:01[INFO] POST https://api.twitter.com/2/tweets
10:00:02[OK] HTTP 201 Created
10:00:02[OK] ポスト投稿完了 (tweet_id: 1234567890)
S
Shintaro Blog
@shintaro_blog
▶ GASで自動投稿
【GAS活用】Google Apps Scriptで定期的なX投稿を完全自動化しました! スプレッドシートに投稿文を書いておくだけで、毎朝9時に自動でポストされます 🌟
午前10:00 ⋅ 2026年3月3日
✅ UrlFetchApp.fetch() でX APIへの投稿が完了しました!
☝ PropertiesService でAPIキーを安全に管理でき、時間トリガーと組み合わせれば定期投稿も実現できます

ChatGPT API連携(スプシからAIを呼び出す)

OpenAIのChatGPT APIをGASから呼び出せば、スプレッドシートの中でAIによるテキスト生成・要約・翻訳が実現できます。GPT-4o対応の完成品コードを紹介します。

function askChatGPT(prompt) {
  const apiKey = PropertiesService.getScriptProperties().getProperty("OPENAI_API_KEY");
  const url = "https://api.openai.com/v1/chat/completions";

  const payload = {
    model: "gpt-4o",
    messages: [
      { role: "system", content: "あなたは親切なアシスタントです。" },
      { role: "user", content: prompt }
    ],
    temperature: 0.7
  };

  const options = {
    method: "post",
    headers: {
      "Authorization": "Bearer " + apiKey,
      "Content-Type": "application/json"
    },
    payload: JSON.stringify(payload)
  };

  const response = UrlFetchApp.fetch(url, options);
  const result = JSON.parse(response.getContentText());
  return result.choices[0].message.content;
}

function processChatGPTBatch() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();

  for (let i = 2; i <= lastRow; i++) {
    const question = sheet.getRange("A" + i).getValue();
    if (question && !sheet.getRange("B" + i).getValue()) {
      const answer = askChatGPT(question);
      sheet.getRange("B" + i).setValue(answer);
      Utilities.sleep(1000); // API制限対策
    }
  }
}
APIキー管理とコストのTips
  • PropertiesServiceでAPIキー管理: スクリプトエディタの「プロジェクトの設定」→「スクリプトプロパティ」にキーを保存すれば、コード内にAPIキーを直書きせずに済みます
  • GPT-4oの料金目安: 入力$2.50/100万トークン、出力$10.00/100万トークン(2024年時点)。1回の要約で約0.1〜0.5円程度です
  • コスト節約: テスト時は gpt-4o-mini(約1/10の料金)を使い、本番でGPT-4oに切り替えるのがおすすめです
  • 月額上限設定: OpenAIダッシュボードの「Usage limits」で上限額を設定しておけば、想定外の課金を防げます
スクリプトの実行を体験してみよう!
14 ChatGPT API連携デモ
</> Apps Script - askChatGPT.gs
1function askChatGPT(prompt) {
2  const apiKey = PropertiesService.getScriptProperties()
3    .getProperty("OPENAI_API_KEY");
4  const body = {
5    model: "gpt-4o-mini",
6    messages: [{ role: "user", content: prompt }]
7  };
8  const res = UrlFetchApp.fetch(
9    "https://api.openai.com/v1/chat/completions",
10    { method: "post", payload: JSON.stringify(body), ... }
11  );
12  return JSON.parse(res.getContentText())
13    .choices[0].message.content;
14}
OpenAI APIを呼び出してAIの回答を取得します
実行ログ - askChatGPT
11:00:01[INFO] POST https://api.openai.com/v1/chat/completions
11:00:03[OK] HTTP 200 OK — tokens: 145
11:00:03[OK] レスポンス受信 & テキスト抽出完了
🤖 ChatGPT (gpt-4o-mini) の回答
Google Apps Scriptは、Googleのサービスを自動化できる強力なツールです。スプレッドシートやGmailと連携して業務を効率化できます。
✅ ChatGPT APIからAIの回答を受信しました!
☝ GASとAIを組み合わせれば、スプレッドシートへの自動要約・翻訳・分類なども実現できます

よくあるエラーと対処法

GAS開発でつまずきやすいエラーと、その解決策をまとめました。エラーメッセージが表示されたら、まずこのセクションを確認してください。

実行時間の制限(6分/30分)と回避策

エラーメッセージ: 「起動時間の最大値を超えました」

無料アカウントでは1回の実行が6分、Google Workspaceでは30分で強制停止されます。大量のデータ処理やAPI呼び出しで発生しやすいエラーです。

回避策: バッチ処理(チャンク処理)パターンを使い、PropertiesServiceで処理位置を記録して複数回に分けて実行します。Utilities.sleep() で適度な待機を入れることも有効です。

API呼び出し制限(日次クォータ)

エラーメッセージ: 「Service invoked too many times」

GASには各サービスごとに1日の呼び出し回数上限があります。主な制限値は以下のとおりです。

  • Gmail(MailApp.sendEmail): 100通/日(無料)、1,500通/日(Workspace)
  • UrlFetchApp.fetch: 20,000回/日(無料)、100,000回/日(Workspace)
  • PropertiesService: 50,000回/日(無料)、500,000回/日(Workspace)

対策: Utilities.sleep() でリクエスト間隔を空ける、CacheService でAPI結果をキャッシュする、バッチ処理で1回のAPI呼び出しにまとめるなどの方法が有効です。

権限エラー(OAuth認証画面)の解決方法

初めてスクリプトを実行すると「このアプリはGoogleで確認されていません」という警告が表示されます。これは正常な動作で、自分で作成したスクリプトの場合は安全に承認できます。

解決手順:

  1. 警告画面で「詳細」をクリック
  2. 「(プロジェクト名)(安全ではないページ)に移動」をクリック
  3. 権限の一覧を確認し「許可」をクリック

他人から共有されたスクリプトの場合は、必ずコードの内容を確認してから承認してください。

「このスクリプトを実行する権限がありません」対処法

エラーメッセージ: 「You do not have permission to call〜」

スクリプトが利用するGoogleサービス(Gmail、Drive、Calendarなど)へのアクセス権が不足している場合に発生します。

対処法:

  • appsscript.json の oauthScopes を確認し、必要なスコープを明示的に追加する
  • トリガーの再作成: 古いトリガーを削除し、新しいトリガーを作成すると権限が再設定される
  • シンプルトリガーの制限: onEdit等ではMailAppやUrlFetchAppが使えないため、インストーラブルトリガーに変更する
  • V8ランタイム: プロジェクト設定で「Chrome V8ランタイム」が有効になっているか確認する

よくある質問(FAQ)

Q. GASにプログラミング経験は必要ですか?

いいえ、プログラミング未経験でも始められます。GASはJavaScriptベースですが、スプレッドシートのセルを読み書きするだけなら数行のコードで実現できます。この記事のサンプルコードをコピーして、値を自分の用途に変えるところから始めるのがおすすめです。Excel VBAの経験がある方なら、文法の違いを覚えるだけですぐに書けるようになります。

Q. GASは無料で使えますか?制限はありますか?

はい、Googleアカウントがあれば完全無料で利用できます。主な制限として、1回の実行時間が6分まで、メール送信が1日100通まで、トリガーが1スクリプトあたり20個までなどがあります。Google Workspaceプランに加入すると、実行時間が30分に拡大されるなど制限が緩和されます。個人の業務自動化であれば、無料枠で十分対応可能です。

Q. VBAからGASに移行するべきですか?

「完全移行」より「併用」がおすすめです。GASはクラウドベースで環境構築不要、Gmail・カレンダー・フォームとの連携が強力という利点があります。一方、デスクトップExcelの高度な書式制御やCOM操作が必要な業務ではVBAの方が適しています。チーム共有・定期実行・API連携が多いならGAS、ローカルのExcel操作が中心ならVBAを使い分けるのがベストです。

Q. GASでスクレイピングはできますか?

はい、UrlFetchApp でWebページのHTMLを取得し、正規表現や XmlService でパースすることで簡易的なスクレイピングは可能です。ただし、JavaScriptで動的に生成されるページの取得はできません。また、対象サイトの利用規約やrobots.txtを必ず確認し、アクセス頻度にも配慮してください。本格的なスクレイピングにはPythonの方が向いています。

Q. GASとPythonのどちらを学ぶべきですか?

目的によります。Googleサービスの自動化(スプレッドシート、Gmail、カレンダー等)が主目的ならGASが最適です。環境構築不要で、ブラウザだけで開発・実行できる手軽さが強みです。データ分析・機械学習・大規模なスクレイピングにはPythonが向いています。業務自動化から始めるならGAS、より幅広いプログラミングスキルを身につけたいならPythonを選びましょう。

まとめ

この記事では、Google Apps Script(GAS)の基礎から実践的な自動化テクニックまでを解説しました。

この記事のポイント
  • GASはGoogleアカウントがあれば無料で使え、環境構築も不要
  • メール一斉送信・フォーム集計通知・SNS予約投稿がコピペで実現できる
  • トリガー機能で完全自動化(手動実行が不要に)
  • UrlFetchAppで外部API連携、ChatGPT APIでAI機能も追加可能
  • 6分制限やAPI日次クォータなど制限を理解し、チャンク処理で回避

まずはこの記事のサンプルコードをコピーして、スクリプトエディタで実行してみてください。1つ動くものを作れば、応用範囲はどんどん広がっていきます。

GAS開発・自動化のご相談はこちら

「自分でGASを書くのは大変...」「もっと本格的な自動化をしたい」という方へ。GAS開発代行・自動化コンサルティングを承っています。

自動化コンサルティングの詳細はこちら →

期間限定でChatGPT✖︎Googleスプレットシートのコンテンツ配布中!

LINEでExcelを気軽に学べる

しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
Profile
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
プロフィールを読む

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
記事URLをコピーしました