0

SpreadSheetの列を2D配列(メモリ)の列に置き換え/上書きするより直接的な方法について、誰かが私にいくつかの指針を与えることができるかどうか疑問に思っています。

現在、以下のコードは、「for」ループを介して行ごとに下にスクロールすることにより、セルに値を書き込みます。これは問題ありませんでしたが、シートが 7,000 行を超えたため、このスクリプトは実行時間の制限に近づいています。

シート全体をメモリ配列と計算に保存するプロセスにはほとんど時間がかかりませんでした。セルごとにシートを呼び出す for ループは、永遠にかかるようです。

値を更新するために列をセルごとにスクロールするのではなく、列全体を置き換えるより直接的な方法が必要です。

私の無知を許してください。私はスクリプト作成に非常に慣れていません。

よろしくM

   function UnitPrice() {
      var range = Stocklist.getRange(1, 1, LastRow, LastColumn).getValues();  

      for (var i=1; i < (LastRow); i++){
        var PurposeArray = range[i][PurposeCol-1]; 
        var ListedArray = range[i][ListedCol-1];
        var QtyArray = range[i][QtyCol-1];
        var CostArray = range[i][Cost$Col-1];
        var Unit$Array = range[i][Unit$Col-1]; 
        var PremiumArray = range[i][PremiumCol-1];

        if (QtyArray!="0" && QtyArray!=""){
          range[i][Unit$Col-1] = CostArray*(1+PremiumArray)/QtyArray;
        } else{
          range[i][Unit$Col-1] = "";
        } 

        if (ListedArray!=""&&PurposeArray=="" ){           
            range[i][PurposeCol-1] = "Stock";
        }
      }


      //update spreadsheet's column "Unit$Col" with values from column 25 of 'range' array.
      for (var j=1; j < LastRow; j++){
        Stocklist.getRange(j+1, Unit$Col).setValue(range[j][Unit$Col-1]);
        Stocklist.getRange(j+1, PurposeCol).setValue(range[j][PurposeCol-1]); 
      }
    }
4

1 に答える 1