延續排班之一
一、定義應排班人員
排班規則
1.人員分成假日/正常班人員,不可以跨班別上班,可自行添增人員。
2.假日/正常班,每班至少要2位,最多10位,且每月班別人數為固定;若需增加人數,亦可自行定義。
3.假日定義為國定假日、星期六/日,可自行添加假日定義。
4.若是每月假日/正常班名單異動,需自行修正公式,即可每月換班時使用。
5.有關人員每週時數、每月總時數等限制,人員休假、調班及特別限制等因素目前尚未規劃。
如同以上之定義,將人員分開各班別,以便排班時判斷人員。
二、定義各班別人數
我用正常班需要12位,假日班需要5位。且設計上一次各班別最後一位為那位。
故,我的排班表設計如下:
再來介紹此表設計
黃色為資料輸入,正:12,假:5;去年度最後一位輪值人員為編號24、6。
再來介紹儲存格之函數設計
日期及班別已在前篇介紹,不再多述。
以1/1之前一位函數寫法($F$4),我是用 =IF(E4=0,OFFSET(F4,-1,3),OFFSET(F4,-1,6)),此為毛判斷班別,再去帶入去年度最後一位輪值人員編號
而1/2之寫法($F$5)為 =IF(E5=E4,IF(E5=0,OFFSET(F5,-1,$K$1),OFFSET(F5,-1,$H$1)),IF(E5=E3,IF(E5=0,OFFSET(F5,-2,$K$1),OFFSET(F5,-2,$H$1)),IF(E5=E2,IF(E5=0,OFFSET(F5,-3,$K$1),OFFSET(F5,-3,$H$1)),IF(E5=E1,IF(E5=0,OFFSET(F5,-4,$K$1),OFFSET(F5,-4,$H$1)),"F"))))
這是判斷已開始排班之人員表中,最後一位之編號。以下依此類推~
人員1之函數寫法($F$5),為 =MOD(F4,COUNTIF(人員名單!$D$2:$D$110,E4))+1
人員2之函數寫法為 =IF(E4=0,(IF(COUNT(G4:G4)>=$K$1,"",MOD(G4,COUNTIF(人員名單!$D$2:$D$110,$E4))+1)),(IF(COUNT(G4:G4)=$G$1,"",MOD(G4,COUNTIF(人員名單!$D$2:$D$110,$E4))+1)))
人員3~12 參考人員2類推。
沒人員之儲存格就用「設定格式化之條件」,讓儲存格填滿灰色。
如此,產生了此平/假日班別人員代碼
三、帶入各班別人員名單
有了人員代號,要如何做出以下表呢?
我用1/1 人員1($U$4)來說明,所用函數公式為 =IFERROR(IF($E4=0,VLOOKUP(G4,人員名單!$A$2:$C$25,3,1),VLOOKUP(G4,人員名單!$A$26:$C$110,3,1)),"")
若沒人員名單,如二之方式,產生灰階填滿。
四、延伸幾個問題
1.若一天有二班別以上,要如何使用本表
我建議用一班別一張表,不就簡單化,再將各班別合併一張工作表,依日期排序,不就成了。
2.若是有人請假、調班呢?
這問題,我仍在開發,目前沒答案分享。
3.人員異動
我用人員名單來控管,內容更新就是異動後名單了。
4.其他
我仍在摸索中,也就是沒有答案。預設目標是用純函數來寫排班表。
留言列表