[英]How to I calculate the sum of the last 7 rows, for each row, inside an ArrayFormula?
我有一个带有数值的 D 列,在相邻的列上,我想显示相对于当前行的最后 7 行的总和。
我已经尝试了几个变体,其中大部分都受到 StackOverflow 和其他网站的启发,但它们并没有按照我的需要工作。
我认为由于 Offset() 创建了一个范围,因此只需“切片”我需要的范围并将其提供给 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
您可以通过在 Google Apps 脚本中创建的自定义函数来完成此操作。 为此,请执行以下步骤:
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
),如下所示:我希望这有任何帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.