我有一张检查表,它可以交叉检查各个水测量点,并从另一个系统读取大约30个不同仪表的平均费率。我已经自动执行了此检查表,因此VBA脚本可以在给定的日期范围内(通常一次为一个月)一次又一次地运行该表,并将结果提取到另一页上。
英国昨天(2015年10月25日,星期日)实行夏令时,这给我带来了很多问题。所有计量的读数都给了我“每小时平均流量”,我一直在乘以24以得出每日流量。但是我现在意识到,每年两天,使用24是错误的乘数。
因此,给定Start_Date为25/10/2015 00:00和End_Date为26/10/2015 00:00,我如何才能使Excel计算两者之间的正确小时数,这也将适用于所有其他日期年?我希望能够在任何给定时间段内可靠地运行此检查表,并每天根据其是否有23、24或25小时来适当地计算每日总数。到目前为止,我尝试过的每次转换都将两个时间戳之间的差异返回为“ 1”,因为Excel将25h视为一天。
编辑:根据记录,英国在3月和10月的最后一个星期日更改。
在没有提供更好的方法的情况下,我现在应用了以下解决方案:
=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,请检查距月底是否还不到7天。如果是,则返回TRUE。
AND(EOMONTH(),WEEKDAY()=6)
检查以上两个条件。如果是星期日,则在该月的最后六天内(即不再有星期日),返回TRUE。
IF(AND(),CHOOSE(),0)
如果以上条件全部为TRUE,则调用CHOOSE以返回给定月份的最后一个星期日的正确偏移量。否则,返回零。返回的偏移量加到24以得出给定日期的小时数,然后可以将其与小时流量相乘以得出当天的总数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句