計測したデータの軽量化のために、似たようなデータが前後している場合は一方を削除する処理を行うために、作りました.
始めは一つ一つセルを取得させて、計算させていたのですが、処理速度が遅く悩んでいたところ、
スプレッドシート全体の数値を一括で読み込ませたのちに、それぞれ処理させる方が速いと知り、試しました。
試したところ、以下のエラーが出ました。
TypeError: Cannot read property '2' of undefined
おそらくセルの指定がうまくいってないのだと思いますが、調べてもよくわかりませんでした。
下記の方法でのセルの指定の仕方について教えてください。
GAS
1// 各数値の計算式 2 3function practice() { 4 var sheet = SpreadsheetApp.getActiveSheet(); 5 var orp1,ph1,ec1,temp1,orp2,ph2,ec2,temp2,stan,lastRow; 6 lastRow = sheet.getLastRow(); 7 var iValues = sheet.getRange(2, 1, lastRow, 5).getValues(); 8 stan=0.005; 9 var h=i-1; 10 var j=i+1; 11 for(var i = 3; i <=lastRow; i++) { 12 //処理 13 orp1 =Math.abs((iValues[i][2]-iValues[h][2])/iValues[h][2]) 14 ph1 =Math.abs((iValues[i][3]-iValues[h][3])/iValues[h][3]) 15 ec1 =Math.abs((iValues[i][4]-iValues[h][4])/iValues[h][4]) 16 temp1 =Math.abs((iValues[i][5]-iValues[h][5])/iValues[h][5]) 17 orp2 =Math.abs((iValues[j][2]-iValues[i][2])/iValues[i][2]) 18 ph2 =Math.abs((iValues[j][3]-iValues[i][3])/iValues[i][3]) 19 ec2 =Math.abs((iValues[j][4]-iValues[i][4])/iValues[i][4]) 20 temp2 =Math.abs((iValues[j][5]-iValues[i][5])/iValues[i][5]) 21 Logger.log("ORP1" +" "+ orp1+" "+ "pH1" +" "+ ph1+" "+ "EC1" +" "+ ec1+" "+ "Temp1" +" "+ temp1) 22 Logger.log("ORP2" +" "+ orp2+" "+ "pH2" +" "+ ph2+" "+ "EC2" +" "+ ec2+" "+ "Temp2" +" "+ temp2) 23 if(orp1<=stan&&ph1<=stan&&ec1<=stan&&temp1<=stan&&orp2<=stan&&ph2<=stan&&ec2<=stan&&temp2<=stan) 24 { 25 sheet.deleteRows(i); 26 Logger.log("remove"); 27 // 条件式がtrueだったときの処理 28 }else{ 29 Logger.log("remain"); 30 // 条件式がfalseだったときの処理 31 } 32 } 33 Logger.log(i); 34}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/09 16:23
2021/07/10 00:17