質問: ssR.getRange('H' + RowR);//現在のスプレッドシートの現在の行のH列 if(RowR>1){ //Rowが1行目でないとき if(RCell==true) { //現在のスプレッドシートの現在の行のA列の値の変更があったとき RTime.setValue(new Date());//現在時刻を挿入 } } } ``` ### 試したこと トリガーを変更してみたりしてみました。 初歩的な質問で申し訳ありませんが、どなたかご教授いただけると幸いです。 ### 補足情報(FW/ツールのバージョンなど) 管理簿は一ヶ月ごとにファイルを新しくしていて、全てのシートは日付ごとに分けられています。 例)11/1、11/2・・・とシートが別々 それら全てに適用させたいです。
回答: イベントハンドラーはハードルが高いみたいなんで、↓こうしてください。 `const RCell = ssB.getRange('B' + RowB).getValue(); //これ`と`if(BCell==true && !RCell)`が変更点です。 adhocに考えれば、問題は、「RCell」がオンになった状態なのに、「BCell」がオンになったときの処理が走ってします、だと言えます。つまりRCellがオンである時にBCellがオンになったときの処理が動かなければいい。あるいは、RCellがオフのときだけBCellがオンになった処理が動けばいい、と考えられます。 従って↑の赤字の部分の前者は、BCell処理において、RCellを考慮にいれ、かつ、後者はifにおいて、RCellがfalseであるかを識別すればよい、と考えられます。 ``` function logerB() {//logerBというイベント var ssB = SpreadsheetApp.getActiveSheet(); //現在のスプレッドシートを取得 var RowB = ssB.getActiveCell().getRow(); //現在のスプレッドシートの現在の行を取得 var BCell = ssB.getRange('A' + RowB).getValue(); //現在のスプレッドシートの現在の行のA列 const RCell = ssB.getRange('B' + RowB).getValue(); //これ var BTime = ssB.getRange('G' + RowB);//現在のスプレッドシートの現在の行のG列 if(RowB>1){ //Rowが1行目でないとき if(BCell==true && !RCell) { //現在のスプレッドシートの現在の行のA列の値の変更があったとき BTime.setValue(new Date());//現在時刻を挿入 } } } function logerR() {//logerRというイベント var ssR = SpreadsheetApp.getActiveSheet(); //現在のスプレッドシートを取得 var RowR = ssR.getActiveCell().getRow(); //現在のスプレッドシートの現在の行を取得 var RCell = ssR.getRange('B' + RowR).getValue(); //現在のスプレッドシートの現在の行のB列 var RTime = ssR.getRange('H' + RowR);//現在のスプレッドシートの現在の行のH列 if(RowR>1){ //Rowが1行目でないとき if(RCell==true) { //現在のスプレッドシートの現在の行のA列の値の変更があったとき RTime.setValue(new Date());//現在時刻を挿入 } } } ```