前提・実現したいこと
プログラミング初心者です。
現在、機材の貸出の管理簿としてGoogle App Scriptを用いてスプレッドシートを使用しています。
貸出と返却の時刻を以前までは手入力していたのですが、面倒臭いのでGASで自動入力をしようと思っています。
スプレッドシートのAとBの行にそれぞれ貸出・返却のチェックボックスを作り、そこに貸出・返却の際にチェックを入れることでそれぞれGとHの行にその時刻が出るようにしています。
A:貸出用チェックボックス
B:返却用チェックボックス
C:端末番号
D:(空欄)
E:利用者番号
F:利用者番号からVlookupで導き出した氏名
G:貸出時刻
H:返却時刻
になっています。
発生している問題・エラーメッセージ
貸出(A行のチェックボックスにチェックを入れる)をすると時刻が正しく入力されるのですが、返却の際にB行のチェックボックスにチェックを入れると貸出時刻も変わります。つまり貸出・返却時刻共に「返却時刻」に変更されてしまいます。
それぞれトリガーは「変更時」になっていますが、トリガーのエラー(stackdriverのログ)を見ると
エラー 範囲外のセル参照です at logerR(コード:16)
となっています。
Google App Script
function logerB() {//logerBというイベント var ssB = SpreadsheetApp.getActiveSheet(); //現在のスプレッドシートを取得 var RowB = ssB.getActiveCell().getRow(); //現在のスプレッドシートの現在の行を取得 var BCell = ssB.getRange('A' + RowB).getValue(); //現在のスプレッドシートの現在の行のA列 var BTime = ssB.getRange('G' + RowB);//現在のスプレッドシートの現在の行のG列 if(RowB>1){ //Rowが1行目でないとき if(BCell==true) { //現在のスプレッドシートの現在の行の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());//現在時刻を挿入 } } }
試したこと
トリガーを変更してみたりしてみました。
初歩的な質問で申し訳ありませんが、どなたかご教授いただけると幸いです。
補足情報(FW/ツールのバージョンなど)
管理簿は一ヶ月ごとにファイルを新しくしていて、全てのシートは日付ごとに分けられています。
例)11/1、11/2・・・とシートが別々
それら全てに適用させたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/08 06:52
2018/11/08 07:03
2018/11/08 07:13
2018/11/08 07:14
2018/11/08 07:19