セルが編集されたときに、編集したユーザーのメールアドレスと日時をメモ欄に記載するGoogle Apps Scriptです。
特にありません。今お使いのスプレッドシートに組み込めます。
スクリプトをコピペしたら、トリガーの設定を行います。
セルの編集時に発火してほしいのでこのように設定します。
それではさっそく試してみましょう。適当にセルを編集すると・・・
メモが追加されました!(マスキングのところはメールアドレスです)
複数セルに貼り付けた場合もメモが追加されます。
セルの値をまとめて消したときにも、それぞれのセルにメモが追加されます。
次々にセルを編集すると、「編集時」のトリガーがうまく発火しないかもしれません。
そして今回このスクリプトを試していて気づいたんですが、セルのカット&ペーストでメモも一緒についてきてしまうんですね。
値の削除ではなくカットされてしまうと、せっかく追加されていたメモが消えてしまう・・ということになります。ご注意くださいませ。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00142/index.html
*/
function logging_to_note_when_edit(e) {
// セルの値が変わったときに実行される関数
// 編集したユーザーのメールアドレスを取得する
const user_mail = Session.getActiveUser().getEmail();
// 編集日時をフォーマットを指定して取得する
const datetime = Utilities.formatDate(new Date(), 'JST', 'yyyy-MM-dd HH:mm');
// 開いているスプレッドシートのオブジェクトを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
// 編集したシートのオブジェクトを取得
const edited_sheet = ss.getActiveSheet();
// 編集されたセル範囲を取得する
const row_start = e.range.rowStart; // 行の開始
const row_end = e.range.rowEnd; // 行の終わり
const col_start = e.range.columnStart; // 列の開始
const col_end = e.range.columnEnd; // 列の終わり
// 編集されたセルすべてを1つずつループ
for (i = row_start; i <= row_end; i++) { // 行のループ
for (j = col_start; j <= col_end; j++) { // 列のループ
// 1セルずつ範囲オブジェクトを取得
let range = edited_sheet.getRange(i, j);
// メモ(note)に日時とメールアドレスをセット
range.setNote('[' + datetime + '] ' + user_mail);
}
}
}
スプレッドシートの内容が変更されるたびにメールで通知するGoogle Apps Scriptです。標準機能でスプレッドシートのオーナーへはメール通知が可能ですが、任意の宛先に送れるものを作ってみました。
特定のセルが編集されたときにメールを送信するGoogle Apps Scriptです。大事な部分が更新された時にすぐに知りたいときに使えるかもしれません。
指定したユーザーによるGASの実行をブロックするGoogle Apps Scriptです。ブラックリスト方式で制御したいときに。
標準機能では即時と1日1回しか選べない「更新時の通知」を、任意のタイミングで行うGoogle Apps Scriptです。