【发布时间】:2011-04-25 14:13:01
【问题描述】:
假设我有一个包含 18 行的电子表格,我可以硬编码 D 列中最后 7 个值的范围,并像这样平均它们的值:
=AVERAGE(D12:D18)
如果不对它们进行硬编码,我怎么能做同样的事情,所以当我添加更多行时它会起作用?
【问题讨论】:
标签: google-sheets average
假设我有一个包含 18 行的电子表格,我可以硬编码 D 列中最后 7 个值的范围,并像这样平均它们的值:
=AVERAGE(D12:D18)
如果不对它们进行硬编码,我怎么能做同样的事情,所以当我添加更多行时它会起作用?
【问题讨论】:
标签: google-sheets average
如果您想计算平均值或总和,则无需脚本。您也可以使用数组过滤器来完成此操作。以下公式计算 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;
};
【讨论】:
您也可以像 Webapps.SO answer 那样使用 OFFSET() 来聚合一行的最后 X 个单元格。
相反——聚合一列的最后 X 个单元格——偏移参数只需要四处移动。下面的命令应该适用于您的示例(假设您的数据从 D2 开始到 D18):
=iferror(average(offset($D$2, max(0, count($D$2:$D18)-7), 0, 7, 1)), 0)
【讨论】: