close

4277

Excel如何值日生排班

如果我們要將下圖G欄員工,藍色跟黑色名單是同一批人(順序相同),員工姓名為黑色是安排上班日一至五值班用,V代表當月第一個上班日值班人員,而員工姓名為藍色是按排週六日值班用,V代表當月第一個假日值班人員,同一套順序,但上班日跟六日分開排班。要怎麼做才可以呢?

image

步驟1:點取D3儲存格輸入公式「=IF(WEEKDAY(DATE(2023,A3,B3),2)<6,INDEX($G$2:$G$9,IF (MOD(MATCH("V",$F$2:$F$9,0)+NETWORKDAYS(DATE(2023,$A$3,$B$3),DATE(2023,A3,B3)),8)=1,8,MOD(MATCH("V",$F$2:$F$9,0)+NETWORKDAYS(DATE(2023,$A$3,$B$3),DATE(2023,A3,B3))-1,8))),INDEX($G$13:$G$20,IF(MOD(MATCH("V",$F$13:$F$20,0)+B3-NETWORKDAYS(DATE(2023,$A$3,$B$3),DATE(2023,A3,B3)),8)=1,8,MOD(MATCH("V",$F$13:$F$20,0)+B3-NETWORKDAYS(DATE(2023, $A$3,$B$3),DATE(2023,A3,B3))-1,8))))」後,向下複製到D4:D32儲存格。

image

公式說明

首先判斷同列A,B二欄指定的月與日是否為工作日(WEEKDAY(DATE(2023,A3,B3),2)<6),則判斷V字元位於F2:F9中那一儲存格(MATCH("V",$F$2:$F$9,0)),傳回位置後,再加上從第三列到目前列的日期中共有多少工作天(NETWORKDAYS(DATE(2023,$A$3,$B$3),DATE(2023,A3,B3))),將加起來的值除以8,傳回其餘數(MOD(MATCH("V",$F$2:$F$9,0)+ NETWORKDAYS (DATE(2023,$A$3,$B$3),DATE (2023,A3,B3)),8)),如果餘數為1時,則傳回數值8,否則傳回V位置加上工作日減1再除以8的餘數(IF(MOD(MATCH("V",$F$2:$F$9,0)+NETWORKDAYS (DATE(2023,$A$3,$B$3),DATE(2023,A3,B3)),8)=1,8,MOD(MATCH ("V",$F$2:$F$9,0)+NETWORKDAYS(DATE(2023,$A$3,$B$3),DATE(2023,A3,B3))-1,8)))。最後根據餘數抓取G2:G9儲存格中第幾列儲存格內容(INDEX($G$2:$G$9,IF(MOD(MATCH("V",$F$2:$F$9,0)+NETWORKDAYS(DATE(2023,$A$3,$B$3),DATE(2023,A3,B3)),8)=1,8, MOD(MATCH("V",$F$2:$F$9,0)+NETWORKDAYS(DATE(2023,$A$3,$B$3),DATE(2023,A3,B3))-1,8))))。週六日亦雷同。


arrow
arrow
    全站熱搜
    創作者介紹

    錦子老師 發表在 痞客邦 留言(0) 人氣()