top of page

Googleスプレッドシート:編集履歴を自動記録 4

  • 執筆者の写真: egachira0250
    egachira0250
  • 5 時間前
  • 読了時間: 3分

チーム共有のスプレッドシートでは、セル単位トリガーが拾えない並び替えや書式変更なども含め、あらゆる変更を漏れなく記録したいケースがあります。そこで有効なのが「定期スナップショット&比較」。時間駆動トリガーでシート全体を定期保存し、前回との差分を自動検出することで、あらゆる編集履歴を包括的に取得できます。



■ 動作環境

OS:Windows 10 Home(64ビット)

Chrome:140.0.7339.128(Official Build) (64 ビット)



旧値/新値取得の3つの手法比較

手法

メリット

デメリット

e.oldValue/e.value

単一セル編集の取得がシンプル;即時ログ

複数セル・一括操作を拾えない

CacheServiceキャッシュ

複数セル編集を前後比較でカバー可能

onSelectionChange設計が必要;キャッシュ期限に注意

定期スナップショット&比較

並び替え・貼り付け・書式変更など全操作を差分検出可能

リアルタイム性は劣る;スナップショット間隔設計が肝要

今回は、幅広く操作種別をサポートできる「定期スナップショット&比較」の実装パターンを深掘りします。



定期スナップショット&比較による差分取得実装

1. 全体フロー


  1. 時間駆動トリガーで「compareAndLog」関数を定期実行

  2. 現在シート全体の値を保存(Archive シート or Properties)

  3. 次回実行時に「前回スナップショット」と「現状」を比較

  4. 差異のあるセルを抽出し、「ログ用シート」に旧値・新値を追記


2. コード例

主なクラス・メソッド仕様


  • ScriptApp.newTrigger(functionName).timeBased().everyMinutes(n).create():時間駆動トリガー設定に利用(スクリプトエディタUIでも可)。

  • getDataRange().getValues():シート全体の2次元配列データを取得。

  • clearContents():シートをクリア。ヘッダーがある場合は残すロジックを追加検討。

  • Range.setValues(values):二次元配列を一括書き込み。ログ登録時の setValues はパフォーマンス向上に有効。

  • Sheet.getLastRow():最終行番号を取得。ログ追記に使用。

  • Range.getA1Notation():セルのA1表記を取得。



■ さいごに

今回は「定期スナップショット&比較」であらゆる編集を差分検出する手法を紹介しました。

次回は、大量のログを安定して処理する“ストレージ戦略とパフォーマンス最適化”について解説します。お楽しみに!



コメント


©2020 by Excelノウハウの備忘録♪。Wix.com で作成されました。

bottom of page