下記のwriteEditInfo(e)
関数を「編集時」のトリガーに設定してください。
トリガー設定

コード

javascript
1function writeEditInfo(e) {
2 const now = new Date(); // 編集日時
3 const sheetName = e.source.getSheetName(); // 編集されたシート名を取得
4 const cellName = e.range.getA1Notation(); // 編集されたセル名を取得
5 const oldValue = e.oldValue; // 編集前の値を取得
6 const newValue = e.value; // 編集後の値を取得
7
8 const ss = SpreadsheetApp.getActiveSpreadsheet();
9 const sheet = ss.getSheetByName('更新管理'); // 更新情報を記録するシートを取得
10
11 sheet.appendRow([now, sheetName, cellName, oldValue, newValue]); // 最終行に行を追加し、情報を書き込む
12}
解説
- トリガーで編集時(または
onEdit(e)
)に設定すると、引数e
(イベントオブジェクト)からさまざまな編集情報が取得できます。
- 私はスプレッドシートの言語設定が英語のため日時が「12/28/2022」になってしまっていますが、日本語に設定されていましたらデフォルトで年月日の順番で表示されていると思います。
- されていない場合や他の表示に変更したい場合は、
Utilities.formatDate()
メソッドを利用して、お好きに整形してください。
- または、GASを使用せずに、Googleスプレッドシートの「カスタム日時」で表示形式を変更することも可能です。
最終更新日時のみ書き込むコード
Aシート、Bシート・・・Zシートの最終更新日を「更新管理」シートに記載することは可能でしょうか。
イメージとしては、新しいレコードが追加されのではなく、
Aシート:12/27
更新があったら、上記のレコードの更新日が上書きされて以下のようになる形です。
Aシート:12/28
STEP1
初回のみ、以下のwriteSheetNames()
関数を実行すると、自動でシート名を羅列してくれます。
▼実行前

▼実行後

javascript
1// 『最終更新日管理シート』に、自動でシート名(A〜Zシート)を出力する、初回のみ手動で実行させる関数
2function writeSheetNames() {
3 const ss = SpreadsheetApp.getActiveSpreadsheet();
4 const lastDateSheet = ss.getSheetByName('最終更新日管理');
5
6 // シート名を配列で取得(例:最初の2つのシートは無視して、3つ目=配列で言うと2番目からが対象シート)
7 const sheetNames = ss.getSheets().slice(2).map(sheet => sheet.getSheetName()); // ['Aシート', 'Bシート', 'Zシート']
8 // 書き込む情報の2次元配列を生成
9 const values = sheetNames.map(name => [name, '']);
10 // [
11 // ['Aシート', ''],
12 // ['Bシート', ''],
13 // ['Zシート', '']
14 // ]
15
16 // 書き込む場所の範囲を取得
17 const range = lastDateSheet.getRange(2, 1, sheetNames.length, 2);
18 // シート名を書き込む
19 range.setValues(values);
20}
STEP2
以下のwriteLastEditDate(e)
関数を「編集時」トリガーに設定してください。
最終更新日時のみ管理できるようになります。

javascript
1// 『最終更新日管理シート』に、編集があったシートの最終更新日を、編集時に自動で出力する関数
2function writeLastEditDate(e) {
3 const ss = SpreadsheetApp.getActiveSpreadsheet();
4 const lastDateSheet = ss.getSheetByName('最終更新日管理');
5 const lastRow = lastDateSheet.getLastRow();
6
7 // 編集されたシート名を取得
8 const sheetName = e.source.getSheetName();
9 // 編集日時を整形
10 const now = Utilities.formatDate(new Date(), 'JST', "yyyy/MM/dd HH:mm:ss");
11
12 // 編集されたシート名が、最終更新日管理シートの何行目にあるか、行番号を取得
13 const rowNum = lastDateSheet.getRange(1, 1, lastRow, 1).getValues().flat().indexOf(sheetName) + 1;
14 // 書き込むセルを取得
15 const cell = lastDateSheet.getRange(rowNum, 2);
16 // 更新日時を書き込む
17 cell.setValue(now);
18}