スプレッドシートと仕事の話

GAS(Google Apps Script)とは?
スプレッドシートを自動化する入門

毎週同じ形に表を整える。貼り付けた明細から空白の行を消す。条件に合う行に印を付ける。スプレッドシートには、手順の決まった作業がたくさんあります。

こうした作業を自動で進めるのが GAS(Google Apps Script)です。この記事では、GAS で何ができるのか、どこから始めるのか、最初につまずきやすい「承認」の画面の進み方まで、順に紹介します。

GAS とは

GAS は、Google が用意しているプログラムの仕組みです。書き方は JavaScript と同じで、スプレッドシートのほか、Gmail・Google カレンダー・Google ドライブ・Google フォームも動かせます。

Google アカウントがあれば無料で使えて、インストールも要りません。ブラウザでスプレッドシートを開き、そのまま書き始められます。書いたプログラムは自分のパソコンではなく Google のサーバーで動きます。

マクロの記録と GAS の関係

スプレッドシートには、操作を記録して何度でも再生できる「マクロ」があります。「拡張機能」→「マクロ」→「マクロを記録」で記録を始め、セルを選んだり入力したりすると、その操作がGAS のコードとして保存されます。

B2 に「test」と入れて太字にした記録
/** @OnlyCurrentDoc */

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B2').activate();
  spreadsheet.getCurrentCell().setValue('test');
  spreadsheet.getActiveRangeList().setFontWeight('bold');
};

つまり、マクロの中身は GAS です。マクロに日本語の名前(たとえば「太字テスト」)を付けても、コードの関数名は myFunction になります。メニューに出る名前と関数の名前は別に持たれています。

記録するときは、画面の下の帯で「絶対参照」と「相対参照」を選べます。絶対参照は B2 のような番地で残り、どのセルを選んで実行しても同じ場所に書かれます。相対参照は「いまのセルから1行下」のように残り、選んでいるセルを起点に動きます。

記録だけでは、行数が変わる表や条件で分ける処理は作れません。そこから先は、記録したコードを読んで書き足していきます。

GAS でできること

  • 貼り付けた明細の空白行を消し、見出しを整える
  • 金額や日付を見て、判定の列に「大口」「期限切れ」などを書く
  • スプレッドシートに自分のメニューを足し、ボタンのように処理を動かす
  • セルで使える自作の関数(カスタム関数)を作る
  • 表の内容をもとに、Gmail でメールを送る
  • 毎朝 8 時など、決まった時刻に処理を動かす(トリガー)
  • Google フォームの回答が届いたら、別のシートに転記する

どれも、手でやれば数分から数十分かかる作業です。一度書いておけば、次からはメニューを押すだけ、あるいは何もしなくても動きます。

GAS の始め方

  1. スプレッドシートを開き、「拡張機能」→「Apps Script」を選ぶ
  2. 新しいタブでエディタが開く。左に「コード.gs」、右に function myFunction() { } が書かれている
  3. { } の中にコードを書き、保存(Ctrl+S、Mac は ⌘+S)
  4. 上の「▷ 実行」を押す。結果は下の「実行ログ」に出る
最初の1本: A1 を読んでログに出し、B1 に書く
function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = sheet.getRange('A1').getValue();
  Logger.log(value);
  sheet.getRange('B1').setValue('確認済み');
}

Logger.log は実行ログに中身を出す命令です。数値は 120.0 のように小数点付きで出ます(console.log なら 120)。思ったとおりに動かないときは、まずログで中身を確かめます。

初めて実行するときの承認の画面

書いたコードを初めて実行すると、スクリプトにスプレッドシートを読み書きさせてよいかを確かめる画面が出ます。ここで止まってしまう人が多いので、順に見ていきます。

  1. 「承認が必要です」(マクロをキーで動かしたときは「認証が必要です」)→ 進む・OK
  2. アカウントを選ぶ
  3. 「このアプリは Google で確認されていません」→ 左下の「詳細」
  4. 「(プロジェクト名)(安全ではないページ)に移動」
  5. 許可する内容を確かめて「許可」(項目を選ぶ形なら、選んでから「続行」)

「確認されていません」は、Google の審査を受けていないスクリプトに出る警告です。自分で書いたスクリプトや、自分で記録したマクロは審査を受けていないので、必ずこの画面が出ます。自分で作ったものなら、進んで問題ありません。

反対に、知らない人から渡されたスプレッドシートでこの画面が出たら、「安全なページに戻る」を選びます。許可すると、そのスクリプトはあなたのアカウントでスプレッドシートやメールを操作できるようになるからです。

コードの先頭に /** @OnlyCurrentDoc */ と書いておくと、触れる範囲が「このスプレッドシートだけ」になり、許可する内容も狭くなります。記録したマクロには最初から付いています。

この流れは、模擬練習のミッション1で同じ順に体験できます。

よく使う書き方

スプレッドシートを動かすときに、よく使うものをまとめました。行・列の番号は 1 から、getValues で読んだ配列の番号は 0 から数えます。

