見出し画像

GAS×スプレッドシート|セル編集時に日付を自動入力|イチからDX

今回はスプレッドシートの特定の列にあるセルが編集された時に、自動で日付を記録(タイムスタンプ)する方法をご紹介します。


*今回の目的/概要

弊社ではホームページからの資料請求や無料体験版等のお申し込みにGoogleフォームを使用しており、回答が送信された際の通知には以前ご紹介した方法を活用しています。

Slack通知を受けた後に担当者が何らかの対応を行い、対応が完了した際には図のように確認欄(A列)に✔️を入れるようにしているのですが、

①いつ対応が完了したのかの記録を残したい
②後日対応が必要なものに関して別途Slack通知を受け取りたい

という目的で考えたのが今回ご紹介するGASです。

先に簡単に全体像をご説明するとこんな感じです。

確認欄(A列)に✔️を入れる(担当者が手入力)

対応日(H列)、後日対応予定日(I列)に日付が自動入力される

後日対応予定日(I列)の朝、担当者宛にSlack通知される

なお、後日対応予定日(I列)のSlack通知のやり方についてはこちらの記事を参照ください🙇‍♀️

ちなみに、Googleフォームの回答を記録するスプレッドシートは、最新の回答内容より下の行に何か入力すると、次に送信された回答内容は更にその下の行に記録されます。
後日対応予定日(I列)は関数を入れておけば良いのでは?と思った方もいるかもしれませんが、その場合には別のシートで行うようにしてください。


*セル編集時に日付を自動入力する方法

*コード全文

この後に補足説明をしますので、必要な方は最後までご覧ください🐰

function time_stamp() {

  //スプレッドシートを取得します
  const spread = SpreadsheetApp.getActive();

  //指定したシートを取得します
  const sheet = spread.getSheetByName('シート名を入力'); //該当シート名に差し替え

  //編集したセルを取得します
  const cell = sheet.getActiveCell();

  //編集したセルのセル番地を取得します
   //「列」を取得します
   const cell_column = cell.getColumn();
   //「行」を取得します
   const cell_row = cell.getRow();

  //日付を取得、表示形式を指定します
   //今日の日付を取得します
   const today = new Date();
   //対応日を設定します
   const date = Utilities.formatDate(today, 'Asia/Tokyo', 'y-M-d');
   //後日対応予定日を設定します(2週間後)
   today.setDate(today.getDate() + 13); //+13で13日後です。通知が必要な日付になるよう修正ください。
   const date_next = Utilities.formatDate(today, 'Asia/Tokyo', 'y-M-d');

  //対応日を入力したいセルを指定します
  const cell_date = sheet.getRange('H' + cell_row);
   //当該セルの値を取得します
   const cell_date_h = cell_date.getValue();

  //後日対応予定日を入力したいセルを指定します
  const cell_date_I = sheet.getRange('I' + cell_row);

  //チェックを入れた行に日付を入力します(初回のみ、更新時は実行しない)
   //編集したセルがA列かつH列が空欄の場合に実行します
   if(cell_column == 1 && cell_date_h === ''){
   //対応日を入力します
   cell_date.setValue(date);
   //後日対応予定日を入力します
   cell_date_I.setValue(date_next);

}

}

*補足説明

今回は「A列が編集され、かつ、H列が空欄の場合」にのみ対応日等が入力されるようにしています。
というのも、「H列が空欄の場合」という条件指定がないとA列が編集されるたびに日付が更新(上書き)されてしまうからです。
意図せず対応日を更新してしまうと、後日対応予定日に通知を受け取れない可能性がありますので、A列を初めて編集した時のみGASが実行されるような仕組みにしました。

※if文でセルの空白を判定する方法については、こちらの記事を参考にさせて頂きました!ありがとうございます🙇‍♀️

トリガーはこのような設定にしました。


*おまけ)編集の度に日付を上書きしたい場合

あえてセルを編集/更新するたびに日付を書き換えたいというケースもあると思いますので、参考までにのせておきます。

function time_stamp2() {

  //アクティブなスプレッドシートを取得します
  const spread = SpreadsheetApp.getActive();

  //指定したシートを取得します
  const sheet = spread.getSheetByName('シート名を入力'); //該当シート名に差し替え

  //編集したセルを取得します
  const cell = sheet.getActiveCell();

  //編集したセルのセル番地を取得します
   //「列」を取得します
   const cell_column = cell.getColumn();
   //「行」を取得します
   const cell_row = cell.getRow();

  //日付を取得、表示形式を指定します
  const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'y-M-d');

  //日付を入力したいセルを指定します
  const cell_date = sheet.getRange('H' + cell_row)

  //チェックを入れた行に日付を入力します
   //編集したセルがA列の場合に実行します
   if(cell_column == 1){
   //日付を入力します
   cell_date.setValue(date);  
   }
}

このコードでは、A列が編集されるたびにH列の日付が更新(上書き)されます。目的に応じて使い分けてください。


*さいごに

通常であれば、いつセルを編集したのかを調べるためにはスプレッドシートの編集履歴を遡る必要がありますが、今回ご紹介したコードを使えば手間なく初回編集日や最終更新日を記録でき、すぐに日付を確認できます。

何かの参考にして頂けましたら幸いです。それではまたお会いしましょう🐰


𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧𖡼.𖤣𖥧


いいなと思ったら応援しよう!