セルを編集したときに処理したい(onEdit)
1function onEdit(e) {
2 // 編集されたセルに、編集時刻をメモとして残す
3 e.range.setNote(`最終更新: ${new Date()}`);
4}
onEdit関数は、スプレッドシートのセルを手動で編集したときに自動で呼ばれる関数です。
onEditはシンプルトリガーなので、トリガーの登録は不要です。
その代わり、次の制約があります。
手動の編集でのみ実行される(
setValueなどスクリプトからの変更では実行されない)メールの送信など、認可が必要な操作はできない
実行時間は30秒まで
引数したい(e)
onEdit(e)の引数eには、編集の情報が入っています。
プロパティ |
内容 |
|---|---|
|
編集されたセル( |
|
編集後の値。単一セルのときだけ入る |
|
編集前の値。単一セルのときだけ入る |
|
スプレッドシート( |
|
編集したユーザー( |
|
認可モード( |
複数セルをまとめて編集したときはe.valueとe.oldValueがundefinedになります。
その場合はe.range.getValues()で範囲の値を取得します。
ステータスの変更で処理したい
1function onEdit(e) {
2 const sheet = e.range.getSheet();
3
4 // 「申請」シートのC列(ステータス列)だけを対象にする
5 if (sheet.getName() !== "申請") return;
6 if (e.range.getColumn() !== 3) return;
7
8 // 「未処理」→「承認」に変わったときだけ発動する
9 if (e.oldValue === "未処理" && e.value === "承認") {
10 // 承認した日時を隣のD列に書き込む
11 e.range.offset(0, 1).setValue(new Date());
12 }
13}
e.rangeからgetSheet・getColumnで編集位置を絞り、
e.oldValueとe.valueで「どの値からどの値に変わったか」を判定します。
e.oldValueとe.valueは単一セルの編集でしか入らないので、
このパターンはセルを1つずつ編集する運用に向いています。