Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Excel-跨列滚动平均值,无零,无数组_Arrays_Excel_Excel Formula_Vba - Fatal编程技术网

Arrays Excel-跨列滚动平均值,无零,无数组

Arrays Excel-跨列滚动平均值,无零,无数组,arrays,excel,excel-formula,vba,Arrays,Excel,Excel Formula,Vba,我目前正在使用这个公式计算过去3个月或6个月12列的滚动平均分数 =总和(SUMIFS($54:P54,$54:P54,大型(IF($54:P54>0,$54:P54),{1,2,3})) 这是一个数组公式,通过CTRL+SHIFT+ENTER输入 现在的问题是,我需要将我的工作手册部署在较旧的计算机和那些老式的办公计算机上(我们谈论的是windows XP和office 2003…),我发现阵列正在杀死整个工作簿。现在,我已经采取步骤通过VBA(禁用事件、手动公式计算等)加快工作簿的速度,但我

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

=总和(SUMIFS($54:P54,$54:P54,大型(IF($54:P54>0,$54:P54),{1,2,3}))

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

现在的问题是,我需要将我的工作手册部署在较旧的计算机和那些老式的办公计算机上(我们谈论的是windows XP和office 2003…),我发现阵列正在杀死整个工作簿。现在,我已经采取步骤通过VBA(禁用事件、手动公式计算等)加快工作簿的速度,但我需要一种方法将上述数组公式转换为非数组公式,该公式不计算零或空单元格作为平均数的一部分

我在下面尝试了这个方法,但无法使它与零/空单元格一起工作。
=SUM(抵销($E68,0,COUNT($E68:$P68)>3,3,COUNT($E68:$P68)),1,IF(COUNT($E68:$P68)>3,3,COUNT($E68:$P68))

样本数据的图片附在下面。

由于平均值是“和”除以“计数”,因此可以使用非数组公式的简单性来实现。此公式避免包含零和空白单元格:

=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)),“”)


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

过去3个月的区间平均值:=SUM(抵销($A3,0,COUNT($A3:$L3)-IF(COUNT($A3:$L3)>3,3,COUNT($A3:$L3)>3,3,COUNT($A3:$L3))/(COUNT(抵销($A3,0,COUNT($A3:$L3)>3,3,COUNT($A3:$L3)),1,IF(COUNT($A3:$L3)>3,3,COUNT($A3:$L3))-IF(抵销($A3,COUNT($A3:$A3:$L3))COUNT($L3)>($A3:$L3)>3,3,计数($A3:$L3))),0)

过去6个月的平均数:和(抵销($A2,0,计数($A2:$L2)-如果(计数($A2:$L2)>6,6,计数($A2:$L2)),1,如果(计数($A2:$L2)>6,6,计数($A2:$L2))-如果(计数($A2:$L2)>6,计数($A2:$L2))-如果(计数($A2:$L2)>6,计数($A2:$L2))-抵销($A2,0,计数($A2:$L2)-如果(计数($A2:$L2)>计数($A2:$L2)>6,计数($A2:$L2)),计数($1,计数($A2:$L2))-如果($1,计数($A2:$L2))-计数($1>6,6,计数($A2:$L2))),0)


这些单元格相当长,但它们不包括原始非数组公式中的零值单元格。假设数据从A2:L2行开始。

这是滚动月计算吗?看起来我必须每月手动调整范围?该公式适用于从第二季度开始向下复制的3个月平均值。对于6个月平均值:=如果R2中的(求和(A2:F2)>0,求和(A2:F2)/(计数(A2:F2)-COUNTIF(A2:F2,0)),“”)并向下复制。对于YTD平均值:=S2中的IF(求和(A2:L2)>0,求和(A2:L2)/(计数(A2:L2)-COUNTIF(A2:L2,0)),“”)并向下复制。我没有注意到您的示例开始于列“E”。当我测试公式时,我从ColunN“A”开始复制了您的示例在我的电子表格中。只需调整范围引用以适合数据实际驻留的位置,E2:P2。这些公式不是“滚动的”从某种意义上说,他们决定了过去的3/6个月,而仅仅是计算3或6个单元格范围的平均值。这样,我就必须每月将公式从A3:C3调整到B3:D3,以此类推,以获得最新的3个月滚动。我要寻找的是一种方法来计算12个单元格内最后3/6个单元格的平均值范围,不计算零。