按月计算标准差

我试图从日常数据中按月计算标准偏差。 我使用这个函数,它不工作(它返回%DIV/0! )。

 {=STDEV.S(IF(AND(MONTH(data!$A$5:$A$3893)=MONTH($I22),YEAR(data!$A$5:$A$3893)=YEAR($I22)),data!H$5:H$3893,0))} 

你能帮我解答吗?

谢谢

公式中使用的AND函数将结合月份和年份testing,而不是单独应用它们。 使用级联IF来避免这种情况。 另外,在IF为假的情况下使用零可能会给出错误的标准偏差,因为

 STDEV.P(1,2,3,0,0,0,0,0) <> STDEV.P (1,2,3). 

尝试这个:

 =STDEV.S(IF(MONTH(data!$A$5:$A$3893)=MONTH($I22),IF(YEAR(data!$A$5:$A$3893)=YEAR($I22),data!H$5:H$3893,"NO"),"NO")) 

公式中的“否”可以是任何文本。 当Excel的统计函数(SUM,AVG,STDEV等)遇到文本值时,会跳过它而不是将其转换为零。

 STDEV.P(1,2,3,"NO","NO","NO","NO","NO") == STDEV.P(1,2,3)!!! 

问题是AND与数组公式不兼容。 用乘法replace它。 另外,如果删除0的虚假部分,那么它不会毁掉你的计算:

 {=STDEV.S(IF((MONTH(data!$A$5:$A$3893)=MONTH($I22)) * (YEAR(data!$A$5:$A$3893)=YEAR($I22)), data!H$5:H$3893))} 

问题是你不能在数组公式中使用AND运算符(因为它试图将所有的值合并成一个真或假)。

另外,通过使用0作为你的假值,你引入了错误的读数。 使用stdev.s忽略的文本值。

{=STDEV.S(IF(MONTH(data!$A$5:$A$3893)=MONTH($I22),if(YEAR(data!$A$5:$A$3893)=YEAR($I22),data!H$5:H$3893,""),""))}试试{=STDEV.S(IF(MONTH(data!$A$5:$A$3893)=MONTH($I22),if(YEAR(data!$A$5:$A$3893)=YEAR($I22),data!H$5:H$3893,""),""))}