見出し画像

特定の行を更新したら行の更新日付を自動UpdateするGAS

『タイトルのブツを作れ。すぐにだ。』

とボスに言われました。

(世の中に落ちてるやろ

と思いググりましたが、意外にいいのが落ちてなかったので、

誰かのコードをパクって自作しました。

作るべきもの

一つのブックに複数のシートが存在し、それぞれのシートが別々の管理表になっています。

全ての管理表に更新日付自動Updateの仕組みが必要ですが、管理表ごとにカラム数も行の開始位置も異なるため、Config をシートごとに持たなければならず、アクティブなシートにのみ処理が働いて欲しいです。

作ったもの

以下の関数を、「編集時」をトリガに実行してください。

スクリーンショット 2021-03-03 0.44.12

function insertLastUpdated() {
 var ss = SpreadsheetApp.getActiveSpreadsheet(); //現在触っているファイルを取得
 var sheet = ss.getActiveSheet(); //アクティブなシートを取得
 var sheetName = sheet.getName(); //アクティブなシート名の取得
 var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得
 var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得
 var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得
 // sheet別に更新を捕えるRage設定
 Logger.log("sheetName = " + sheetName); //シート名称の出力
 switch (sheetName) {
   case "シート1":
     var targetRow = 2; //何行目移行を更新日自動更新の対象にするか指定
     var lowestRage = 2; //何列目から
     var upperRage = 5; //何列目までが更新された場合に更新日を自動更新するかのレンジ指定
     var updateRange = sheet.getRange('F' + currentRow); //どの列に更新日時を挿入するか
     break
   case "シート2":
     var targetRow = 2;
     var lowestRage = 2;
     var upperRage = 8;
     var updateRange = sheet.getRange('I' + currentRow); //どの列に更新日時を挿入するか
     break
   // case文を追加すれば対象シートを増やせる
 }
 Logger.log("Update Cell Position = Row:" + currentRow + ", Col:" + currentCol); //更新対象セル情報出力
 if(currentRow > targetRow && currentCol >= lowestRage && currentCol <= upperRage) { //targetRow以降かつ更新対象レンジの変更を参照とする 
   Logger.log(currentCell); //更新のValueのログ出力
   if(currentCell) {
     updateRange.setValue(new Date());
   } else {
     // 更新対象の値が null だった場合のLog
     Logger.log("currentCell param is null.");  
   }
 } else {
   // 更新対象の範囲外だった場合のLog
   Logger.log("Out of target range.");
 }
}


note のコードって見づらいね。。。

この記事が気に入ったらサポートをしてみませんか?