繁体   English   中英

Arrayformula 计算最后 N 个元素的平均值

[英]Arrayformula to calculate average of last N-elements

我想计算一列中前 N 个元素的平均值并返回一个数组。 对于B列的最后 3 个元素,output 应该是这样的, C列显示了相应的公式。 平均以前的 N 元素

在我真正的问题中,我需要为整个列使用arrayformula返回结果。 D列显示了计算非空行平均值的公式,但考虑到最后三个的子集,我无法返回结果。

以下问题: 平均前 5 个具有解决类似问题的值的单元格,但结果不作为数组返回。 如果我调整D列中的公式,并使用问题的解决方案,我不会得到预期的结果:

=ARRAYFORMULA(if(NOT(ISBLANK(A:A)),
     Average(Filter(Sort(A:A,If(A:A="",0,Row(A:A)),false),
         Row(A:A)<3)),))

我没有得到预期的结果,所有非空行的结果都是5.5

您的帖子示例显示从第 1 行开始的可计算数据(与第 1 行中的任何标题相反)。 所以我写的公式将引用整个 A:A 列。

删除 B 列中的所有内容,并将以下公式放入 B1:

=ArrayFormula(IF(A:A="",,(SUMIF(ROW(A:A),">="&ROW(A:A)-2,A:A)-SUMIF(ROW(A:A),">"&ROW(A:A),A:A)) / IF(ROW(A:A)<3,ROW(A:A),3)))

如果 A:A 中的单元格为空白,则公式将为 B:B 中的相应单元格返回 null。

否则,第一个SUMIF将对 A:A 中从两行开始的单元格中的所有值求和。 从中将减去 A:A 中单元格编号大于当前单元格编号的所有值的第二个SUMIF 这将为您留下每个单元格在 memory 中保存的“最后三行”的总数。 然后将该总数除以IF子句的返回值(即,如果当前行号小于 3,则为行号,或者对于所有其他行,则为 3)。

同样,这是基于您的帖子的详细信息。 如果您的实际应用程序没有从第 1 行开始并运行完整的 A:A 列,请使用此版本:

=ArrayFormula(IF(A2:A="",,(SUMIF(ROW(A2:A),">="&ROW(A2:A)-2,A2:A)-SUMIF(ROW(A2:A),">"&ROW(A2:A),A2:A)) / IF(SEQUENCE(ROWS(A2:A),1)<3,SEQUENCE(ROWS(A2:A),1),3)))

只需将每个范围的第一个单元格引用(即此处为A2 )与可计算范围的实际第一个单元格交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM