GASでよく出るエラー5つと、その直し方

GASでよく出るエラー5つと、その直し方

記事
IT・テクノロジー
GAS(Google Apps Script)でスプレッドシートの作業を自動化していると、ある日突然、赤いエラーが出て止まることがあります。ネットで見つけたコードや、ChatGPTなどのAIに作ってもらったコードでも同じです。
エラーの文は英語で出ることが多いので身構えてしまいますが、原因はある程度決まっています。ここでは、よく見かけるエラーを5つ取り上げて、原因と直し方をまとめました。

1. TypeError: Cannot read properties of null (reading 'getRange')

「シートが見つからない」ときに出るエラーです。getSheetByName('シート名') で指定した名前のシートがないと、何もない状態(null)が返ってきて、次の getRange で止まります。
よくある原因は、シート名の打ち間違い、名前の前後の空白、全角と半角の違いです。シートのタブの名前をそのままコピーして、コードに貼り付けるのが確実です。見つからなかったときに理由が分かるように止めておくと、次から迷いません。
const sheet = SpreadsheetApp.getActive().getSheetByName('売上');
if (!sheet) throw new Error('「売上」シートが見つかりません');

2. Exception: The number of rows in the range must be at least 1.

「読み込む行の数が0になっている」ときのエラーです。getLastRow() で最後の行を調べて2行目から読もうとしたとき、シートに見出ししかないと、読む行の数が0になって止まります。
データがないときは、先に処理を終えるようにします。
const last = sheet.getLastRow();
if (last < 2) return; // 見出ししかないので終了
const values = sheet.getRange(2, 1, last - 1, 5).getValues();

3. Exception: The coordinates of the range are outside the dimensions of the sheet.

シートにある行や列よりも外側を指定したときのエラーです。列を削除したあとに、コードの列番号がそのまま残っている場合によく起こります。
範囲は数字を決め打ちせず、getLastRow() や getLastColumn() で実際の大きさを調べてから決めると安全です。列を増やしたり消したりしたときは、コードの列番号も見直してください。

4. Authorization is required to perform that action.

「まだ許可していない操作をしようとした」ときのエラーです。メールの送信やドライブへの保存など、新しい機能をコードに足したのに、その許可をまだ出していないと起こります。トリガー(決まった時間の自動実行)で動かしていると、許可の確認画面が出ないまま失敗します。
Apps Scriptの画面で、その関数を一度手で実行してください。確認画面が出たら、自分のアカウントを選んで許可すれば直ります。

5. Exceeded maximum execution time

1回の実行には6分という時間の上限があり、それを超えると止まります。原因になりやすいのは、セルを1つずつ読み書きする繰り返しです。シートの読み書きは1回ごとに時間がかかるので、まとめて読んで、計算して、まとめて書くようにすると、ぐっと速くなります。
// 遅い書き方:1セルずつ読み書きする
for (let i = 2; i <= last; i++) {
  sheet.getRange(i, 3).setValue(sheet.getRange(i, 1).getValue() * 1.1);
}

// 速い書き方:まとめて読み、まとめて書く
const vals = sheet.getRange(2, 1, last - 1, 1).getValues();
sheet.getRange(2, 3, last - 1, 1).setValues(vals.map(r => [r[0] * 1.1]));

おまけ:メールが急に送れなくなったとき

「Service invoked too many times for one day: email.」と出たら、1日に送れるメールの数の上限に達しています。無料のGoogleアカウントは上限が小さいので、送る前に MailApp.getRemainingDailyQuota() で残りの数を確かめるようにしておくと安心です。

まとめ

エラーが出たら、まずエラーの文と行番号を見て、その行で何をしているかを確かめると、原因にたどり着くのが早くなります。上の5つで、多くのケースは解決できます。
それでも直らないときや、前任の方やAIが作ったコードで中身が分からないときは、原因を調べて動く状態に直すご依頼もお受けしています。
▶ 動かないGASのエラー原因を調べて修正します
サービス数100万件のスキルマーケット、あなたにぴったりのサービスを探す