「実行ボタンを押せば、ちゃんと動く。なのに、毎朝の自動実行に任せると動かない。」
GASの質問サイトでもよく見かけるお困りごとです。多くの場合、コードが壊れているのではありません。手で動かす時と、自動で動く時の「前提の違い」が原因です。この記事では、その違いを先に説明し、ご自身で確かめられる所を4つ、見る順に並べました。
■手で動かす時と、自動で動く時の違い
手で動かす時は、あなたがスプレッドシートを開いて、画面の前にいます。
自動実行(トリガー)の時は、だれも画面を開いていません。しかも、動かすのはあなたのアカウントとは限りません。Googleの説明では、時間で動くトリガーなどは、トリガーを作った人のアカウントで実行されます。
「画面を開いている人がいない」「動かす人が違う」。この2つが、多くの原因の元になります。
■先に、バックアップを取る
コードに触る前に、スプレッドシートの「ファイル」→「コピーを作成」でバックアップを作ってください。Apps Scriptのコードも、全部選んでコピーし、メモ帳などに貼って保存しておくと、いつでも元に戻せます。
■1. 自動実行のエラーメッセージを確かめる
自動実行で失敗しても、画面には何も出ません。実行の記録を見に行きます。
1. スプレッドシートのメニューで「拡張機能」→「Apps Script」を開きます。
2. 左側のメニューの「実行数」を開きます。
3. 一覧には「導入」「関数」「種類」「開始時間」「期間」「ステータス」の列が並びます。「種類」の列を手がかりに、自動実行の行と、手で動かした行を見分けます。
4. ステータスの列で、うまく動かなかった実行を探し、その行を開くとエラーメッセージが見られます。
手で動かした行は成功していて、自動実行の行だけがうまく動いていない。そうなっていれば、この先の内容が当てはまります。エラーメッセージは、コピーして控えておいてください。
■2. 「今開いている画面」を前提にした書き方がないか
コードの中に、次の言葉がないかを探します。コードの中をクリックしてから Ctrl + F を押すと、検索できます。
・getActiveSheet
・getActiveRange、getActiveCell
・getUi
・Browser.msgBox
「Active」は「今開いている」「今選んでいる」という意味です。手で動かす時は、あなたが開いているシートや選んでいるセルが使われます。自動実行では開いている人がいないので、思っていたのとは別のシートを読んでしまうことがあります(いちばん左のシートが使われることが多いようです)。
getUi や Browser.msgBox は、画面に確認ダイアログを出す命令です。自動実行ではダイアログを出す先がないため、「Cannot call SpreadsheetApp.getUi() from this context」のようなエラーになります。
直し方の一例は、シートを「名前で」指定することです(スプレッドシートの「拡張機能」から開いたGASの場合)。
// 直す前:今開いているシートを使う
// const sheet = SpreadsheetApp.getActiveSheet();
// 直した後:シートを名前で指定する
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('売上');
'売上' の所には、実際のシートのタブの名前を、一字一句そろえて入れてください。空白や全角・半角が1文字違うだけで、シートが見つからなくなります。確認ダイアログを出す命令は、自動で動かす関数からは外すのが基本です。
■3. トリガーの設定を見直す
1. Apps Scriptの左側のメニューで「トリガー」を開きます。
2. 動かしたいトリガーについて、次の3つを確かめます。
・実行する関数:トリガーに設定した関数が、コードの中の関数名と同じかどうか。関数名を後から変えると、トリガーは古い名前のまま残り、動きません。
・動く時刻:時間で動くトリガーは、「時刻を選択」で「午前 8 時~9 時」のような1時間の幅を選ぶ形です。その幅の中のどこかで動くので、8時ちょうどに動かなくても故障ではありません。
・タイムゾーン:左側のメニューの「プロジェクトの設定」を開き、「タイムゾーン」が日本の時刻(日本標準時)になっているかを確かめます。ずれていると、思った時刻に動きません。
■4. トリガーを作った人を確かめる
自動実行は、トリガーを作った人のアカウントで動きます。次の2点を、作った人のアカウントについて確かめます。
・読み書きするスプレッドシートの「編集者」になっているか
・今も使える状態か。異動や退職で使えなくなったアカウントのトリガーは、動かなくなることがあります
手で動かしたのがあなたで、トリガーを作ったのが別の人なら、同じコードでも結果が変わることがあります。
■それでも動かない時
■1で控えたエラーメッセージと、「手で動かすと動く/自動だと動かない」という様子が分かっていれば、原因の見当はかなりつけやすくなります。それでも直らない時や、コードを書き換えるのが不安な時は、ご相談ください。
最初のご相談で送っていただくものは、2つで足ります。エラーメッセージと、どのトリガー(毎朝・毎週など)で止まるか、です。パスワードや実在の個人情報は伏せてください。出品ページの「無料で見積り相談」から、作業の可否と金額をお答えします。料金は1件3,000円からで、超える場合は作業の前に金額をお伝えします。お届けは5日です。直した時は、コードと一緒に、修正箇所の一覧と、導入とエラー対処の手順書をお渡しします。ログイン情報や実在の個人情報を含むデータのお預かり、外部サイトへの自動入力などは、お受けしていません。詳しくは出品ページをご覧ください。
▼ご相談はこちら(筆者の出品です)
※画面の名前は、Googleの更新で変わることがあります。違う時は、近い名前の項目を探してください。