2022/09/09に更新

【GASで便利に】セルを編集した人と日時をメモに追加する

スプレッドシート小技実験的

セルが編集されたときに、編集したユーザーのメールアドレスと日時をメモ欄に記載するGoogle Apps Scriptです。

こんな悩みを解決します


  • セルを編集した人をすぐに確認したい。
  • セルを右クリックして「編集履歴を表示」なんてめんどくさい!

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • セルが編集されると、そのセルにメモ(日時と編集したユーザーのメールアドレス)を記入します。
  • 複数セルがまとめて編集された場合は、編集範囲のすべてのセルにメモが追加されます。
  • メモに記入されるのは最新の編集日時の1件だけです。

使い方


1.トリガーの設定

スクリプトをコピペしたら、トリガーの設定を行います。
セルの編集時に発火してほしいのでこのように設定します。

  • 実行する関数: logging_to_note_when_edit
  • デプロイ時に実行: HEAD
  • イベントのソース: スプレッドシートから
  • イベントの種類: 編集時
2.動作確認

それではさっそく試してみましょう。適当にセルを編集すると・・・

メモが追加されました!(マスキングのところはメールアドレスです)

複数セルに貼り付けた場合もメモが追加されます。

セルの値をまとめて消したときにも、それぞれのセルにメモが追加されます。

3.注意点

次々にセルを編集すると、「編集時」のトリガーがうまく発火しないかもしれません。
そして今回このスクリプトを試していて気づいたんですが、セルのカット&ペーストでメモも一緒についてきてしまうんですね。
値の削除ではなくカットされてしまうと、せっかく追加されていたメモが消えてしまう・・ということになります。ご注意くださいませ。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * 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);

    }
  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp