質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

579閲覧

GASでセルの数値取得と計算の処理を早くしたい

colcol

総合スコア2

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/07/09 15:23

計測したデータの軽量化のために、似たようなデータが前後している場合は一方を削除する処理を行うために、作りました.
始めは一つ一つセルを取得させて、計算させていたのですが、処理速度が遅く悩んでいたところ、
スプレッドシート全体の数値を一括で読み込ませたのちに、それぞれ処理させる方が速いと知り、試しました。
試したところ、以下のエラーが出ました。

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

var h=i-1;
var j=i+1;

iが未定義です。

投稿2021/07/09 15:55

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

colcol

2021/07/09 16:23

本当ですね!ありがとうございます。 しかし3行目のvarでiを定義しましたが、 同じエラーの「TypeError: Cannot read property '2' of undefined」が出ました。なぜなのか教えていただけると幸いです
itagagaki

2021/07/10 00:17

iを定義したというのは、iに意味のある値を代入したということですか? もしかして単に var i; を入れただけなのなら解決になりません。 hとjはどんな値になるべきですか? hの値が正しくないから、iValues[h] がエラーになるのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問