google apps scriptで スプレッド シートの編集時に自動実行されるonEdit関数で別のスレッドシートにアクセスする方法を記載します。
onEdit関数とは
スプレッド シートが編集されたことを自動で検知し、実行される関数になります。下記のように記載し、eの中には編集されたセルの情報が格納されています。
function onEdit(e) {
var value = e.range.getValue();
}
eの中から取得できる情報
編集後の値を取得 | e.range.getValue() |
編集セルの行番号取得 | e.range.getRow() |
編集セルの列番号取得 | e.range.getColumn() |
編集前の値を取得 | e.oldValue |
onEdit(e)で別のスプレッドシートが修正できない時の対応
onEdit(e)関数は編集時に実行されるので
あるスプレッドシートが編集されたらその編集方法を別のスプレッドシートに書き込みたいと思い、そのようにスクリプトを記載すると実はうまく行きません。
下記がうまくいかない時の例です。
function onEdit(e) {
//編集した値を取得
var value = e.range.getValue();
//書き込み先のスプレッドシート、シートを取得
var outputSs = SpreadsheetApp.openByUrl("書き込み先のURL");
var outputSheet = outputSs.getSheetByName("シート1");
//A1セルに編集内容を書き込み
outputSheet.getRange(1, 1).setValue(value);
}
これをやると、書き込み先のURLからスプレッドシートのオブジェクトを取得するところで処理が終わってしまいます。
自動で実行される処理ないで別のスプレッドシートを参照、修正することは禁止されているようです。
そこで下記のように修正をします。
function onEditfunc(e) {
var value = e.range.getValue();
var outputSs = SpreadsheetApp.openByUrl("書き込み先のURL");
var outputSheet = outputSs.getSheetByName("シート1");
outputSheet.getRange(1, 1).setValue(value);
}
関数名をonEdit(e)からonEditfunc(e)に変更しただけです。変更後の関数名はonEditでなければ任意の名前で大丈夫です。
これだけでは、編集後自動実行されないので、あとはトリガーを設定してあげます。
トリガーの設定方法は、スクリプトエディタのメニュー→編集→現在のプロジェクトのトリガーをクリックしていきます。
開いた画面でトリガーの追加をクリックし、下記の画像のように設定します。
ポイントは、実行する関数を先ほどonEditから変更した関数名にすること
イベントの種類の選択を編集時に変更することです。
設定をしたら保存を押しましょう.
以上で完了になります。
あとは、スクリプトを記載したセルを編集し、別のスプレッドシートに記載されるか確認しましょう。
・編集前のスプレッドシート
・スプレッドシート編集
・書き込み先スプレッドシート
うまくいきましたね。以上になります。
コメントを書く