【问题标题】:Average column by specific datetime associated values按特定日期时间关联值的平均列
【发布时间】:2016-10-01 00:23:21
【问题描述】:

我有一列时间格式为“dd/mm/yyyy hh:mm”,另一列是该时间点的温度。我正在寻找分别计算每个月白天和黑夜的平均温度。 IE。平均 5 月 06:00 至 18:00 之间的所有温度,以及 5 月 18:00 至 06:00 之间的所有温度,然后 3 月相同,依此类推。

    Time    Celsius(C)
06/05/2016 10:49    28
06/05/2016 11:49    29
06/05/2016 12:49    31
06/05/2016 13:49    27.5
06/05/2016 14:49    24
06/05/2016 15:49    25
06/05/2016 16:49    24.5
06/05/2016 17:49    23.5
06/05/2016 18:49    23
06/05/2016 19:49    22.5
06/05/2016 20:49    22.5

我目前正在使用以下公式:

=AVERAGEIFS(C2:C3643,B2:B3643,">=01/05/2016",B2:B3643,"<=31/05/2016",B2:B3643,">=01/05/2016 06:00",B2:B3643,"<=31/05/2016 18:00")

如果日期在 5 月内和白天,尝试计算平均值 - 但是它似乎不起作用,当我更改小时周期时,它仍然吐出相同的数字(这是月)。

【问题讨论】:

    标签: excel datetime if-statement excel-formula average


    【解决方案1】:

    您可以使用长 SUMPRODUCT 公式:

    对于5月份的600到1800:

    =SUMPRODUCT(($A$2:$A$12>=DATE(2016,5,1))*($A$2:$A$12<=DATE(2016,5,31))*(MOD($A$2:$A$12,1)>=TIME(6,0,0))*(MOD($A$2:$A$12,1)<=TIME(18,0,0))*B2:B12)/SUMPRODUCT(($A$2:$A$12>=DATE(2016,5,1))*($A$2:$A$12<=DATE(2016,5,31))*(MOD($A$2:$A$12,1)>=TIME(6,0,0))*(MOD($A$2:$A$12,1)<=TIME(18,0,0)))
    

    您始终可以将所有 DATE() 和 TIME() 部分替换为单元格引用,而不是对其进行硬编码。

    要获得介于 1800 和 600 之间的值,我们需要将其转换为 OR,在时间布尔值之间使用 + 而不是 *

    =SUMPRODUCT(($A$2:$A$12>=DATE(2016,5,1))*($A$2:$A$12<=DATE(2016,5,31))*((MOD($A$2:$A$12,1)<=TIME(6,0,0))+(MOD($A$2:$A$12,1)>=TIME(18,0,0)))*B2:B12)/SUMPRODUCT(($A$2:$A$12>=DATE(2016,5,1))*($A$2:$A$12<=DATE(2016,5,31))*((MOD($A$2:$A$12,1)<=TIME(6,0,0))+(MOD($A$2:$A$12,1)>=TIME(18,0,0))))
    

    【讨论】:

    • 感谢您的支持 - 当您在 06:00-18:00 之间执行此操作时,它似乎有效,但在您将其切换到 18:00-06:00 之间时无效,您知道这是为什么会是这样吗?
    【解决方案2】:

    这取决于您创建一个包含月份和时间范围的表格,如下所示:

    在 E2 中输入此公式并根据需要拖动。这是一个数组公式,所以必须用Ctrl-Shift-Enter输入:

    =AVERAGE(IF(
     ((MONTH($A$2:$A$101)=MONTH(E$1&1))*
     ((MOD(HOUR($A$2:$A$101)-LEFT($D2,2),24))>=0)*
     ((MOD(HOUR($A$2:$A$101)-LEFT($D2,2),24))<12)),
    $B$2:$B$101))
    

    注意事项:

    • MONTH(E$1&amp;1) 部分可让您从文本中获取月份数,例如 “一月”
    • 我使用 MOD 和时间范围左侧的减法得到 目标小时在 0 到 23 的范围内。这使得过滤 1 到 11 之间的值成为可能。
    • 如果Barry Houdini 还在,我敢肯定,他可以在一半的空间内完成。

    【讨论】:

      【解决方案3】:

      在使用日期时间时,当实际日期计算在午夜之后(例如第二天 18 小时到 6 小时)时,我发现将时间向后偏移并进行计算很有用。

      6:00 到 18:00 =AVERAGE(IF((MONTH($A$2:$A$12-0.25)=D2)*(MOD($A$2:$A$12-0.25,1)

      18:00 到 6:00 =AVERAGE(IF((MONTH($A$2:$A$12-0.25)=D2)*(MOD($A$2:$A$12-0.25,1)>=0.5 ),$B$2:$B$12,""))

      这些是使用 Ctrl-Shift-Enter 输入的数组公式。

      这里我将时间偏移 0.25 天,即 6 小时。

      【讨论】:

        猜你喜欢
        • 2015-07-28
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-14
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多