2007年1月24日 星期三

[EXCEL] 不跨日的工時計算

 
  相關函數IF() / AND() / MAX() / MIN()

  有些 Excel 的運用,並不需要套用很艱深的函數,只需要清楚的邏輯,和簡單的函數,就可以發揮很大的功用。每日工作時數的計算就是一例。(我是指不跨日的,如果要考慮跨日,情況會更複雜。)

  工時計算,不外乎時間的加加減減,主要的問題還是在於要扣掉休息時間,及加上加班時間

##CONTINUE##
  一般的想法,會先直接把下班時間減掉上班時間,再從中扣掉休息時間。但是因為遲到,早退,請假,加班等因素,要從中正確扣掉休息時間,並不容易

  我的想法是,直接把上班時間分為早班,午班,和加班三個連續時段,分別算出三個連續時段的工作時數,再加總即可。因為,每個時段都是連續的,沒有休息時間,所以要計算單一時段的工作時間,是比較單純的。公式原理如下,使用的函數都很簡單吧!

  =IF(AND(上班時間<表定時段結束時間,下班時間>表定時段開始時間),
   MIN(下班時間,表定時段結束時間)-MAX(上班時間,表定時段開始時間),
   0)

  為了靈活運用,我把表定時間在第二列另外列出,方便不同的使用者自由設定自己的上班時間,格式如下圖:

  C4 輸入下列公式,再往下複製即可。

  =IF(AND(A4<$B$2,B4>$A$2),MIN(B4,$B$2)-MAX(A4,$A$2),0)+
  IF(AND(A4<$D$2,B4>$C$2),MIN(B4,$D$2)-MAX(A4,$C$2),0)+
  IF(B4>$E$2,B4-MAX(A4,$E$2),0)


  E3:H13 是用來驗證用的,驗證各時段的計算是否正確,實際運用時,可以直接刪除。
  • E4 =IF(AND(A4<$B$2,B4>$A$2),MIN(B4,$B$2)-MAX(A4,$A$2),0)
  • F4 =IF(AND(A4<$D$2,B4>$C$2),MIN(B4,$D$2)-MAX(A4,$C$2),0)
  • G4 =IF(B4>$E$2,B4-MAX(A4,$E$2),0)
  • H4 =E4+F4+G4

1 意見:

匿名 2011/2/14 晚上10:12 提到...

請問如何以excel 計算整張火車時刻表上各列次 及 統計所有列次
之行駛時間
火車時刻表上每一車次之起始站與終點站並非全部相同如何自動找出起始站與終點站之時間
且有些車次時間是跨日的因此用(終點站)max-min(起始站)也行不通 終點站跨日時間較小