2017-04-07 69 views
2

我正在制定一个简单的时间表,应该计算overtime1和overtime2,我只是不能找出解决这个问题的好方法。具体的加班计算

8点从07:00到17:00的正常工作日不给加班(例如07:00-16:00或08:00-17:00),但如果时间超过8小时,我希望在一个小区里超过几个小时

我的业务规则是:

1)任何比06:00的时间在8小时或更以20:00的工作得到报酬为overtime1。

2)任何工作8小时以内不会产生哪怕20:00

3)执行早于06:00或晚于20:00的任何工作后在overtime2率得到支付任何overtime2。

实施例1:从07:00到工作18:00将得到3小时overtime1

实施例2的值:从14:00到工作22:00将产生0小时overtime2的。示例3:05:00至21:00工作时间为6小时,加班时间为2小时(06:00前1小时,20:00后1小时)。例如,

+0

可能[在Excel中计算加班时间]的副本(http://stackoverflow.com/questions/36667987/calculating-overtime-hours-in-excel) – LuFFy

+0

这是相关的,但不是重复的。 OP有其他注意事项,但您的可能重复内容不存在。 – SandPiper

回答

1

这是,如果你的数据被巧妙布局,以解决一个非常简单的问题。列A为实时时钟和B列作为时钟输出时,使用这个公式作为一个辅助,以确定是否应该使用在时间上的时钟或您的06:00基地:

=IF(A1-FLOOR(A1,2)<6/24,6/24,A1-FLOOR(A1,2))

然后使用这个公式来确定是否应使用时钟输出时间或20:00:

=IF(B1-FLOOR(B1,2)>20/24,20/24,B1-FLOOR(B1,2))

然后你减去两个获得一天的分数,乘以24转换成小时,然后减去8得到加班时间1。组合的超级公式它看起来像这样在C1中:

OT1:=IF(OR(ISBLANK(A1),ISBLANK(B1)),"",(IF(B1-FLOOR(B1,2)>20/24,20/24,B1-FLOOR(B1,2))-IF(A1-FLOOR(A1,2)<6/24,6/24,A1-FLOOR(A1,2)))*24-8)

记住时,Excel格式的日期,其中1 = 24小时。另外,我在OR(ISBLANK(A1),ISBLANK(B1))语句中添加了一个值,以确保在其中一个值为空时得到空字符串。

从加班2开始,您需要将其分为两部分:06:00之前和20:00之后。第一部分检查时钟是否早于06:00,如果是,则计算出多少小时。式最终结束是:

=IF(IF(A1-FLOOR(A1,2)<6/24,6/24,A1-FLOOR(A1,2))<=6/24,(6/24-(A1-FLOOR(A1,2)))*24,0)

对于在20:00之后,使用相同的模式。确定20:00后每天记录多少部分。最终的公式最终被:

=IF(IF(B1-FLOOR(B1,2)>20/24,20/24,B1-FLOOR(B1,2))>=20/24,((B1-FLOOR(B1,2))-20/24)*24,0)

最后,为了弄清楚加班2的总数,只需添加两个公式一起在D1:

OT2:=IF(OR(ISBLANK(A1),ISBLANK(B1)),"",IF(IF(A1-FLOOR(A1,2)<6/24,6/24,A1-FLOOR(A1,2))<=6/24,(6/24-(A1-FLOOR(A1,2)))*24,0)+IF(IF(B1-FLOOR(B1,2)>20/24,20/24,B1-FLOOR(B1,2))>=20/24,((B1-FLOOR(B1,2))-20/24)*24,0))

+0

这工作正常, 但我如何添加6小时前的几个小时? 非常感谢您的帮助! –

+0

我会建议在另一个单元格的原则上构建,然后将早于0600的公式添加到上面的公式中以获得您的总体结果。单元格E1中的结果是:IF(A1-FLOOR(A1,2)> = 6/24,0,6-(A1-FLOOR(A1,2))* 24)'。这给你输入的早于0600的总小时数。 – SandPiper

+0

几乎在那里:) 当字段为空时,即没有写入,我得到值6.是否有很好的解决方法? –

1

这只是为了让逻辑正确并理解Excel将07:00作为小数等于7/24

OT1

=IF(NOT(AND(Sheet1!$A2>=7/24,Sheet1!$B2<=17/24)),MIN(20/24,Sheet1!$B2)-Sheet1!$A2-9/24,0) 

OT2

=IF(MIN(20/24,Sheet1!$B2)-Sheet1!$A2-9/24,MAX(B2-20/24,0),0) 

enter image description here