前提
スプレッドシートにて、特定のシートに何かしらの入力をした際、入力した日時を自動的に特定のセル(入力した行の指定の列)に入力するスクリプトを組みました。
1行ずつ情報を追加していくような使い方をイメージしており、初めてその行に入力がされた日時をメモとして記載しておきたいと考えております。
###問題点
自動入力された日時を削除した際、削除の操作も入力と判断され、削除後に削除した日時が入力されてしまいます。
###実現したいこと
自動入力された日時を消せるようにしたいと考えております。
入力するセルを、例えば「A列に入力があった場合」など限定できれば解消できるのではと考え、このような内容で質問を作成させていただきました。
該当のソースコード
GAS
1function set_last_update() { 2let sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");//シートを取得 3let activerange = sh.getActiveRange(); //アクティブセルを取得 4let activerow = activerange.getRow(); //アクティブセルの行を取得 5 if (!sh.getRange(activerow, 3).getValue()) { //条件分岐、アクティブ行の3列(C列)が空白だった場合 6 sh.getRange(activerow, 3).setValue(new Date()); //アクティブ行の3列に「日時」入力 7 } 8}
試したこと
アクティブセル取得の前に、.getRange()
で範囲を指定できるのではと考え、試しに以下のスクリプトで実行してみましたが、うまく動きませんでした。
GAS
1function set_last_update() { 2 let sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");//シートを取得 3'let range = sh.getRange(1,3,2000); //3列(C1:C2000)を取得' 4 let activerange = 'range'.getActiveRange(); //アクティブセルを取得 5 let activerow = activerange.getRow(); //アクティブセルの行を取得 6 if(!sh.getRange(activerow, 3).getValue()){ //条件分岐、アクティブ行の3列(C列)が空白だった場合 7 sh.getRange(activerow, 3).setValue(new Date());//アクティブ行の3列に「日時」入力 8 } 9} 10 11 12
補足情報
Windows 10でGASを操作しております。
私自身、プログラミングを学び始めたばかりで、各メソッドの知識が不足しており、WEB上で公開されている情報をもとに、手探りでスクリプトを作成しました。初歩的なミスをしている可能性も多分にあるかと思いますが、アドバイスをいただけますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/01 10:02