假设我有一个18行的spresheet,我可以硬编码D列中最后7个值的范围,并将它们的值平均如下:
=AVERAGE(D12:D18)
如果不对其进行硬编码,我怎么能这样做,所以当我添加更多行时它会起作用?
答案 0 :(得分:7)
如果要计算平均值或总和,则不需要脚本。您也可以使用数组过滤器来完成此操作。以下公式计算A列中最后7行的平均值:
=AVERAGE(FILTER(A:A;ARRAYFORMULA(ROW(A:A)>COUNT(A:A)-7+1)))
这假设数据从第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;
};
答案 2 :(得分:2)
您也可以OFFSET()
使用=iferror(average(offset($D$2, max(0, count($D$2:$D18)-7), 0, 7, 1)), 0)
来汇总一行的最后X个单元格。
相反 - 聚合列的最后X个单元格 - OFFSET参数只需要移动。这里的命令应该适用于您的示例(假设您的数据从D2开始并转到D18):
{{1}}