質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1522閲覧

GASで一つのシートに別複数シートの更新日を記入したい

kuro788

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/12/26 23:46

前提・ 実現したいこと

台帳管理で一つのファイルに複数シート存在していますが、頻繁には更新されていません。
そこで、GASを利用して、シートに更新があった場合に、更新管理シートに更新日が入力されて、一括管理できるようにしたいです。

ここに実現したいことを箇条書きで書いてください。

  • 更新管理シートにAシート・Bシート・・・Zシート、それぞれの更新日を記入
  • イメージは更新管理シートで以下のように一元管理できている状況になります。
  • Aシート:2022-12-27
  • Bシート:2022-12-01
  • Zシート:2021-06-07

試したこと

同じシート内で更新があった際に、更新日が入力される方法は調べたら出てきたらのですが、上記については、見つからず質問になります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuro788

2022/12/27 04:30

丸投げの質問ですみません! 下記のように、同じシート内であれば、更新日を確認できるのですが、 一つのシートで複数シートの更新日を確認するにはどうしたらいいかわからず困っています。 function insertLastUpdated() { //アクティブなスプレッドシートの特定のシートを指定 var ss = SpreadsheetApp.getActive().getSheetByName(); //アクティブなセルの行数を取得 var currentRow = ss.getActiveCell().getRow(); //アクティブなセルの値を取得 var currentCell = ss.getActiveCell().getValue(); //更新日をいれる列をstringで指定、B+currentRowでB列のセルを指定できる var updateRange = ss.getRange('B' + currentRow); Logger.log(updateRange); if(currentRow>1){ if(currentCell) { updateRange.setValue(new Date()); } } }
guest

回答1

0

ベストアンサー

下記の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}

解説


最終更新日時のみ書き込むコード

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}

投稿2022/12/27 16:45

編集2022/12/28 12:27
Cocode

総合スコア2314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuro788

2022/12/28 09:31

回答ありがとうございます! 頂いた内容で設定することができました。 Aシート、Bシート・・・Zシートの最終更新日を「更新管理」シートに記載することは可能でしょうか。 イメージとしては、新しいレコードが追加されのではなく、 Aシート:12/27 更新があったら、上記のレコードの更新日が上書きされて以下のようになる形です。 Aシート:12/28
Cocode

2022/12/28 12:28

回答を更新しました。
kuro788

2022/12/28 21:32

ありがとうございます!! 実現したいことができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問