带 INDEX 和条件的 AVERAGEIF

带 INDEX 和条件的 AVERAGEIF

当我使用 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 仅对范围进行操作,而不是数组。我不确定为什么,但这可能与评估标准如何用作文本有关。

  1. CTRL+SHIFT+ENTER 可能可以消除 #VALUE! 错误,但答案可能仍然是错误的。

  2. 您可以保留一行并使用 CTRL+SHIFT+ENTER 将数组答案放在多个单元格中,例如 INDEX((YEAR(A1:Z1)=A2)*(A10:Z10),1,0) - 然后在范围上运行 AVERAGEIF。

  3. 或者,看看 AGGREGATE 函数,它可以用作 AVERAGE 函数(函数 #1),但可以选择忽略某些错误。如果您执行 INDEX((A10:Z10)/(YEAR(A1:Z1)=A2),1,0),它将生成 #DIV/0 错误并忽略。

  4. 由于总和正在起作用,您能否设计一种方法来实现您自己的平均值?

相关内容