Amazonで商品を見るセール会場へ

GAS│onEditが動かない原因|シンプルトリガーとインストール型の違い

GASのonEditが動かないときは、実行方法、編集した操作、権限、処理時間の順に確認します。

公式ドキュメントに書かれた制限と、インストール型トリガーとの違いを整理しました。

  • シンプルトリガーは、認可が必要なサービスを使えない。たとえばメール送信はできない
  • シンプルトリガーの実行は、30秒まで
  • 閲覧・コメント専用で開かれたときは動かない
  • スクリプトやAPIによる変更では、起動しない
  • 権限が要る処理は、インストール型トリガーにする

公式資料に基づく説明と掲載コードのローカル検証を掲載しています。

上限や仕様は、Googleの都合で変わることがあります。

数値は、公式ページで最新を確かめてください。

目次

実行ボタンとセル編集の違い

エディターの実行ボタンからonEditを呼ぶと、編集イベントの引数eは渡されません。

e.rangeの読み取りでエラーになる場合は、練習用シートのセルに文字を直接入力して確認します。

シンプルトリガーを試す場合は、スプレッドシートの「拡張機能」からApps Scriptを開き、次の関数を保存します。

function onEdit(e) {
  if (!e || !e.range) throw new Error('セルを直接編集してください。');
  e.range.setNote('編集した範囲: ' + e.range.getA1Notation());
}

編集したセルのメモに範囲名が入れば、イベントから関数まで実行されています。

この診断例は編集範囲の既存のメモを置き換えるため、メモのない練習用セルで試してください。

動かない原因

原因公式の説明
認可が必要な処理をしているシンプルトリガーは、認可が要るサービスにアクセスできない
別のファイルを開こうとしている自分がバインドされたファイルだけを扱える
処理が長い30秒を超えると止まる
閲覧専用で開いている閲覧・コメント専用のモードでは動かない
スクリプトから書き換えたスクリプトやAPI経由の変更では、起動しない
編集が続けて入ったonEditは、最大2件までしかイベントをキューしない
Google公式ドキュメントの記載をもとに整理

eオブジェクトの中身

onEdit(e) の e には、編集の情報が入ります。

  • range:編集されたセルの範囲
  • value:編集後の値。単一セルの編集のときだけ入る
  • oldValue:単一セルの編集前の値。元が空の場合や複数セルの編集では利用できない
  • source:スプレッドシートのオブジェクト
  • user:編集した人。環境によっては取得できない
  • authMode:シンプルトリガーでは LIMITED

triggerUid は、インストール型のときだけ入ります。

インストール型に切り替える

認可が必要な処理をしたいときは、シンプルトリガーの onEdit ではなく、インストール型トリガーを作ります。

function handleEdit(e) {
  if (!e || !e.range) {
    throw new Error('実行ボタンではなく、練習用シートのセルを直接編集してください。');
  }
  console.log('編集した範囲: ' + e.range.getA1Notation());
}

function createEditTrigger() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  if (!ss) throw new Error('スプレッドシートの「拡張機能」から開いてください。');
  const exists = ScriptApp.getProjectTriggers().some(function (trigger) {
    return trigger.getHandlerFunction() === 'handleEdit' &&
      trigger.getEventType() === ScriptApp.EventType.ON_EDIT &&
      trigger.getTriggerSourceId() === ss.getId();
  });
  if (exists) return;
  ScriptApp.newTrigger('handleEdit').forSpreadsheet(ss).onEdit().create();
}

関数名は、onEdit と別の名前にしてください。

同じ名前だと、シンプルトリガーとインストール型が、両方動くおそれがあります。

関連記事:GASのトリガーの設定方法

onEditの対象はセルの値の変更で、背景色などの書式だけを変更する操作とは区別します。

複数セルを貼り付けた場合はe.valueに頼らず、e.range.getValues()で範囲の値を読みます。

まとめ

  • onEditの制限は、認可・別ファイル・30秒・閲覧専用
  • スクリプトからの変更では動かない
  • 権限が要るなら、インストール型トリガーにする

参考:Google Apps Script「Simple Triggers」「Event Objects」「Installable Triggers」(2026年9月30日確認)。

インストール型の確認と後片付け

createEditTriggerを実行した後にセルを編集し、「実行数」でhandleEditのログを確認します。

上のシンプルトリガーの診断例は、インストール型へ切り替える前に削除するか、onEdit以外の名前へ変更してください。

createEditTriggerは同じシート・関数・編集イベントの登録を確認しますが、別アカウントが作ったトリガーは確認できません。

試験を終えたら「トリガー」でhandleEditの登録を削除し、練習用セルのメモも消します。

確認した範囲と公式資料

2026年10月2日に公式資料と掲載コードを照合しました。

コードの分岐はGoogleのサービスを代替したローカルテストで確認し、実サービスでの実行とは区別しています。

GAS上の認可・トリガー発火・同時実行は未検証です。

シンプルトリガーの公式仕様 / イベントオブジェクトの公式仕様

関連する手順:GASのLockServiceで同時実行を防ぐ|3種類のロックと書き方

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次