与Excel 2016中特定月份链接的数据的小计平均值

时间:2018-10-03 15:34:42

标签: excel math excel-formula excel-2016

我有一个很大的电子表格,但我正努力获得一个平均值,到目前为止,我从未使用过与Google或其他方式无关的公式。

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

  • 在E9:E1833列中,我的开始时间为dd / mm / yyy hh:mm
  • 在J9:J1833列中,我以天为单位,从[开始]到结束的时间为[h]:mm(有些是空的)
  • 我有一个自动过滤器设置,可以根据作业类型/区域/状态等进行更改,结果需要随着数据的过滤而更改。

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

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

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

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

我尝试过Offset,结果相似,许多“现成的”解决方案产生#Div/0#REF#Value或完全不允许输入。

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

2 个答案:

答案 0 :(得分:2)

由于您要进行过滤,并且希望结果在过滤时发生变化,因此只需使用AGGREGATE函数:

=AGGREGATE(1,3,J:J)

编辑为回答问题添加了动画

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

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

enter image description here

答案 1 :(得分:0)

以下公式似乎有效。

{=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部分返回一个数组,其中已过滤数字为0,可见数字返回其值。如果只是对该数组取平均值,则会得到错误的数字,因为您将对所有这些零取平均值。因此,IF语句仅创建一个数组,该数组返回一个FALSE的零,这不会被平均。

当我在玩耍时,令我头疼的另一个警告是,您也在过滤MONTH()=1。问题在于,空白单元格返回一月日期,这意味着它们不会被MONTH()=1

过滤