Excel 2010:夏令时 - 计算任意一天的时间戳之间的小时数

Excel 2010:夏令时 - 计算任意一天的时间戳之间的小时数

我有一张检查表,用于交叉检查各种水测量点,读取来自另一个系统的大约 30 个不同仪表的平均费率。我已经将这张检查表自动化,因此 VBA 脚本可以在给定的日期范围内(通常一次一个月)反复运行该表,并将结果提取到另一个页面。

英国昨天(2015 年 10 月 25 日星期日)进入夏令时,这给我带来了一些问题。所有计量读数都给出了“每小时平均流量”,而我将其乘以 24 以得出每日流量。但我现在意识到,每年两天,24 是错误的乘数。

因此,假设 Start_Date 为 2015/10/25 00:00 且 End_Date 为 2015/10/26 00:00,我如何才能让 Excel 计算出它们之间的正确小时数,并且让其也适用于每年的其他所有日子?我希望能够可靠地在任何给定时间段内运行此检查表,并根据每天是否有 23、24 或 25 小时来正确计算每日总数。到目前为止,我尝试的每次转换都会返回两个时间戳之间的差值“1”,因为 Excel 将 25 小时计为一天。

编辑:根据记录,英国在三月和十月的最后一个星期日发生变化。

答案1

由于没有提供更好的方法,我现在采用以下解决方案:

=Flowrate*(24+IF(AND(EOMONTH(Start_Date,0)-Start_Date<7,WEEKDAY(Start_Date,3)=6),CHOOSE(MONTH(Start_Date),0,0,-1,0,0,0,0,0,0,1,0,0),0))

怎么运行的

简而言之,逆向而行:

CHOOSE(MONTH(Start_Date),0,0,-1,0,0,0,0,0,0,1,0,0)

对于给定的 Start_Date,检查现在是一年中的哪个月份,如果是三月则返回 -1 小时的偏移量,如果是十月则返回 +1 小时的偏移量。

WEEKDAY(Start_Date,3) = 6

对于给定的 Start_Date,检查当前日期是否为星期日,如果是则返回 TRUE。

EOMONTH(Start_Date,0)-Start_Date < 7

对于给定的 Start_Date,检查它是否距离该月结束不到七天。如果是,则返回 TRUE。

AND(EOMONTH(),WEEKDAY()=6)

检查上述两个条件。如果是星期日,且在当月最后六天之内(即没有星期日),则返回 TRUE。

IF(AND(),CHOOSE(),0)

如果以上条件全部为真,则调用 CHOOSE 返回给定月份最后一个星期日的正确偏移量。否则,返回零。返回的偏移量加 24 得出给定天的小时数,然后可以将其与每小时流量相乘得出当天的总数。

相关内容