GAS入門 ― スプレッドシートの自動化でできることと、最初の1本の書き方
シクミヤの福田です。当記事では、GAS(Google Apps Script)の入門として、スプレッドシートの自動化でできることと、最初の1本を書いて動かすまでの手順を解説します。
- はじめに
- スプレッドシートでGASができること・できないこと
- 始める前の準備
- 最初の1本を書いて動かす
- 業務で使う形にする ― 未対応の行だけを書き出す
- ボタン1つで動かす ― メニューを足す
- 入門で詰まりやすいところ
- まとめ
はじめに
GASとは
GASは、Googleが用意しているプログラムの仕組みです。スプレッドシートやGmail、Googleドライブなどを、決まった手順で自動で動かせます。書く言葉はJavaScriptです。
Googleアカウントがあれば、何もインストールせずにブラウザの中だけで始められます。Excelのマクロ(VBA)のGoogle版、と考えると近いです。
当記事の結論
当記事では、受付表から「未対応」の行だけを別のシートに書き出すコードを、1行ずつ説明します。最後に、ボタン1つで動くメニューも付けます。
スプレッドシートでGASができること・できないこと
できること
| できること | 業務での例 |
|---|---|
| セルを読む・書く・消す | 入力用のシートから集計用のシートへ写す |
| 条件で行を選ぶ | 状態が「未対応」の行や、期限を過ぎた行だけを抜き出す |
| メニューを足す | 画面の上に「自動化」メニューを出し、押すと処理が動く |
| 決まった時間に動かす | 毎朝9時に集計する(トリガーという仕組み) |
| 自分だけの関数を作る | セルに =税込(A2) のように書ける関数を足す |
| ほかのGoogleサービスとつなぐ | シートの内容でメールの下書きを作る、カレンダーに予定を入れる |
できない・向かないこと
1回の実行には時間の上限があります。何万行ものデータを毎回すべて計算し直すような処理は、途中で止まりやすくなります。
また、何十人が同時に入力する業務の土台や、画面の細かな操作をそのままなぞる作業には向きません。このあたりの線引きは「スプレッドシートの自動化(GAS)は自分でできる?」で詳しく書いています。
主な上限(2026年10月時点)
| 項目 | 無料のGoogleアカウント | Google Workspace |
|---|---|---|
| 1回の実行時間 | 6分 | 6分 |
| 自作の関数(セルで使う関数)の実行時間 | 30秒 | 30秒 |
| トリガーで動いた時間の合計 | 1日90分 | 1日6時間 |
| メールの宛先数(MailAppなど) | 1日100人 | 1日1,500人 |
上限は予告なく変わることがあると公式に書かれています。使う前に公式のページで確かめてください。
始める前の準備
テスト用のシートを作る
最初は、本番のシートではなくテスト用のシートで試してください。本番のシートを使うなら、ファイルごとコピーしてから始めます。
当記事では、新しいスプレッドシートに次の2つのシートを作ります。
| シート名 | 中身 |
|---|---|
| 受付 | 1行目に見出し(A:日付/B:顧客名/C:内容/D:状態)。2行目から数行、適当なデータを入れ、D列は「未対応」「対応済み」のどちらかにする |
| 未対応一覧 | 1行目に同じ見出しだけを入れておく |
エディタを開く
スプレッドシートのメニューで「拡張機能」→「Apps Script」を押すと、コードを書く画面(エディタ)が別のタブで開きます。
この開き方で作ったコードは、そのスプレッドシートに紐づきます(コンテナバインド型と呼びます)。ファイルをコピーすると、コードも一緒にコピーされます。
マクロの記録から始める手もある
スプレッドシートには、画面の操作を記録してGASのコードにする機能もあります(「拡張機能」→「マクロ」→「マクロを記録」)。記録したコードは同じエディタで読めるので、どう書けば何が起きるかを知る入口になります。
最初の1本を書いて動かす
まずはセルに文字を書く
エディタに最初から入っている function myFunction() {} を消して、次のコードを貼り付けます。
// 1本目:セルに文字を書く function writeHello() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('受付'); sheet.getRange('F1').setValue('GASから書きました'); }
保存(Ctrl+S)してから、画面上の関数の欄で writeHello を選び、「実行」を押します。「受付」シートのF1に文字が入れば成功です。
| 書いたもの | 意味 |
|---|---|
SpreadsheetApp.getActiveSpreadsheet() | このコードが紐づいているスプレッドシート |
getSheetByName('受付') | 「受付」という名前のシート |
getRange('F1') | F1のセル |
setValue(…) | セルに値を書く |
初回は権限の確認画面が出る
はじめて実行すると、「このスクリプトがスプレッドシートを読み書きしてよいか」を確かめる画面が出ます。自分のアカウントを選び、内容を読んでから許可します。
個人のGoogleアカウントでは、「Googleで確認されていないアプリ」という警告が出ることがあります。これはGoogleの審査を受けていないという意味です。自分で書いた中身だと分かっているコードに限って、先へ進んでください。中身の分からないコードを、よく知らないまま許可しないことが大切です。
シート名「受付」の前後に空白が入っていると、getSheetByName はシートを見つけられず、次の行でエラーになります。エラーが出たら、まずシート名を見直してください。
- 参考 : Google スプレッドシートを拡張する(Google for Developers)
- 参考 : OAuth Client Verification(Google for Developers)
業務で使う形にする ― 未対応の行だけを書き出す
コード
続けて、同じエディタの下に次のコードを足します。「受付」シートのうち、D列が「未対応」の行だけを「未対応一覧」シートに書き出します。
// 2本目:状態が「未対応」の行だけを、別のシートに書き出す function listOpenItems() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const src = ss.getSheetByName('受付'); const dest = ss.getSheetByName('未対応一覧'); const lastRow = src.getLastRow(); if (lastRow < 2) { ss.toast('受付シートにデータがありません'); return; } // 2行目から最後の行まで、A〜D列をまとめて読む const values = src.getRange(2, 1, lastRow - 1, 4).getValues(); // D列(4列目)が「未対応」の行だけ残す const open = values.filter(function (row) { return row[3] === '未対応'; }); // 書き出し先の2行目から下を消してから、まとめて書く if (dest.getLastRow() >= 2) { dest.getRange(2, 1, dest.getLastRow() - 1, 4).clearContent(); } if (open.length > 0) { dest.getRange(2, 1, open.length, 4).setValues(open); } ss.toast('未対応は ' + open.length + ' 件です'); }
読む → 選ぶ → 書く
このコードは、大きく3つのことしかしていません。
| 段階 | 使っているもの | していること |
|---|---|---|
| 読む | getLastRow()/getRange(行, 列, 行数, 列数)/getValues() | データの入っている最後の行を調べ、表をまとめて読み込む |
| 選ぶ | filter | 4列目(row[3]。数えるのは0から)が「未対応」の行だけ残す |
| 書く | clearContent()/setValues()/toast() | 前回の結果を消してから、まとめて書き、右下に件数を出す |
転記・抽出・集計の多くは、この「読む → 選ぶ(または計算する) → 書く」の組み合わせで書けます。最初の1本でこの形を覚えておくと、ほかの作業にも使い回せます。
1セルずつではなく、まとめて読み書きする
ループの中で1セルずつ getValue・setValue をくり返すと、行が増えたときに遅くなります。表は getValues で一度に読み、結果は setValues で一度に書くのが基本です。setValues に渡す表は、書き込む範囲と同じ行数・列数にそろえる必要があります。
ボタン1つで動かす ― メニューを足す
毎回エディタを開いて実行するのは手間です。次のコードを足すと、スプレッドシートを開いたときに「自動化」というメニューが画面の上に出ます。
// ファイルを開いたときに、メニューを足す function onOpen() { SpreadsheetApp.getUi() .createMenu('自動化') .addItem('未対応を書き出す', 'listOpenItems') .addToUi(); }
保存してからスプレッドシートを開き直すと、メニューが出ます。onOpen という名前の関数は、ファイルを開いたときに自動で動きます(シンプルトリガーと呼びます)。編集できる人が開いたときに動き、1回に動ける時間は30秒までです。
決まった時刻に動かしたいときは、エディタ左の時計のアイコン(トリガー)から「時間主導型」を設定します。ただし、人が見ていない時間に動かすと、失敗に気づきにくくなります。最初はメニューから手で動かし、結果を目で確かめることをおすすめします。
- 参考 : Google Workspace のカスタム メニュー(Google for Developers)
- 参考 : シンプルなトリガー(Google for Developers)
- 参考 : インストール可能なトリガー(Google for Developers)
入門で詰まりやすいところ
エラーが出たら、実行ログを見る
実行するとエディタの下に「実行ログ」が出ます。エラーのときは、何行目で何が起きたかが書かれています。途中の値を確かめたいときは、コードに console.log(values) のように書くと、その中身がログに出ます。
よくあるつまずき
| 起きること | よくある原因 |
|---|---|
| 「null のプロパティを読み取れません」のようなエラー | シート名がコードと合っていない |
| 1件も書き出されない | D列の「未対応」に空白が混じっている、表記が「未対応 」「未 対応」になっている |
| メニューが出ない | 保存していない、またはスプレッドシートを開き直していない |
| 範囲の大きさが合わないというエラー | setValues に渡した表と、書き込む範囲の行数・列数が違う |
入力のゆれ(空白や表記の違い)は、コードより先に入力の側で防ぐほうが確実です。D列をプルダウン(データの入力規則)にして、選ぶだけにしておくと、つまずきが減ります。
まとめ
当記事のポイントをまとめます。
- GASは、スプレッドシートやGmailなどを自動で動かすGoogleの仕組み。ブラウザだけで始められる
- 最初の1本は、テスト用のシートで「毎回同じ手順で、同じシートを触る作業」を選ぶ
- 転記・抽出・集計の多くは「読む → 選ぶ → 書く」の形で書け、表はまとめて読み書きする
onOpenでメニューを足すと、エディタを開かずにボタン1つで動かせる- 1回6分などの上限があり、変わることもあるので、公式のページで確かめてから使う