Excel - 没有零的列的滚动平均值,没有数组

时间:2017-07-05 06:58:13

标签: arrays excel excel-vba excel-formula vba

我目前正在使用此公式计算过去3个月或6个月内12列的滚动平均分数。

=SUM(SUMIFS($E$54:P54,$E$54:P54,LARGE(IF($E$54:P54>0,$E$54:P54),{1,2,3})))

这是一个数组公式,通过CTRL + SHIFT + ENTER输入。

现在的问题是我需要在旧机器上部署我的工作簿,而那些是古老的办公室计算机(我们正在谈论Windows XP和Office 2003 ......),我发现阵列正在杀死整个工作簿。现在,我已经采取措施通过VBA加速工作簿(禁用事件,手动公式计算等),但我需要一种方法将上面的数组公式转换为非数组公式,不计算零或空细胞是平均值的一部分。

我在下面尝试了这个但是无法使用零/空单元格。 =SUM(OFFSET($E68,0,COUNT($E68:$P68)-IF(COUNT($E68:$P68)>3,3,COUNT($E68:$P68)),1,IF(COUNT($E68:$P68)>3,3,COUNT($E68:$P68))))

下面附带的样本数据的图片。 data

2 个答案:

答案 0 :(得分:0)

因为平均值是" Sum"除以" Count",这可以使用非数组公式的简单性来完成。这个公式避免包含零和空白单元格:

= IF(SUM(A2:C2)大于0,SUM(A2:C2)/(COUNT(A2:C2)-COUNTIF(A2:C2,0)),0)

如果该行仅填充零值,则它将实际数字平均值显示为零,这是正确的。如果您想避免在单元格中显示零平均值,则使用这个稍微不同的公式:

= IF(SUM(A3:C3)大于0,SUM(A3:C3)/(COUNT(A3:C3)-COUNTIF(A3:C3,0)),"&#34)

当然,您需要调整6个月和年初至今平均值的单元格范围;这些公式涉及3个月的范围。

答案 1 :(得分:0)

最近3个月的平均值范围:= SUM(OFFSET($ A3,0,COUNT($ A3:$ L3)-IF(COUNT($ A3:$ L3)> 3,3,COUNT($ A3) :$ L3)),1,IF(COUNT($ A3:$ L3)> 3,3,COUNT($ A3:$ L3))))/(COUNT(OFFSET($ A3,0,COUNT($ A3 :$ L3)-IF(COUNT($ A3:$ L3)> 3,3,COUNT($ A3:$ L3)),1,IF(COUNT($ A3:$ L3)> 3,3,COUNT ($ A3:$ L3)))) - COUNTIF(OFFSET($ A3,0,COUNT($ A3:$ L3)-IF(COUNT($ A3:$ L3)> 3,3,COUNT($ A3: $ L3)),1,IF(COUNT($ A3:$ L3)> 3,3,COUNT($ A3:$ L3))),0))

过去6个月的平均值:SUM(OFFSET($ A2,0,COUNT($ A2:$ L2)-IF(COUNT($ A2:$ L2)> 6,6,COUNT($ A2:$) L2)),1,IF(COUNT($ A2:$ L2)> 6,6,COUNT($ A2:$ L2))))/(COUNT(OFFSET($ A2,0,COUNT($ A2:$ L2)-IF(COUNT($ A2:$ L2)> 6,6,COUNT($ A2:$ L2)),1,IF(COUNT($ A2:$ L2)> 6,6,COUNT($ A2:$ L2)))) - COUNTIF(OFFSET($ A2,0,COUNT($ A2:$ L2)-IF(COUNT($ A2:$ L2)> 6,6,COUNT($ A2:$ L2 )),1,IF(COUNT($ A2:$ L2)> 6,6,COUNT($ A2:$ L2))),0))

这些非常冗长,但它们会从原始的非数组公式中排除零值单元格。假设数据从第A2行开始:L2。