2011-04-25 90 views
3

說我有一個18行的spresheet的範圍內,我可以硬編碼在列d最後7個值的範圍和平均它們的值,如下所示:獲取谷歌電子表格的最後一個X行

=AVERAGE(D12:D18) 

那麼我怎麼能不用硬編碼來做同樣的事情,所以它會工作,因爲我添加更多的行?

回答

7

如果要計算平均值或總和,則不需要腳本。你也可以用一個數組過濾器來完成。下面的公式計算在A列中的平均過去7行:

=AVERAGE(FILTER(A:A;ARRAYFORMULA(ROW(A:A)>COUNT(A:A)-7+1))) 

這假定該數據在第1行開始。否則你必須在該式中,後者不斷改變爲行號,其中數據開始。

2

原來你可以使用自己的代碼。凌亂,但它的工作原理:

function lastValues(column, num) { 
    var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows(); 
    var values = SpreadsheetApp.getActiveSheet().getRange(column + "1:" + column + lastRow).getValues(); 

    for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}; 

    arr = []; 

    for(i=0; i < num+1; i++){ 
    arr.push(values[lastRow - i]); 
    }; 

    return arr; 
}; 
+0

它抱怨 - 參數必須是範圍! – Mutant 2014-07-10 19:03:06

2

您也可以使用OFFSET(),因爲Webapps.SO answer用於彙總一行的最後X個單元格。

對於相反的---聚合一列的最後一個X單元格--- OFFSET params只需要四處移動即可。這裏有一個命令應該適用於你的例子(這裏假設你的數據從D2開始併到達D18):

=iferror(average(offset($D$2, max(0, count($D$2:$D18)-7), 0, 7, 1)), 0) 
相關問題