スプレッドシートを使ってWBSのようなものを作成してプロジェクトメンバーの複数名で更新を行っているような使い方をしていると、誰かがどこかの行を編集したということがわかりやすくなっていると便利になります。
今回は、スプレッドシートが更新された時に、更新された行の任意の列に自動的に最終更新日が記録されるようにする方法について解説していきます。
○関連記事
今回のアウトプット
スプレッドシート
https://docs.google.com/spreadsheets/d/1vVcmf6KbEOx6I6_OCmNN2bqOmCiPNVnjniQjOoL-iBM/edit#gid=0
ご覧の通り、今回は
A列・・・タスク名
B列・・・進捗(ステータス)
C列・・・最終更新日
の構成となっています。
A列もしくはB列が更新されたら、C列に最終更新日が記録されます。
上記スプレッドシートは編集権を限定しておりますので、利用になる場合はコピーしてお使いください。
スクリプトエディタ
https://script.google.com/macros/d/1A3KjUyCKXs-bLslIQNDTQTlBytg7o9oQZjLlRtQLk66pLTsNLKd0u9V4/edit
※会社のセキュリティ規定などにより、スクリプトエディタへアクセスが出来ない場合は、こちらのgithubをご覧ください。
https://github.com/kakkiichan/GAS_row_lastdate
解説
スプレッドシート
スプレッドシートには特に仕掛けはありません。
スクリプトエディタ
スクリプトエディタには、スプレッドシートに紐付けて作成されたものと、紐付けられずに独立して作成されたものの2タイプがありますが、今回は前者の紐づけられたタイプです。
まずはコードを確認しましょう。
function set_last_update() {
var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var activerange=sh.getActiveRange();
var activerow=activerange.getRow();
sh.getRange(activerow, 3).setValue(new Date());
}
また、今回はトリガーを「スプレッドシートから」「編集時」に設定しています。
この設定により、スプレッドシートになんらかの編集がされるごとに「function set_last_update()」が実行されるようになります。

コード中の
var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var activerange=sh.getActiveRange();
の部分で、「アクティブなシート」、すなわち編集されたセルが所属するシートと、「アクティブなセル」、すなわち編集されたセルを取得しています。
また、
var activerow=activerange.getRow();
によって、アクティブなセルの行番号、つまり何行目が編集されたのかを取得しています。
最後に、
sh.getRange(activerow, 3).setValue(new Date());
によって、アクティブなセルの行番号の3列目、すなわち編集された行のC列にその時点の日付が入力されるようになります。
まとめ
以上が、スプレッドシートの行ごとの最終更新日をGASを使って自動で入力する方法のまとめです。他にも、編集したユーザーのgmailアドレスを取得して記録させたり、行単位ではなくセル単位で情報を記録することもできます。これらについては、発展版としてまたの機会とさせていただきます。