当我使用 AVERAGEIF 时,为什么会返回 #VALUE!?
=AVERAGEIF(INDEX((YEAR(A1:Z1)=A2)*(A10:Z10),1,0),"<>0")
当我使用时,=SUM(INDEX((YEAR(A1:Z1)=A2)*(A10:Z10),1,0))
它工作正常。
=average(INDEX((YEAR(A1:Z1)=A2)*(A10:Z10),1,0))
也可以,但问题是它计算了所有零,这就是我尝试 AVERAGEIF 的原因。
我想使用 INDEX 函数而不是数组公式或 SUMPRODUCT 来获取平均值。
答案1
您可以使用以下任何数组(CSE)公式:
{=AVERAGE(IF((YEAR(A1:Z1)=A2),A10:Z10))}
{=SUM((YEAR(A1:Z1)=A2)*A10:Z10)/SUM(IF(YEAR(A1:Z1)=A2,1))}
{=SUMPRODUCT((YEAR(A1:Z1)=A2)*(A10:Z10)) /(SUMPRODUCT((YEAR(A1:Z1)=A2)*1))}
注意:
- 完成配方Ctrl+Shift+Enter。
- 根据需要调整公式中的单元格引用。
答案2
据我所知,AVERAGEIF 仅对范围进行操作,而不是数组。我不确定为什么,但这可能与评估标准如何用作文本有关。
CTRL+SHIFT+ENTER 可能可以消除 #VALUE! 错误,但答案可能仍然是错误的。
您可以保留一行并使用 CTRL+SHIFT+ENTER 将数组答案放在多个单元格中,例如 INDEX((YEAR(A1:Z1)=A2)*(A10:Z10),1,0) - 然后在范围上运行 AVERAGEIF。
或者,看看 AGGREGATE 函数,它可以用作 AVERAGE 函数(函数 #1),但可以选择忽略某些错误。如果您执行 INDEX((A10:Z10)/(YEAR(A1:Z1)=A2),1,0),它将生成 #DIV/0 错误并忽略。
由于总和正在起作用,您能否设计一种方法来实现您自己的平均值?