スプレッドシートと仕事の話
GAS(Google Apps Script)とは?
スプレッドシートを自動化する入門
毎週同じ形に表を整える。貼り付けた明細から空白の行を消す。条件に合う行に印を付ける。スプレッドシートには、手順の決まった作業がたくさんあります。
こうした作業を自動で進めるのが GAS(Google Apps Script)です。この記事では、GAS で何ができるのか、どこから始めるのか、最初につまずきやすい「承認」の画面の進み方まで、順に紹介します。
GAS とは
GAS は、Google が用意しているプログラムの仕組みです。書き方は JavaScript と同じで、スプレッドシートのほか、Gmail・Google カレンダー・Google ドライブ・Google フォームも動かせます。
Google アカウントがあれば無料で使えて、インストールも要りません。ブラウザでスプレッドシートを開き、そのまま書き始められます。書いたプログラムは自分のパソコンではなく Google のサーバーで動きます。
マクロの記録と GAS の関係
スプレッドシートには、操作を記録して何度でも再生できる「マクロ」があります。「拡張機能」→「マクロ」→「マクロを記録」で記録を始め、セルを選んだり入力したりすると、その操作がGAS のコードとして保存されます。
/** @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 の始め方
- スプレッドシートを開き、「拡張機能」→「Apps Script」を選ぶ
- 新しいタブでエディタが開く。左に「コード.gs」、右に
function myFunction() { }が書かれている { }の中にコードを書き、保存(Ctrl+S、Mac は ⌘+S)- 上の「▷ 実行」を押す。結果は下の「実行ログ」に出る
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)。思ったとおりに動かないときは、まずログで中身を確かめます。
初めて実行するときの承認の画面
書いたコードを初めて実行すると、スクリプトにスプレッドシートを読み書きさせてよいかを確かめる画面が出ます。ここで止まってしまう人が多いので、順に見ていきます。
- 「承認が必要です」(マクロをキーで動かしたときは「認証が必要です」)→ 進む・OK
- アカウントを選ぶ
- 「このアプリは Google で確認されていません」→ 左下の「詳細」
- 「(プロジェクト名)(安全ではないページ)に移動」
- 許可する内容を確かめて「許可」(項目を選ぶ形なら、選んでから「続行」)
「確認されていません」は、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('未達');
}
}
}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 との違い
| GAS | Excel の VBA | |
|---|---|---|
| 書き方 | JavaScript | VBA(Visual Basic) |
| 動く場所 | Google のサーバー | 自分のパソコンの Excel |
| 必要なもの | ブラウザと Google アカウント | デスクトップ版の Excel(Windows が中心) |
| つながるもの | Gmail・カレンダー・ドライブ・フォーム | Word・Outlook・パソコンのファイル |
| 決まった時刻に動かす | トリガーで設定(パソコンの電源が切れていても動く) | Windows のタスク スケジューラーなどと組み合わせる |
セルを読む・書く・くり返す・条件で分ける、という考え方はどちらも同じです。片方を覚えると、もう片方も読めるようになります。Excel のマクロはExcel マクロ入門にまとめています。
ブラウザで練習する
このサイトのマクロと GAS の模擬練習では、仮想のスプレッドシートと Apps Script のエディタで、コードを実際に動かしながら練習できます。コードは空欄を埋める形で、スマホでは空欄を4択で選べます。
- 第1章 マクロの記録と実行
記録済みのマクロを動かし、自分でも記録します。絶対参照と相対参照の違い、記録したコードの読み方と直し方まで。
- 第2章 読む・くり返す・分ける
getValue でセルを読み、setValue で書き、実行ログで中身を確かめます。for で全行をくり返し、if で書き分けます。
- 第3章 ケーススタディ:月次の売上表を整える
空白行を消し、大口の判定を一度に書き、自分のメニューから動かします。最後はセルで使える自作の関数。
GAS の学び方
まずは自分のスプレッドシートで「マクロを記録」し、できたコードを読むところから始めると、どの命令が何をしているかがつかみやすくなります。
コードは生成 AI に頼んでも書いてもらえます。ただ、出てきたコードが正しいか、どこを直せばよいかを判断するには、この記事の「よく使う書き方」くらいは読めることが前提になります。
メールの送信やフォームとの連携など、自分の仕事に合わせた形にしたいときは、講師に画面を見せながら質問できる講座が早道です。
※ 画面の名前や上限の数は 2026年10月時点のものです。Google の仕様の変更で変わることがあります。
※ Google スプレッドシートは Google LLC の商標です。当サイトは Google とは関係ありません。