如何计算 ArrayFormula 中每一行的最后 7 行的总和?
How to I calculate the sum of the last 7 rows, for each row, inside an ArrayFormula?
我有一个包含数值的 D 列,在相邻的列上,我想显示相对于当前行的最后 7 行的总和。
我尝试了几个变体,其中大部分的灵感来自 Whosebug 和其他网站,但它们并没有像我需要的那样起作用。
我认为由于 Offset() 创建了一个范围,所以只需 "slice" 我需要的范围并将其提供给 sum()
就很简单了
ArrayFormula( Sum(Offset(D7:D500,-6,1,7,1)) )
但是,它似乎只计算我放置这个公式的单元格。
我根据自己的情况采用了网上找到的潜在解决方案
ArrayFormula(SUMIF(ROW(D7:D500),"<="&ROW(D7:D500),D7:D500))
这个计算前面所有行的总和,
所以我认为使用 SUMIFS() 可以得到我需要的东西,因此
=ArrayFormula(SUMIFS(D7:D500, ROW(D7:D500),"<="&ROW(D7:D500), ROW(D7:D500),">"&ROW(D7:D500)-7))
但这一个行不通。
我也尝试过使用 Address() 和 Interpret() 创建范围,但它们似乎在 ArrayFormula()
中无法正常工作
我对它还很陌生,所以可能只是我没有正确使用它们。我在这里做错了什么?有更好的方法吗?如果可能,我宁愿使用 ArrayFormula(),因为公式将存在于单个单元格中。
方法一.OFFSET
函数
COUNT(D7:D500)-7
告诉 EXCEL 要从 D7
下调多少个单元格。
=SUM(OFFSET(D7:D500,COUNT(D7:D500)-7,,7,1))
没有Ctrl
+Shift
+Enter
方法二.Index
函数
如果担心OFFSET
函数的易变性,可以试试
=SUM(INDEX(D7:D500,COUNT(D7:D500)-6):INDEX(D7:D500,COUNT(D7:D500)))
没有Ctrl
+Shift
+Enter
尝试:
=SUM(IFERROR(QUERY(D7:D500, "limit 7 offset "&COUNTA(D7:D500)-7)))
您可以通过在 Google Apps 脚本中创建的 custom function 来完成此操作。为此,请按照下列步骤操作:
- 在您的电子表格中,select工具 > 脚本编辑器打开绑定到您的文件的脚本。
- 在脚本编辑器中复制此函数,并保存项目:
function SUM7ROWS(input) {
var output = [];
var sum;
for (var row = 0; row < input.length; row++) {
sum = 0;
for (var i = 6; i >= 0; i--) {
if (row - i >= 0) {
sum = sum + Number(input[row - i]);
}
}
output.push(sum);
}
return output;
}
- 现在,如果您返回电子表格,就可以像使用任何其他函数一样使用此函数。您只需提供适当的范围作为参数(在本例中为
D7:D500
),如您在此处所见:
希望对您有所帮助。
我有一个包含数值的 D 列,在相邻的列上,我想显示相对于当前行的最后 7 行的总和。
我尝试了几个变体,其中大部分的灵感来自 Whosebug 和其他网站,但它们并没有像我需要的那样起作用。
我认为由于 Offset() 创建了一个范围,所以只需 "slice" 我需要的范围并将其提供给 sum()
就很简单了ArrayFormula( Sum(Offset(D7:D500,-6,1,7,1)) )
但是,它似乎只计算我放置这个公式的单元格。
我根据自己的情况采用了网上找到的潜在解决方案
ArrayFormula(SUMIF(ROW(D7:D500),"<="&ROW(D7:D500),D7:D500))
这个计算前面所有行的总和, 所以我认为使用 SUMIFS() 可以得到我需要的东西,因此
=ArrayFormula(SUMIFS(D7:D500, ROW(D7:D500),"<="&ROW(D7:D500), ROW(D7:D500),">"&ROW(D7:D500)-7))
但这一个行不通。 我也尝试过使用 Address() 和 Interpret() 创建范围,但它们似乎在 ArrayFormula()
中无法正常工作我对它还很陌生,所以可能只是我没有正确使用它们。我在这里做错了什么?有更好的方法吗?如果可能,我宁愿使用 ArrayFormula(),因为公式将存在于单个单元格中。
方法一.OFFSET
函数
COUNT(D7:D500)-7
告诉 EXCEL 要从 D7
下调多少个单元格。
=SUM(OFFSET(D7:D500,COUNT(D7:D500)-7,,7,1))
没有Ctrl
+Shift
+Enter
方法二.Index
函数
如果担心OFFSET
函数的易变性,可以试试
=SUM(INDEX(D7:D500,COUNT(D7:D500)-6):INDEX(D7:D500,COUNT(D7:D500)))
没有Ctrl
+Shift
+Enter
尝试:
=SUM(IFERROR(QUERY(D7:D500, "limit 7 offset "&COUNTA(D7:D500)-7)))
您可以通过在 Google Apps 脚本中创建的 custom function 来完成此操作。为此,请按照下列步骤操作:
- 在您的电子表格中,select工具 > 脚本编辑器打开绑定到您的文件的脚本。
- 在脚本编辑器中复制此函数,并保存项目:
function SUM7ROWS(input) {
var output = [];
var sum;
for (var row = 0; row < input.length; row++) {
sum = 0;
for (var i = 6; i >= 0; i--) {
if (row - i >= 0) {
sum = sum + Number(input[row - i]);
}
}
output.push(sum);
}
return output;
}
- 现在,如果您返回电子表格,就可以像使用任何其他函数一样使用此函数。您只需提供适当的范围作为参数(在本例中为
D7:D500
),如您在此处所见:
希望对您有所帮助。