获取谷歌电子表格的最后一个X行

问题描述:

说我有一个18行的spresheet的范围内,我可以硬编码在列d最后7个值的范围和平均它们的值,如下所示:获取谷歌电子表格的最后一个X行

=AVERAGE(D12:D18) 

那么我怎么能不用硬编码来做同样的事情,所以它会工作,因为我添加更多的行?

如果要计算平均值或总和,则不需要脚本。你也可以用一个数组过滤器来完成。下面的公式计算在A列中的平均过去7行:

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

这假定该数据在第1行开始。否则你必须在该式中,后者不断改变为行号,其中数据开始。

原来你可以使用自己的代码。凌乱,但它的工作原理:

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

您也可以使用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)