与 2016 年 Excel 中特定月份相关的数据的小计平均值
Subtotal average, of data linked to a particular month in 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,结果相似,许多 "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
过滤
我有一个很大的电子表格,我很难得到一个平均值,到目前为止,我使用的公式都没有从 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,结果相似,许多 "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