Dữ liệu ngày nghỉ của nhân viên trong năm. Bạn cần:
- Tổng hợp ngày bắt đầu và kết thúc của từng kỳ nghỉ.
- Mỗi kỳ nghỉ sẽ được hiểu là các ngày nghỉ liên tiếp nhau.
- Có cột đánh số kỳ nghỉ từng nhân viên.
- Đếm số lượng ngày nghỉ trong từng kỳ nghỉ đó
- Nếu ngày nghỉ là cuối tuần (Thứ 7, Chủ nhật) bạn cần loại bỏ.
- Tuấn nghỉ ngày 05/03, vậy đó sẽ là 1 chu kỳ vì không có ngày liên tiếp. Tiếp tục nghỉ từ ngày 10 đến 13. Đó sẽ là 1 chu kỳ mới, nhưng ngày 10 là Chủ nhật nên cần loại bỏ nó khỏi chu kỳ.
- Ngọc có 1 ngày nghỉ nhưng ngày là Thứ 7 nên sẽ không cần thống kê.
Link: Onedrive
![]() |
| Tổng hợp ngày nghỉ của nhân viên theo từng chu kỳ |
Công thức:
1.=LET(a,WEEKDAY(B2:B25,2)<6,REDUCE({"Name","Vacation","From Date","End Date","Days Off"},UNIQUE(FILTER(A2:A25,a)),LAMBDA(x,v,VSTACK(x,LET(b,DROP(GROUPBY(SCAN(0,B2:B25<>N(+B1:B24)+1,SUM),B2:B25,HSTACK(MIN,MAX),,0,,(A2:A25=v)*a),1,1),IFNA(HSTACK(v,SEQUENCE(ROWS(b)),b,NETWORKDAYS(TAKE(b,,1),DROP(b,,1))),v))))))
2.=LET(a,A2:A25,b,B2:B25,c,N(+OFFSET(b,-1,)),d,SCAN(0,b-c,LAMBDA(x,y,x+(y<>1))),e,UNIQUE(d),m,XLOOKUP(e,d,a),n,SEQUENCE(ROWS(m))-XMATCH(m,m,0)+1,o,XLOOKUP(e,d,b),p,XLOOKUP(e,d,b,,,-1),q,NETWORKDAYS(o,p),VSTACK(D1:H1,FILTER(HSTACK(m,n,WORKDAY(o-1,1),WORKDAY(p+1,-1),q),q)))
3.=LET(a,A2:A25,d,B2:B25,b,SCAN(0,(a=DROP(VSTACK(0,a),-1))*(d-DROP(VSTACK(0,d),-1)=1),LAMBDA(a,v,a+1-v)),REDUCE(D1:H1,UNIQUE(b),LAMBDA(c,i,LET(n,XLOOKUP(i,b,a),f,XLOOKUP(i,b,d),e,XLOOKUP(i,b,d,,,-1),w,NETWORKDAYS(f,e),IF(w,VSTACK(c,HSTACK(n,SUM(N(n=INDEX(c,,1)))+1,WORKDAY(f-1,1),WORKDAY(e+1,-1),w)),c)))))
4.=LET(a,A2:A25,d,B2:B25,b,SCAN(0,d-DROP(VSTACK(0,d),-1)=1,LAMBDA(a,v,a+1-v)),g,SORT(DROP(GROUPBY(HSTACK(a,b),d,HSTACK(MIN,MAX,COUNT),,0,,WEEKDAY(d,2)<6),1),2),n,TAKE(g,,1),VSTACK(D1:H1,HSTACK(n,1+INDEX(g,,2)-VLOOKUP(n,g,2,0),DROP(g,,2))))
5.=LET(n,A2:A25,v,B2:B25,g,VSTACK(1,DROP(n,1)<>DROP(n,-1)),k,SORT(DROP(GROUPBY(HSTACK(n,SCAN(0,g,SUM),SCAN(0,VSTACK(1,(DROP(v,1)-DROP(v,-1))<>1)+g,LAMBDA(x,y,IFS(y=2,1,y=1,x+y,1,x)))),v,HSTACK(MIN,MAX,COUNT),0,0,,NETWORKDAYS(--v,--v)),1),2),VSTACK(D1:H1,HSTACK(TAKE(k,,1),DROP(k,,2))))
6.Python (Xem trong file)
