我有一列的格式为“dd / mm / yyyy hh:mm”,另一列的格式为该时间点的温度。我想分别计算每个月的白天和晚上的平均温度。即平均所有温度在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月份和白天期间尝试计算平均值 - 但它似乎不起作用,当我更改小时数时,它仍会吐出相同的数字(这是平均值)月)。
答案 0 :(得分:1)
您可以使用长SUMPRODUCT公式:
五月份的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))))
答案 1 :(得分:0)
这取决于您创建一个包含月份和时间范围的表格,如下所示:
在E2中输入此公式并根据需要拖动。它是一个数组公式,因此必须使用 Ctrl - Shift - 输入输入:
=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&1)
部分可让您从文字中获取月份编号
&#34;扬&#34; 答案 2 :(得分:0)
在使用datetime时,当实际的一天被计算在午夜之后,如第二天的18小时到6小时,我发现将时间偏移并进行计算是有用的。
6:00至18:00 =平均(如果((月($ A $ 2:$ A $ 12-0.25)= D2)*(MOD($ A $ 2:$ A $ 12-0.25,1)&lt; 0.5 ),$ B $ 2:$ B $ 12&#34;&#34))
18:00至6:00 =平均(如((月($ A $ 2:$ A $ 12-0.25)= D2)*(MOD($ A $ 2:$ A $ 12-0.25,1)&gt; = 0.5),$ B $ 2:$ B $ 12&#34;&#34))
这些是使用Ctrl-Shift-Enter输入的数组公式。
这里我将时间偏移0.25天,即6小时。