スプレッドシートの手作業を自動化する前に決める3つ

記事
IT・テクノロジー
毎朝、複数のシートから数字をコピーして集計表に貼り、体裁を整えてメールで送る。
30分。手順は頭に入っているので迷いはないけれど、毎日やるとさすがに削りたくなる。

こういうとき、GAS(Google Apps Script)で自動化できます。
ただ、作る前に決めておかないと、後で作り直しになることが3つあります。
先に仕組みを説明してから、順に見ていきます。

■ GASとは何か

Googleスプレッドシートに標準で付いている、JavaScriptの実行環境です。
追加のインストールもサーバーの用意も要りません。
メニューの「拡張機能 > Apps Script」を開くと、コードを書く画面が立ち上がります。

たとえば、シートの中身を読むコードはこうなります。

function readSales() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('売上');
  const values = sheet.getDataRange().getValues();
  Logger.log(values[0]);
}

getValues() は、シートの中身を二次元配列として返します。
values[0] が1行目、values[0][0] がA1セルです。
書き込みは setValues()、メール送信は MailApp.sendEmail() を使います。

そしてトリガーという機能があります。
画面左の時計アイコンから「毎日午前8時に実行」といった起動条件を設定でき、
無人で回るようになります。

なお1回の実行時間には上限があり(無料アカウントでおおむね6分)、
数万行を一度に処理すると途中で止まります。

■ 決めること1:何を自動化するか

「面倒だから」ではなく「頻度 × 手順の固定度」で選びます。

月1回・5分の作業を自動化しても回収に何年もかかります。
毎日15分なら月に5時間です。ここから手を付けるべきです。

もう1つの軸が手順の固定度です。

・シートAのB列を合計してシートCに書く → 固定。自動化に向く
・数字を見て、おかしそうなものを除く → 判断が入る。自動化に向かない

「おかしそう」を条件に落とし込めないなら、そこは人が見る工程として残してください。
現実的な設計は、下ごしらえだけを自動化して、最後の判断を人に渡す形です。
集計と体裁づくりをGASにやらせ、送信ボタンは人が押す。これだけで大半の時間が消えます。

■ 決めること2:どこまで自動化すると壊れやすくなるか

GASが壊れる原因は、ほぼ「シートの形が変わったこと」です。

・列を1本挿入した → getValues()[3] が別の列を指すようになる
・シート名を「売上」から「売上_2026」に変えた → getSheetByName が null を返す
・誰かが並べ替えた → 行の順番前提の処理が崩れる

考えておくべきなのは、壊れ方をどちらにするかです。

止まって気づく壊れ方と、黙って間違った値を出す壊れ方があります。
後者の方がはるかに危険です。気づくのが数か月後になります。

対策は、処理の冒頭で前提を確認し、違ったら止めることです。

const sheet = ss.getSheetByName('売上');
if (!sheet) throw new Error('シートが見つかりません');
if (values[0][2] !== '金額') throw new Error('C列の見出しが違います');

見出しの位置を固定値で持たず、見出し行を検索して列番号を求める書き方にすれば、
列の挿入には強くなります。ただしすべての変化に耐えるものは作れません。
どこまで守るかを先に決めて、それ以外は止まるようにする。 これが現実的な線です。

■ 決めること3:自動化した後に誰がメンテするか

いちばん軽視され、いちばん後で効いてくる項目です。
作った人が異動した後にシートの仕様が変わり、GASが止まる。
読める人がいないので、また手作業に戻る——よくある結末です。

最低限、次の3つを用意してください。

1. 何をするスクリプトなのかを、コードの先頭に日本語で書く
どのシートを読み、どこに書き、いつ動くのか。3行で足ります。

2. 失敗したときに人に届くようにする
トリガー実行のエラーは、既定では実行ログに残るだけです。
try/catch で囲み、失敗したら MailApp.sendEmail() で通知を送るようにしておくと、
止まったことに当日気づけます。

3. 手作業の手順書を残す
GASが止まった日に、元のやり方へ戻せるようにしておくためです。

■ やってはいけない進め方

最初から全部を自動化しようとすること。

「どうせ作るなら、データ取得から集計、メール送信まで一気通貫で」と設計すると、
どこかで詰まったときに全体が動かず、成果がゼロのまま時間だけが過ぎます。

集計だけ。まずそれだけを動かして、明日から使う。
何日か回すと想定外の例外が出てきます。
それを見てから次を作る方が、結果的に早く仕上がります。

もう1つ。元のシートに直接上書きするスクリプトを、最初に作らないでください。
出力先は新しいシートにして、しばらくは手作業の結果と突き合わせてください。
テスト中のスクリプトが元データを潰すと、復旧に半日かかります。

■ それでも解決しないとき

・実行時間の上限に引っかかって、最後まで動かない
・トリガーを設定したのに、動いていない日がある
・前任者が作ったGASが止まっていて、中身が読めない

このあたりまで来たら、書き足すより一度構造を見た方が早いです。

私はスプレッドシートの自動化と、既存GASの調査・修正を承っています。
コードには日本語のコメントを入れ、どこを変えれば何が変わるかを添えてお渡ししています。

――
この記事の執筆には生成AIを活用しています。内容は実際の挙動を確認して書いています。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す