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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

6526閲覧

GAS(javascript)で二次元配列から二次元配列へ代入したい

i-bunta

総合スコア20

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2018/04/16 13:55

GoogleAppsScriptで条件に応じたデータを別シートに転記するスクリプトを書いています。

具体的には5000行×6列のデータをgetValues()で二次元配列に代入し、この配列を繰り返し構文で回して特定の列の数値が指定変数以下かどうかを判別する条件分岐を書きました。

その後、if内で別シートへ二次元配列からその行を全て転記しようと以下のように書きました。

javascript

1 if(seach_data[i][5] < rank && seach_data[i][4] < percent){ 2 sheet.getRange(j,1).setValue(seach_data[i][0]); 3 sheet.getRange(j,2).setValue(seach_data[i][1]); 4 sheet.getRange(j,3).setValue(seach_data[i][2]); 5 sheet.getRange(j,4).setValue(seach_data[i][3]); 6 sheet.getRange(j,5).setValue(seach_data[i][4]); 7 sheet.getRange(j,6).setValue(seach_data[i][5]); 8 sheet.getRange(j,7).setValue('A'); 9 j=j+1 10 11 }

見るからに煩雑で改善の余地ありと思うだけでなく、毎回APIを叩くことになるので処理が遅くなってしまいます。

理想は別の二次元配列を用意して条件に該当した行を代入。
これを繰り返し、終わったらその二次元配列を一気に別シートへ転記。

というようなことができたら何度もAPIを叩かなくて済むので処理が早くなるかなと考えています。

この際、二次元配列がサポートされていないjavascriptではどういった書き方をすれば上のコードと同じ動きができますか?
まだあまり触った経験が少なく解決策がわからなかったので、お教え頂ければ幸いです。

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

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

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

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

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

Lhankor_Mhy

2018/04/17 00:44

setValues メソッドで配列のまま値をセットするのではうまくいかないのですか?
guest

回答1

0

ベストアンサー

理想は別の二次元配列を用意して条件に該当した行を代入。 これを繰り返し、終わったらその二次元配列を一気に別シートへ転記。

上記なら、filter()で該当データ抽出後、setValues()すれば良いと思います。

javascript

1var results = seach_data.filter(function(arr){ 2 return arr[5] < rank && arr[4] < percent; 3 }); 4sheet.getRange( {対象シートの対象範囲} ).setValues(results);

以上、参考になれば幸いです。

投稿2018/04/17 03:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

i-bunta

2018/04/17 22:50

できました!!!ありがとうございます!!!!
退会済みユーザー

退会済みユーザー

2018/04/17 23:14

何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問