在我工作的地方,我没有加班费,但我会为我工作的加班累积假期。我有以下电子表格,它计算我已经完成了多少加班并将其总计D15
。
现在我想根据每天 8 小时计算这是多少天。在D16
中,我已经完成=D15/8
并将其格式化为h.mm \d\a\y\s
,但这显示为2.26 days
而不是2.4375 days
。
使用的正确公式是D16
什么?
在我工作的地方,我没有加班费,但我会为我工作的加班累积假期。我有以下电子表格,它计算我已经完成了多少加班并将其总计D15
。
现在我想根据每天 8 小时计算这是多少天。在D16
中,我已经完成=D15/8
并将其格式化为h.mm \d\a\y\s
,但这显示为2.26 days
而不是2.4375 days
。
使用的正确公式是D16
什么?
读者注意:这个问题导致了多种解决方案,其中一些在评论中进行了讨论。这是找到的解决方案的摘要。
第一个解决方案
=(HOUR(D15)+MINUTE(D15)/60)/8
解释
Excel 中的日期和时间存储为序列号,19:30
实际上也是如此0.8125
。
所以,如果你把它除以8
,你会得到0.1015625
。
后一个值是值得的2.26 days
OP 的版本(感谢 Danny Becket (OP)) - 请参阅下面的评论。
此解决方案现在处理 > 24 小时。
=((DAY(D20)*24)+HOUR(D20)+(MINUTE(D20)/60))/8
或更好(归功于Barry Houdini):
=((INT(D20)*24)+HOUR(D20)+(MINUTE(D20)/60))/8
前一个公式对大值有限制,在这里可能不相关,但如果D20
是 800:00,那么你会得到错误的答案(7 天而不是 100 天)。这可能是因为DAY
函数为您提供日历日,它将在 31 时“重置”,最好INT
代替DAY
.
另一个易于理解的版本
除以一天的长度作为时间值:
=D15/"8:00"
如果工作日长度发生变化,更容易改变
进入:
在B3
8:3
在C3
16:3
在D3
=IF(B3<C3,C3-B3-1/3,2/3-B3+C3)
根据需要选择B3:D3
,格式化hh:mm
并向下复制。
求和ColumnD
并附*3
加到公式,但格式为数字。
通过覆盖单元格ColumnB
和/或ColumnC
根据需要添加数据(默认不添加到总数中)。
处理加班到下一个正常开始时间(即包括过去的午夜,新的序列号)。1/3
因为标准工作日是 8 小时(日期串行计数器是 24 小时)。B3
并且C3
可以进行硬编码,但 (i) 没有必要并且 (ii) 允许更大的灵活性。如果要轻松识别非标准开始/结束可以使用条件格式。
不涉及周末加班,但可以很容易地进行调整(例如添加列,在该额外列中用 8 标记周末,然后将 8 [1/3] 添加到完成时间)。
确保 D15 的数字格式为 [h]:mm 然后将 D16 设置为 =sum(D15/"8:00") 应该可以正常工作,这就是我跟踪我的年假的情况,我每周工作 37 小时,休假日为归类为 7h24m 或半天假为“3:42”
我已在电子表格的单元格 K2 中将其作为累积数字分配为 [h]:mm,然后我将 K3=SUM(K2/"7:24") 的天数格式化为一般数字
您可能还需要将 excel 中的日期基准更改为 1904 日期系统http://support.microsoft.com/kb/182247/en-gb 以使其正常工作(只有当您像我一样有负时间时才会出现问题计算弹性工时)