前提・実現したいこと
現在在庫管理の簡易的なシステムをスプレッドシートで作成しています。
マスタシートの特定行の値を検索して、条件に合えばそのレコードの中からさらに要素を抽出して
別シートに表示させるというシステムを作成しています。
初心者なもので、どうしてもfor文の中で何度もgetValueとsetValueを繰り返す文しか思いつかず、困っています。
実際に下記のソースで希望通りの動作自体はするのですが、1000レコードくらいある中からたかだか50レコードほどをget,setするだけで約2分ほどかかってしまいます。今後さらにデータが増えたときのことを考えるとあまりに時間がかかることが予想されるので、なんとかAPIの呼び出し回数を少なくして、動作時間の短縮ができないか考えているんですが、方法がわかりませんので質問させていただきました。
|列1|列2|列3|4|列5|列6|列7|列8|列9|列10|列11|列12|列13|列14|列15|
|:--|:--:|--:|
||||
列14に入力されている文字列が”未”だったら、1,2,4,5,6,7,13,15を別シートの最終行に追加していきたいというイメージです。
1行づつ追加ではなく2次元配列でごっそりまるごとセットすればというとこまでは考えられるんですが、実現方法がわかりません。
該当のソースコード
//マスタから検索して表示させる
function syoukyaku_before(){
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var tana = sheet.getSheetByName("setsubi_tana");
var a_mst = sheet.getSheetByName("setsubi_a_masta")
//マスタの最後の行を取得
var last_row = a_mst.getDataRange().getLastRow();
//マスタのレコード14列目の文字列から”未”のものだけを選別して、値を取得しそれぞれセットする
for(var i=1;i<=last_row;i++){
var genka = a_mst.getRange(i,14).getValue()
//未なら
if(genka == "未"){
//15要素ある中の、別シートに表示させたい値だけをそれぞれ取得 var A = a_mst.getRange(i,1).getValue() var B = a_mst.getRange(i,2).getValue() var C = a_mst.getRange(i,4).getValue() var D = a_mst.getRange(i,5).getValue() var E = a_mst.getRange(i,6).getValue() var F = a_mst.getRange(i,7).getValue() var G = a_mst.getRange(i,13).getValue() var H = a_mst.getRange(i,15).getValue() //取得した値を棚卸シートのデータ最後の行に入れてく tana.appendRow([A,B,C,D,E,F,G,H]); }
}
}
試したこと
検索対象をすべて配列に入れてその中から対象だったものの行番号を返したりできないもんかと色々考えたりしたんですが、
行番号の検索は複数はできなかったりで行き詰ってしまいました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー