シクミヤ>ブログ>GAS入門 ― スプレッドシートの自動化でできることと、最初の1本の書き方

GAS入門 ― スプレッドシートの自動化でできることと、最初の1本の書き方

シクミヤの福田です。当記事では、GAS(Google Apps Script)の入門として、スプレッドシートの自動化でできることと、最初の1本を書いて動かすまでの手順を解説します。

  1. はじめに
  2. スプレッドシートでGASができること・できないこと
  3. 始める前の準備
  4. 最初の1本を書いて動かす
  5. 業務で使う形にする ― 未対応の行だけを書き出す
  6. ボタン1つで動かす ― メニューを足す
  7. 入門で詰まりやすいところ
  8. まとめ

はじめに

GASとは

GASは、Googleが用意しているプログラムの仕組みです。スプレッドシートやGmail、Googleドライブなどを、決まった手順で自動で動かせます。書く言葉はJavaScriptです。

Googleアカウントがあれば、何もインストールせずにブラウザの中だけで始められます。Excelのマクロ(VBA)のGoogle版、と考えると近いです。

当記事の結論

最初の1本は「毎回同じ手順で、同じシートを触る作業」を選ぶ。読む → 選ぶ → 書く、の3つだけで多くの作業が自動化できる。

当記事では、受付表から「未対応」の行だけを別のシートに書き出すコードを、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の審査を受けていないという意味です。自分で書いた中身だと分かっているコードに限って、先へ進んでください。中身の分からないコードを、よく知らないまま許可しないことが大切です。

名前は1文字でも違うと動かない

シート名「受付」の前後に空白が入っていると、getSheetByName はシートを見つけられず、次の行でエラーになります。エラーが出たら、まずシート名を見直してください。

業務で使う形にする ― 未対応の行だけを書き出す

コード

続けて、同じエディタの下に次のコードを足します。「受付」シートのうち、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()データの入っている最後の行を調べ、表をまとめて読み込む
選ぶfilter4列目(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秒までです。

決まった時刻に動かしたいときは、エディタ左の時計のアイコン(トリガー)から「時間主導型」を設定します。ただし、人が見ていない時間に動かすと、失敗に気づきにくくなります。最初はメニューから手で動かし、結果を目で確かめることをおすすめします。

入門で詰まりやすいところ

エラーが出たら、実行ログを見る

実行するとエディタの下に「実行ログ」が出ます。エラーのときは、何行目で何が起きたかが書かれています。途中の値を確かめたいときは、コードに console.log(values) のように書くと、その中身がログに出ます。

よくあるつまずき

起きることよくある原因
「null のプロパティを読み取れません」のようなエラーシート名がコードと合っていない
1件も書き出されないD列の「未対応」に空白が混じっている、表記が「未対応 」「未 対応」になっている
メニューが出ない保存していない、またはスプレッドシートを開き直していない
範囲の大きさが合わないというエラーsetValues に渡した表と、書き込む範囲の行数・列数が違う

入力のゆれ(空白や表記の違い)は、コードより先に入力の側で防ぐほうが確実です。D列をプルダウン(データの入力規則)にして、選ぶだけにしておくと、つまずきが減ります。

まとめ

当記事のポイントをまとめます。

  • GASは、スプレッドシートやGmailなどを自動で動かすGoogleの仕組み。ブラウザだけで始められる
  • 最初の1本は、テスト用のシートで「毎回同じ手順で、同じシートを触る作業」を選ぶ
  • 転記・抽出・集計の多くは「読む → 選ぶ → 書く」の形で書け、表はまとめて読み書きする
  • onOpen でメニューを足すと、エディタを開かずにボタン1つで動かせる
  • 1回6分などの上限があり、変わることもあるので、公式のページで確かめてから使う

福田 航 (記事一覧)

合同会社シクミヤ 代表 / 業務コンサルタント

エステサロンチェーン、通信、IT決済と、業種の違う大手の現場で業務改善に携わってきました。属人化の解消や業務の効率化・自動化が専門です。2026年7月に合同会社シクミヤを設立し、中小企業の「攻めのIT顧問」として、相談から作るところまで引き受けています。

関連記事