我有一个很大的电子表格,但我正努力获得一个平均值,到目前为止,我从未使用过与Google或其他方式无关的公式。
平均值是时间的平均值,特别是从开始时间到结束时间的小时数,转换为天数。
以下公式有效,但不会重新计算:
{=AVERAGE(IF(MONTH(E9:E1833)=1,(J9:J1833)))}
以下公式有效,但给出的结果不正确:
=AVERAGE(IF(MONTH(E1833)=1,SUBTOTAL(101,(J9:J1833))))
我尝试过Offset,结果相似,许多“现成的”解决方案产生#Div/0
,#REF
,#Value
或完全不允许输入。
任何帮助将不胜感激,最好是在VBA中,因为我不想永远被这份电子表格所困扰。提前致谢。
答案 0 :(得分:2)
由于您要进行过滤,并且希望结果在过滤时发生变化,因此只需使用AGGREGATE
函数:
=AGGREGATE(1,3,J:J)
编辑:为回答问题添加了动画
“值”列中的值可以是时间,尽管您可能必须格式化AGGREGATE
函数的结果(单元格/数字格式)以将结果显示为[h]:mm
注意:GIF将播放两次。要重复,请刷新页面
答案 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