Bạn có dữ liệu thời gian làm việc mỗi ngày của nhân viên, cùng lương theo giờ từng ngày. Bạn cần tính tổng lương cho mỗi nhân viên:
- Giờ làm việc tiêu chuẩn là từ 09:00-17:00
- Làm thêm ngoài giờ tiêu chuẩn sẽ được tính thêm 20%
- Làm thêm cuối tuần (Thứ 7, Chủ nhật) sẽ được tính thêm 50% (không áp dụng làm ngoài giờ tiêu chuẩn)
- Rate là cột lương theo giờ mỗi ngày (mức lương mỗi ngày là không giống nhau).
- Tính tổng tiền phải thanh toán cho từng nhân viên.
Link: Onedrive
![]() |
| Tính tổng lương nhân viên |
Công thức:
1.=GROUPBY(A2:A23,MAP(D2:D23,LAMBDA(s,LET(a,TEXTSPLIT(@+C23:s,"-",",")*24,b,SUM(a*{-1,1}),s*(b+IF(WEEKDAY(@+B23:s,2)>5,b/2,0.2*(MAX(a-17,)+MAX(9-a,))))))),SUM,,0)
2.=GROUPBY(A2:A23,MAP(B2:B23,C2:C23,D2:D23,LAMBDA(x,y,z,LET(a,TEXTSPLIT(y,"-",",")*24,b,TAKE(a,,1),c,DROP(a,,1),SUM(IF(WEEKDAY(x,2)<6,(IFS(b<9,(9-b),c>17,(c-17),1,0)*0.2),(c-b)*0.5),(c-b))*z))),SUM,,0)
3.=GROUPBY(A2:A23,24*D2:D23*MAP(B2:B23,C2:C23,LAMBDA(b,c,LET(v,--TEXTSPLIT(c,"-",","),i,MAX(v)-17/24,j,3/8-MIN(v),w,SUM(MMULT(v,{-1;1})),IF(WORKDAY(b-1,1)=b,w+i*(i>0)*0.2+j*(j>0)*0.2,w*1.5)))),SUM,,0)
4.=LET(d,IF(WEEKDAY(B2:B23,2)>5,1.5,1),c,MAP(C2:C23,d=1,LAMBDA(y,w,SUM(24*MAP(TEXTSPLIT(y,","),LAMBDA(z,LET(a,0.375,b,17/24,hs,--TEXTBEFORE(z,"-"),he,--TEXTAFTER(z,"-"),(MAX(0,a-hs) + MAX(0,he-b))*IF(w,1.2,1) + (IF(he>b,b,he) - IF(hs<a,a,hs)))))))),GROUPBY(A2:A23,d*c*D2:D23,SUM,,0))
5.Python (Xem trong file)
