在Excel中计算移动平均线

Dan*_*röm 2 excel vba worksheet-function array-formulas

我想计算一个列的最后20个数字的移动平均值.问题是列的某些单元格可能是空的,应该忽略它们.例:

 A
175
154

188
145
155

167
201
Run Code Online (Sandbox Code Playgroud)

最后三个的移动平均值为(155 + 167 + 201)/ 3.我试图用平均值,偏移量,索引实现这个,但我根本不知道如何.我对宏有点熟悉,所以这样的解决方案可以正常工作:=MovingAverage(A1;3)

感谢您的任何提示或解决方案!

Dic*_*ika 7

{=SUM(($A$1:A9)*(ROW($A$1:A9)>LARGE((ROW($A$1:A9))*(NOT(ISBLANK($A$1:A9))),3+1)))/3}
Run Code Online (Sandbox Code Playgroud)

使用control + shift + enter输入,使其成为数组公式.这将找到最新的三个值.如果您想要更多或更少,请将公式中的两个"3"实例更改为您想要的任何内容.

LARGE((ROW($A$1:A9))*(NOT(ISBLANK($A$1:A9))),3+1)
Run Code Online (Sandbox Code Playgroud)

此部分返回具有值的所有单元格的第4个最高行数,或者示例中为5,因为行6,8和9是具有值的第1到第3个最高行.

(ROW($A$1:A9)>LARGE((ROW($A$1:A9))*(NOT(ISBLANK($A$1:A9))),3+1))
Run Code Online (Sandbox Code Playgroud)

该部分基于行号是否大于第4个,返回9个TRUE或FALSE.

($A$1:A9)*(ROW($A$1:A9)>LARGE((ROW($A$1:A9))*(NOT(ISBLANK($A$1:A9))),3+1))
Run Code Online (Sandbox Code Playgroud)

这将A1:A9中的值乘以9 TRUE或FALSE.TRUEs转换为1,FALSEs转换为零.这留下了这样的SUM函数

=SUM({0;0;0;0;0;155;0;167;201})/3
Run Code Online (Sandbox Code Playgroud)

因为155以上的所有值都不满足行号标准,所以get乘以零.