GASでトリガーの作成をしておくとonEditやonOpenなどの関数を使用せずに自動起動することができて便利です。
トリガーを作成をして起動するようにすれば、onEditやonOpenなどのシンプルトリガーでは権限がなくて実行できないようなGASもトリガーを設定すれば、onEditやonOpenなどと同じ動きで起動する事ができるようになります。
トリガーの設定方法
トリガー設定はとても簡単です。
まずGASを作成したらエディタ画面左からトリガーを開きます。
トリガーの画面が開いたら、右下から「トリガーを追加」ボタンをクリック
実行する関数を選択して、イベントのソースなどを設定
スプレッドシートから
→起動時:スプレッドシートを開いた時やブラウザで更新した時に実行
→編集時:スプレッドシートの編集時に実行
→変更時:セルの値変更時に実行(特定のセル変更時に実行ならこれ)
→フォーム送信時:スプレッドシートとフォームを連携している時にフォームが送信されたら実行
時間主導型は日時、時間、日付などで定期実行ができます。
設定して保存をクリックすると、トリガー画面に作成したトリガーが表示されます。
GASでトリガーが追加できない時
トリガーが追加できない時の原因は主に5つです。
- ブラウザのポップアップが許可されていない
- ブラウザのリダイレクトが許可されていない
- 権限の取得ができていない
- 複数のGoogleアカウントでログインしている
- GASの不具合
ブラウザのポップアップやリダイレクトが許可されていない
ポップアップやリダイレクトの許可がないと、トリガー作成の画面を開く事ができないため、トリガー設定する事ができません。
その場合はブラウザの設定やセキュリティの設定を確認する必要があります。
また、権限取得時にもポップアップやリダイレクトの許可が必要です。
権限の取得ができていない
権限の取得は実行させたいGASに必要な権限の取得が事前に必要になります。
簡単なものであれば「SpreadsheetApp.getActiveSpreadsheet();」のみで、一度手動実行しておけばトリガーを使えるようになります。
function myFunction() {
SpreadsheetApp.getActiveSpreadsheet();
}
複数のGoogleアカウントでログインしている
複数アカウントでログインしていると、トリガーが作成できずエラーになってしまう事があります。
また、GASのエディタを開けない原因になることもあるため、一度全てのアカウントでログアウトして、該当のアカウントでログインして、再度GASを開く必要があります。
GASの不具合(V8ランタイムバグなど)
何らかの原因で、内部的なバグやV8ランタイムのバグが起きてトリガーを作成できない場合があります。
V8ランタイムのバグであれば、プロジェクトの設定からV8ランタイムを無効にしておけば解決しますが、使える構文が少なくなるため少し不便です。
内部的なバグも、V8ランタイムのバグも、
GASを新しく作り直すと解消したりするため、一度作り直してみることでしか対処できません。
この辺りのバグの報告はちらほらあるので、バグが解消されるといいですね。
GASのトリガーを一時停止する方法
トリガーを一時停止する方法はありませんが、擬似的に一時停止にすることはできます。
「実行する関数」をログ出力するものだけ等にして変更しておけば、ログが出力されるだけになるので、トリガーを残しつつ一時停止のような状態にする事ができます。
function triggerStop() {
Logger.log('トリガー、一時停止中');
}
トリガーとして設定できる項目
GASのトリガーが設定できるイベントのソースで設定できるのは3つで、
起動時、編集時などに実行されるスプレッドシートからと、
◯分おき、◯日おき、など定期定期に実行させる時間主導型、
Googleカレンダーが更新された時に実行できるカレンダーからがあります。
スプレッドシートから起動させるトリガー
スプレッドシートから起動させるトリガーは以下の4つ
- 起動時
- 編集時
- 変更時
- フォーム送信時
起動時のトリガー
起動時は、スプレッドシートを開いた時や更新した時に実行されるトリガーで、
onOpen()と同じ動きです。
カスタムメニュー表示などでよく使います。
メニュー追加についての詳しい記事はこちら
メニュー追加、onOpenのaddMenuカスタムメニューGAS実行
トリガーの変更時と編集時の違い
編集時は、スプレッドシートの変更・編集時に実行されるトリガーに対し、
変更時はセルの値が変更された時のみに実行されるトリガーです。
編集時の方が適用範囲が広いですが、意図しない動きをしてしまうこともあるため、
特定のセルをトリガーにしたい場合などは編集時でトリガーセットすることもあります。
【編集時のトリガーで実行されるもの】
- 値の入力、コピペ、削除
- マウスドラッグによる連続コピー
- 行列が非表示時の編集
- フィルタ適用時の編集
- 行列の追加や削除
- 罫線の追加や削除
- 元に戻す(アンドゥ)
元に戻す(アンドゥ)を使用するとトリガーの実行はされますが、
意図しない動きになることも多く、また全てを戻せるわけではないので注意が必要です。
【編集時のトリガーで実行されないもの】
- GASスクリプトによる変更
- 数式等での自動参照(importrange,query,filterなど)
- フォーム送信時の値挿入
【変更時のトリガーで実行されるもの】
セルの値を変更した時のみ
フォーム送信時のトリガー
フォーム送信時のトリガーは、スプレッドシートとフォームを連携している時に、
フォームが送信されると実行されるトリガーです。
フォームが送信されたらメールを送信したり、
LINE、ChatWork、Slackなどの外部アプリに通知を送ったりするのに使用する事が多いです。
スプレッドシートとフォームの連携についてはまた別の記事で解説していく予定です!
トリガーを特定のセルで実行させる
編集時や変更時のトリガー起動で、特定のセルをトリガーにして実行させる方法は、
onEditの記事で解説しています。
トリガー起動でもやり方は同じなのでこちらを参考にしてください。
特定のシートやセルの変更で実行する方法まとめ
時間や毎日、日付などで実行する時間主導型トリガー
時間主導型のトリガーは、毎時などの時間や、毎日、日付指定など、時間をベースに定期的に実行する事ができるトリガーです。
タイプ | 間隔等 |
---|---|
特定の日時 | YYYY-MM-DD HH:MM |
分ベース | 1分、5分、10分、15分、30分おき |
時間ベース | 1、2、4、6、8、12時間おき |
日付ベース | 午前0~1時など1時間刻み |
週ベース | 毎週月〜日曜と1時間刻みの時間 |
月ベース | 1日〜31日と1時間刻みの時間 |
タスク管理などで使用する場合に1日1回完了タスクを処理したり、
GASでまとめてスプレッドシートを定期的に処理したい時などに便利です。
複数人でスプレッドシートをコピー共有している時の注意
複数人でスプレッドシートを使用している時にコピーして共有すると、
トリガーはコピーされないため、アカウント毎やスプレッドシート毎にトリガー設定が必要になってきます。
コピーして使用する場合は注意が必要です。
これに気付かずエラーにハマった経験があるので気をつけてください!
ありがとうございました!
コメント