我正在尝试对Excel中的大型数据集求平均,其中每个月的每一天都有30分钟的周期。我有一个“开始日期”和“开始时间”的标题,该标题每天显示00:00:00-23:30:00,相关数据在右侧列中。我正在尝试开发一个公式,该公式平均每天涉及00:00:00-11:30:00和每天12:00:00-23:30:00(AM:PM)的数据。
我有一个标头用于AM值,另一个标头用于PM值,而Im希望在每月的每一天对这两个元素求平均值
我使用了以下有效的公式:
= AVERAGE(OFFSET(C6,24,0,-24))
此公式捕获了00:00:00-11:30:00的范围,并根据需要对其取平均值,但是当我将公式向下拖动到下一个单元格时,C6会增加到C7,但我希望它增加每次减48,表示C6应该变成C54。这意味着当我每次将其向下拖动时,它将平均计算02/01/2019的AM值,依此类推。
上面的公式中的单元格引用是否有任何方式可以每次向下拖动到另一个单元格时增加48,而不是1?
答案 0 :(得分:2)
我组成了一个像您一样的数据集:
我在F4
中用于获取值平均值的公式(当日期为“ 01/01/2019”且时间为AM时)为AVERAGEIFS:
我的公式是:
=AVERAGEIFS($C$6:$C$101;$A$6:$A$101;E4;$B$6:$B$101;"<"&0,5)
您可以使用它并向下拖动。如上图所示,该公式返回27,07
该公式仅适用于AM,因为条件为"<"&0,5
。在您想要平均PM时间的列中,我们将使用相同的条件,但将标准更改为">="&0,5
,这意味着:
=AVERAGEIFS($C$6:$C$101;$A$6:$A$101;E4;$B$6:$B$101;">="&0,5)
希望您可以使其适应您的需求。
注意::由于您的数据在数据透视表中(您从未提到过),因此,如果数据透视表发生更改,则需要修改该公式。一个解决方案将使用从第6行到最后一行的范围,因此该公式将始终采用所有行。请记住不要显示总行数,否则可能会影响结果。
选项2::如果您可以在原始数据中添加额外的列 (不在数据透视表中),这可能会有所帮助。
我使用的数据与以前相同,但是我添加了一个额外的列,名为AM/PM
,上面有一个公式:
=IF(B6<0,5;"AM";"PM")
它看起来像这样:
然后我基于它创建一个数据透视表,并进行以下配置:
Start date
字段设置为行的一部分。AM/PM
字段设置为列。VALUE
字段插入值部分,但我没有进行总结,而是进行了average
操作。我在数据透视表上得到了这个
如您所见,01/01/2019
的AM为27,07(其他数字基于我所组成的随机数)。
希望这会有所帮助。
答案 1 :(得分:0)
如果您绝对必须使用AVERAGE(OFFSET())解决方案,那么我将拥有一个带有1的“辅助”单元格(在本例中为J6),那么J7具有= J6 + 48,那么主公式可以是
=AVERAGE(OFFSET($C$6,J6,0,24))
然后,当您向下复制公式时,还需要从J7中向下复制。 Rows参数是专门为您要执行的操作而构建的。努力改变参考细胞不能达到这个目的。
编辑是因为我错过了AM / PM拆分:
但是,我认为AVERAGEIFS()会更好地满足您的要求。这将获取C列中所有日期的平均值,其中A列中的日期与单元格G6中的日期匹配(将其更改为输出所在的位置)。如果您的任何日期缺少任何半小时,这将避免出现错误。
=AVERAGEIFS($C:$C,$A:$A,G6,$B:$B,"<"&TIMEVALUE("12:00:00"))