与 2016 年 Excel 中特定月份相关的数据的小计平均值

Subtotal average, of data linked to a particular month in Excel 2016

我有一个很大的电子表格,我很难得到一个平均值,到目前为止,我使用的公式都没有从 google 或其他方面起作用。

平均值是时间的平均值,特别是开始时间和结束时间之间的小时数,转换为天数。

以下公式有效,但不会重新计算:

{=AVERAGE(IF(MONTH(E9:E1833)=1,(J9:J1833)))}

以下公式有效,但给出的结果不正确:

=AVERAGE(IF(MONTH(E1833)=1,SUBTOTAL(101,(J9:J1833))))

我试过 Offset,结果相似,许多 "off-the-shelf" 解决方案产生 #Div/0#REF#Value 或完全不允许输入。

任何帮助将不胜感激,最好不要在 VBA 中提供帮助,因为我不想永远被这个电子表格所困扰。提前致谢。

由于您要进行过滤,并希望在过滤时改变结果,只需使用 AGGREGATE 函数:

=AGGREGATE(1,3,J:J)

编辑为回答问题添加了动画[​​=29=]

值列中的值可以是时间,尽管您可能必须格式化 AGGREGATE 函数 (cell/numberformat) 的结果以将结果显示为 [h]:mm

注意:GIF 会播放两次。重复,刷新页面

以下公式似乎有效。

{=AVERAGE(IF(SUBTOTAL(9,(OFFSET(J9:J1833,ROW(J9:J1833)-MIN(ROW(J9:J1833)),0,1)))>0,(IF(MONTH(E9:E1833)=3,SUBTOTAL(9,(OFFSET(J9:J1833,ROW(J9:J1833)-MIN(ROW(J9:J1833)),0,1)))))))}

函数的 SUBTOTAL(9,OFFSET 部分 return 是一个数组,其中过滤数字为 0,可见数字 return 它们的值。如果您只是对该数组取平均值,您会得到错误的数字,因为您将对所有这些零取平均值。所以 IF 语句只是创建一个数组,其中 return 是一个 FALSE 为零的数组,它不是平均数。

另一个让我在玩的时候头疼的警告是,你也在过滤 MONTH()=1。问题是,空白单元格 return 是一月份的日期,这意味着它们不会被 MONTH()=1

过滤