書き方意味
const sheet = SpreadsheetApp.getActiveSheet();いま開いているシート
sheet.getRange('A1').getValue()A1 の値を読む
sheet.getRange('A1').setValue('済')A1 に書く
sheet.getRange(2, 3)2 行目・3 列目(C2)。列は数字で書ける
sheet.getRange('A2:C10').getValues()範囲をまとめて読む(2次元の配列)
sheet.getRange(2, 1, 9, 3).setValues(values)まとめて書く(行数・列数を配列と合わせる)
sheet.getLastRow()値が入っている最後の行の番号
sheet.appendRow(['10/31', '佐藤', 5000])最後の行の下に1行足す
sheet.deleteRow(5)5 行目を消す(下の行が詰まる)
sheet.getRange('A1:D1').setFontWeight('bold')太字にする
sheet.getRange('A1:D1').setBackground('#fff2cc')背景の色を付ける
Logger.log(value)実行ログに出す(中身の確認に使う)
全行をくり返して、条件で書き分ける
function judgeTargets() {
  const sheet = SpreadsheetApp.getActiveSheet();
  for (let row = 2; row <= sheet.getLastRow(); row++) {
    const sales = sheet.getRange(row, 2).getValue();
    const target = sheet.getRange(row, 3).getValue();
    if (sales >= target) {
      sheet.getRange(row, 4).setValue('達成');
    } else {
      sheet.getRange(row, 4).setValue('未達');
    }
  }
}
開いたときに自分のメニューを足す(onOpen)
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('月次処理')
    .addItem('大口を判定', 'markLarge')
    .addToUi();
}

onOpen という名前の関数は、スプレッドシートを開いたときに自動で動きます。エディタの「▷ 実行」で動かすとCannot call SpreadsheetApp.getUi() from this context. のエラーになるので、保存したらスプレッドシートを開き直して確かめます。

メールの送信と、決まった時刻に動かすトリガー

GAS でよく調べられるのが、メールの送信とトリガーです。

表の宛先にメールを送る
function sendReminders() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
  rows.forEach(([name, email]) => {
    MailApp.sendEmail(email, '提出期限のお知らせ', name + ' さん\n\n今週金曜が提出期限です。');
  });
}

送れる数には上限があり、無料の Google アカウントでは1日100通までです(Google Workspace のアカウントはもっと多く送れます)。1回の実行は 6 分までで、それを超えると「Exceeded maximum execution time」で止まります。

決まった時刻に動かすには、エディタの左の「トリガー」(時計の形)→「トリガーを追加」で、動かす関数と「時間主導型」を選びます。毎日・毎週・毎月の何時台、と指定できます。

メールの送信は、試しに動かしただけで本当に届いてしまいます。最初は宛先を自分のアドレスだけにした表で試します。

Excel の VBA との違い

GASExcel の VBA
書き方JavaScriptVBA(Visual Basic)
動く場所Google のサーバー自分のパソコンの Excel
必要なものブラウザと Google アカウントデスクトップ版の Excel(Windows が中心)
つながるものGmail・カレンダー・ドライブ・フォームWord・Outlook・パソコンのファイル
決まった時刻に動かすトリガーで設定(パソコンの電源が切れていても動く)Windows のタスク スケジューラーなどと組み合わせる

セルを読む・書く・くり返す・条件で分ける、という考え方はどちらも同じです。片方を覚えると、もう片方も読めるようになります。Excel のマクロはExcel マクロ入門にまとめています。

ブラウザで練習する

このサイトのマクロと GAS の模擬練習では、仮想のスプレッドシートと Apps Script のエディタで、コードを実際に動かしながら練習できます。コードは空欄を埋める形で、スマホでは空欄を4択で選べます。

  1. 第1章 マクロの記録と実行

    記録済みのマクロを動かし、自分でも記録します。絶対参照と相対参照の違い、記録したコードの読み方と直し方まで。

  2. 第2章 読む・くり返す・分ける

    getValue でセルを読み、setValue で書き、実行ログで中身を確かめます。for で全行をくり返し、if で書き分けます。

  3. 第3章 ケーススタディ:月次の売上表を整える

    空白行を消し、大口の判定を一度に書き、自分のメニューから動かします。最後はセルで使える自作の関数。

模擬練習をはじめる(全13ミッション) →

GAS の学び方

まずは自分のスプレッドシートで「マクロを記録」し、できたコードを読むところから始めると、どの命令が何をしているかがつかみやすくなります。

コードは生成 AI に頼んでも書いてもらえます。ただ、出てきたコードが正しいか、どこを直せばよいかを判断するには、この記事の「よく使う書き方」くらいは読めることが前提になります。

メールの送信やフォームとの連携など、自分の仕事に合わせた形にしたいときは、講師に画面を見せながら質問できる講座が早道です。

※ 画面の名前や上限の数は 2026年10月時点のものです。Google の仕様の変更で変わることがあります。

※ Google スプレッドシートは Google LLC の商標です。当サイトは Google とは関係ありません。