2017-04-07 71 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