2016-02-12 83 views
0

我已經做了一個腳本,執行迭代計算以基於項目成本的總百分比來查找值。更快的迭代計算

這是我到目前爲止有:

//<!-- FEE, BOND, & INSURANCE CALCULATOR --!> 
function feeBondInsCalculator(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Pretty Sum Form"); 
    sheet.activate(); 
    // Get all variables from named ranges 
    var bondValue = ss.getRangeByName("bondValue"); 
    var bondCalc = ss.getRangeByName("bondCalc"); 
    var insValue = ss.getRangeByName("insValue"); 
    var insCalc = ss.getRangeByName("insCalc"); 
    var feeValue = ss.getRangeByName("feeValue"); 
    var feeCalc = ss.getRangeByName("feeCalc"); 
    var interCount = ss.getRangeByName("interCount") 

    // Interative calculation to paste calculated values into the body of the spreadsheet 
    for (var i = 0; i<11; i++){ 
     feeCalc.copyTo(ss.getRangeByName("feeValue"), {contentsOnly: true}); 
     bondCalc.copyTo(ss.getRangeByName("bondValue"), {contentsOnly: true}); 
     insCalc.copyTo(ss.getRangeByName("insValue"), {contentsOnly: true}); 
     interCount.setValue(i) 
    } 
    } 

我使用的區域名稱,以便用戶可以添加/刪除行和列,而不必重新設置代碼。執行時,代碼工作正常,但每次迭代大約需要兩秒鐘。有沒有更有效的方法來完成這項工作?

+0

爲什麼你需要的'CopyTo從()'的'for'環行?具有動態信息的'for'循環中唯一的行是'interCount.setValue(i)'。是不是'copyTo()'線只是一遍又一遍地做同樣的事情?如果是這樣,你只需要做一次。 –

+0

這可能是[codereview.se]的問題。參見[Stack Overflow用戶代碼評論指南](http://meta.codereview.stackexchange.com/q/5777/91556) –

+0

@SandyGood我在copyTo()中需要這些值,因爲它們是項目成本總額和基於項目成本的百分比。在前4到5次迭代中,每個時間範圍都被複制和粘貼,整個項目成本會發生變化,因此每個範圍的值都會發生變化。 –

回答

0

而不是使用複製的,你可以嘗試直接引用的範圍像一個公式:

=arrayformula(if(bondValue <>"",bondValue,"")) 
+0

我不認爲這會奏效。每個範圍只是一個單元格,而我並不真正使用數組。我更試圖創建一個迭代(循環)計算。 –