GASのonChangeトリガーが動かないときの対処法

GASでonChangeトリガーを設定したんだけど、どうも動かないんだ…。何か設定ミス?
猫男
猫男
catman
catman
なるほど、そんなときこそcatmanの出番だな。GASのonChangeトリガーが動かないときの対処法を伝授しよう。

GASのonChangeトリガーが動かない原因と対処法

GASでonChangeトリガーが動かない理由はいくつかある。それぞれの原因と対処法を見ていこう。

トリガーの種類を間違えている

GASには手動トリガーとイベントトリガーがある。


// 基本のセットアップ
function onChange(e) {
  Logger.log('スプレッドシートが更新されました');
}

手動トリガーはユーザーのアクションによるものではない自動的なトリガー。
onChangeはイベントトリガーなのでスプレッドシートの手動変更が基本。

スプレッドシートの適用範囲が間違っている

トリガーの対象とするスプレッドシートや範囲を確認しよう。


// シートのチェック
if (e.source.getActiveSheet().getName() === 'データシート') {
  Logger.log('データシート内で変更があった');
}

このコードで特定シートの変更を確認できる。シート名が正しいか確認しよう。

GASのonChangeトリガーの動作確認方法

デバッグ方法

GASのエディタで問題のスクリプトを確認し、エラー情報を得る。


// エラーハンドリングの追加
function onChange(e) {
  try {
    Logger.log('変更を検知');
    // ここに処理を書く
  } catch(err) {
    Logger.log('エラー: ' + err.message);
  }
}

– スクリプト内でエラーが発生しないか確認。
– ログを見ることでどこでエラーが出たかわかる。

権限の確認

トリガーが動作しないときは、GASの権限設定を見直すことも重要だ。


// スクリプト実行時に必要な権限を確認する
function onStartup() {
  SpreadsheetApp.getActiveSpreadsheet();
}

GAS実行権限がないときはリクエストを許可する。

練習問題:onChangeトリガーコードの設定

以下のコードを使って、正しい形式でonChangeトリガーを設定しよう。


// チェックしたいスプレッドシートのデータを取得
function checkDataChange(e) {
 if(e.changeType == 'EDIT') {
   Logger.log('データが変更されました');
 }
}

 

 

解答・解説

このコードはEDITタイプの変更のみをトリガーするよう設定している。


// このコードは正しいonChangeの設定例
function onChange(e) {
 if(e.changeType === 'EDIT') {
   Logger.log('編集イベントを確認');
   // 追加処理を書く
 }
}

changeTypeプロパティは変更の種類を識別する。
EDITはユーザーが手動で行った変更を示す。

なるほど!同じミスを繰り返さずに済むよう、設定もよく確認しないと…。
猫男
猫男
catman
catman
そうだ。問題を一つずつ解決すれば、GASをもっと楽しめるはずさ。頑張るんだぞ。