BẢNG CHẤM THEO GIỜ CÔNG

Liên hệ QC

Gấu Trúc Là Tôi

Thành viên mới
Tham gia
11/3/09
Bài viết
11
Được thích
7
Xin chào các anh, chị trên diễn đàn!

Từ hôm qua đến giờ em loay hoay mãi không xử lý được bảng chấm công theo giờ công này. Doanh nghiệp được tính theo giờ công, giờ làm việc từ 8h30 đến 18h có giờ nghỉ trưa từ 12h đến 13h30.
Thứ 7 làm từ 8h30 đến 15h.

Tổng giờ công loại trừ giờ nghỉ trưa từ 12h đến 13h30

Giờ công = Out - In - 1h30 (nếu làm trong thời gian bao gồm từ 12h đến 13h30)
1, Làm từ 8h30 - 18h: Out - In -1.5
2, Làm từ 15h - 18h: Out - In
v.v... Một số trường hợp khác.

Nhưng em không nghĩ ra hàm nào có thể bao hàm số giờ 12h đến 13h30 mà không có tính trường hợp Nếu giờ này đến giờ này thì sẽ trừ 1.5h.

Cảm ơn anh/chị đã giúp đỡ!

Thân,
 

File đính kèm

  • BCC.xlsx
    39.3 KB · Đọc: 34
Xin chào các anh, chị trên diễn đàn!

Từ hôm qua đến giờ em loay hoay mãi không xử lý được bảng chấm công theo giờ công này. Doanh nghiệp được tính theo giờ công, giờ làm việc từ 8h30 đến 18h có giờ nghỉ trưa từ 12h đến 13h30.
Thứ 7 làm từ 8h30 đến 15h.

Tổng giờ công loại trừ giờ nghỉ trưa từ 12h đến 13h30

Giờ công = Out - In - 1h30 (nếu làm trong thời gian bao gồm từ 12h đến 13h30)
1, Làm từ 8h30 - 18h: Out - In -1.5
2, Làm từ 15h - 18h: Out - In
v.v... Một số trường hợp khác.

Nhưng em không nghĩ ra hàm nào có thể bao hàm số giờ 12h đến 13h30 mà không có tính trường hợp Nếu giờ này đến giờ này thì sẽ trừ 1.5h.

Cảm ơn anh/chị đã giúp đỡ!

Thân,
Tôi đã nhận thư của bạn trong hộp thư riêng.
Bạn có thể tham khảo bài giải tại link: https://www.giaiphapexcel.com/diend...tính-toán-2-mốc-thời-gian.131208/#post-851395

Thân
 
Tôi đã nhận thư của bạn trong hộp thư riêng.
Bạn có thể tham khảo bài giải tại link: https://www.giaiphapexcel.com/diendan/threads/nhờ-hỗ-trợ-tính-toán-2-mốc-thời-gian.131208/#post-851395

Thân
Dạ anh,

Em cảm ơn anh rất nhiều ạ :)

Công thức em viết lại theo như thế này cho đúng với trường hợp đơn vị em ạ.
Đây là công thức ngày từ 2 -6:

Mã:
=NETWORKDAYS($A2,$B2)*8-SUM(CHOOSE(MATCH(MOD($A2:$B2,1)*24,{0,8.5,12,13.5,18}),{0,8},ROUND(MOD($A2:$B2,1),3.5)*24*{1,-1}+{-8.5,16.5},{3.5,4.5},ROUND(MOD($A2:$B2,1),4.5)*24*{1,-1}+{-10,18},{8,0})*(WEEKDAY(A2:B2*1,2)<6))

Còn đây là công thức gốc anh gửi trên diễn đàn cho trường hợp làm từ 8h về 17h30.
Mã:
=NETWORKDAYS($A3,$B3)*8-SUM(CHOOSE(MATCH(MOD($A3:$B3,1)*24,{0,8,12,13.5,17.5}),{0,8},ROUND(MOD($A3:$B3,1),4)*24*{1,-1}+{-8,16},{4,4},ROUND(MOD($A3:$B3,1),4)*24*{1,-1}+{-9.5,17.5},{8,0})*(WEEKDAY(A3:B3*1,2)<6))

Anh Hiệp có thể luận giải giúp em được không ạ. Em thật xấu hổ là em chỉ máy móc, hiểu máy móc tư duy để thế chỗ các số mà em không hiểu tại sao công thức này chỉ có thể chỉ lấy tại thời điểm chỉ riêng từng cột A & B cho từng dòng mà không thể cả vùng dữ liệu, tại sao lại {1,-1}+{-8,16},{4,4},ROUND(MOD($A3:$B3,1),4)*24*{1,-1}+{-9.5,17.5}

Em cảm ơn anh rất nhiều ạ :)
 
Em lọ mọ nhưng vẫn bị sai công thức ngày thứ 7 này ạ: :(((((

Mã:
=NETWORKDAYS($A3,$B3)*5-SUM(CHOOSE(MATCH(MOD($A3:$B3,1)*24,{0,8.5,12,13.5,15}),{0,5},ROUND(MOD($A3:$B3,1),3.5)*24*{1,-1}+{-8.5,13.5},{3.5,1.5}),ROUND(MOD($A3:$B3,1),1.5)*24*{1,-1}+{-10,15},{5,0}*(WEEKDAY(A3:B3*1,2)=6))

Mã:
=NETWORKDAYS.INTL($A3,$B3,"1111101")*5-SUM(CHOOSE(MATCH(MOD($A3:$B3,1)*24,{0,8.5,12,13.5,15}),{0,5},ROUND(MOD($A3:$B3,1),3.5)*24*{1,-1}+{-8.5,13.5},{3.5,1.5}),ROUND(MOD($A3:$B3,1),1.5)*24*{1,-1}+{-10,15},{5,0}*(WEEKDAY(A3:B3*1,2)=6))

Ngày thứ 7 của em bắt đầu từ 8h30, kết thúc lúc 15h, có giờ đi làm là 5 tiếng và 1h30 nghỉ trưa không tính công (từ 12h đến 13h30)


Em đã đọc lời chú giải của anh ạ. Nhưng em nó vẫn ra #Value ạ :(
 
Lần chỉnh sửa cuối:
Anh Hiệp có thể luận giải giúp em được không ạ. Em thật xấu hổ là em chỉ máy móc, hiểu máy móc tư duy để thế chỗ các số mà em không hiểu tại sao công thức này chỉ có thể chỉ lấy tại thời điểm chỉ riêng từng cột A & B cho từng dòng mà không thể cả vùng dữ liệu, tại sao lại {1,-1}+{-8,16},{4,4},ROUND(MOD($A3:$B3,1),4)*24*{1,-1}+{-9.5,17.5}
Tôi sẽ xem trường hợp của bạn và trả lời bạn sau nha!

Thân
 
Xin chào các anh, chị trên diễn đàn!

Từ hôm qua đến giờ em loay hoay mãi không xử lý được bảng chấm công theo giờ công này. Doanh nghiệp được tính theo giờ công, giờ làm việc từ 8h30 đến 18h có giờ nghỉ trưa từ 12h đến 13h30.
Thứ 7 làm từ 8h30 đến 15h.

Tổng giờ công loại trừ giờ nghỉ trưa từ 12h đến 13h30

Giờ công = Out - In - 1h30 (nếu làm trong thời gian bao gồm từ 12h đến 13h30)
1, Làm từ 8h30 - 18h: Out - In -1.5
2, Làm từ 15h - 18h: Out - In
v.v... Một số trường hợp khác.

Nhưng em không nghĩ ra hàm nào có thể bao hàm số giờ 12h đến 13h30 mà không có tính trường hợp Nếu giờ này đến giờ này thì sẽ trừ 1.5h.

Cảm ơn anh/chị đã giúp đỡ!

Thân,
Lưu ý: Chỉ chấm công theo dạng thống nhất:
- Hoặc chấm theo giờ vào giờ ra.​
- Hoặc chấm theo ký tự "x", "v", "P"….​
Không thể vừa chấm theo thời gian vừa chấm công theo ký tự.

Mã:
BO10=(SUM(IFERROR(IF(WEEKDAY($E$7:$BN$7,2)<6,8,5),)*(--$E10:$BN10>0))/2)-SUM($BP10:$BQ10)
BP10=ROUND(SUM(($E$9:$BN$9="in")*CHOOSE(MATCH($E10:$BN10*24,{0,8.5,12,13.5,18}),0,$E10:$BN10*24-8.5,3.5,$E10:$BN10*24-10,8)),2)
BQ10=ROUND(SUM(IFERROR(CHOOSE(MATCH($E10:$BN10*24,{0,8.5,12,13.5,18}),IF(WEEKDAY($E$7:$BN$7,2)<6,8,5),IF(WEEKDAY($E$7:$BN$7,2)<6,16.5,13.5)-$E10:$BN10*24,IF(WEEKDAY($E$7:$BN$7,2)<6,4.5,1.5),IF(WEEKDAY($E$7:$BN$7,2)<6,18,15)-$E10:$BN10*24,)*(--$E10:$BN10>0)*($E$9:$BN$9="out"),"")),2)
Kết thúc bằng Ctrl+Shift+Enter.

Xem file kèm, và tham khảo theo các mũi tên hướng dẫn.

Thân
 

File đính kèm

  • BCC.xlsx
    40.7 KB · Đọc: 38
Lưu ý: Chỉ chấm công theo dạng thống nhất:
- Hoặc chấm theo giờ vào giờ ra.​
- Hoặc chấm theo ký tự "x", "v", "P"….​
Không thể vừa chấm theo thời gian vừa chấm công theo ký tự.

Mã:
BO10=(SUM(IFERROR(IF(WEEKDAY($E$7:$BN$7,2)<6,8,5),)*(--$E10:$BN10>0))/2)-SUM($BP10:$BQ10)
BP10=ROUND(SUM(($E$9:$BN$9="in")*CHOOSE(MATCH($E10:$BN10*24,{0,8.5,12,13.5,18}),0,$E10:$BN10*24-8.5,3.5,$E10:$BN10*24-10,8)),2)
BQ10=ROUND(SUM(IFERROR(CHOOSE(MATCH($E10:$BN10*24,{0,8.5,12,13.5,18}),IF(WEEKDAY($E$7:$BN$7,2)<6,8,5),IF(WEEKDAY($E$7:$BN$7,2)<6,16.5,13.5)-$E10:$BN10*24,IF(WEEKDAY($E$7:$BN$7,2)<6,4.5,1.5),IF(WEEKDAY($E$7:$BN$7,2)<6,18,15)-$E10:$BN10*24,)*(--$E10:$BN10>0)*($E$9:$BN$9="out"),"")),2)
Kết thúc bằng Ctrl+Shift+Enter.

Xem file kèm, và tham khảo theo các mũi tên hướng dẫn.

Thân
Dạ em cảm ơn anh Hiệp, em xin gửi lại lời cảm ơn chân thành đến anh.

Em xin phép nghiên cứu xem cách làm của anh! Nếu đoạn nào em vẫn chưa hiểu em xin phép hỏi ý kiến của anh ạ.

Chúc anh cuối tuần vui vẻ ạ <3.
 
@Phan Thế Hiệp

Dạ thưa anh,

Em kiểm tra bảng tính thì thấy công thức đang chặn giờ công trong 8 tiếng và 5 tiếng không tính giờ công thực tế phát sinh. Có nghĩa không quan tâm đến giờ đến sớm hay đi về muộn cũng chỉ trong vùng 8 tiếng và 5 tiếng.

Em xin phép hỏi ý kiến anh rằng nếu mà công thức để tính giờ công thực tế phát sinh thì áp dụng công thức cũ được không ạ?

Mã:
=NETWORKDAYS($A3,$B3)*5-SUM(CHOOSE(MATCH(MOD($A3:$B3,1)*24,{0,8.5,12,13.5,15}),{0,5},ROUND(MOD($A3:$B3,1),3.5)*24*{1,-1}+{-8.5,13.5},{3.5,1.5}),ROUND(MOD($A3:$B3,1),1.5)*24*{1,-1}+{-10,15},{5,0}*(WEEKDAY(A3:B3*1,2)=6))

Mã:
=NETWORKDAYS.INTL($A3,$B3,"1111101")*5-SUM(CHOOSE(MATCH(MOD($A3:$B3,1)*24,{0,8.5,12,13.5,15}),{0,5},ROUND(MOD($A3:$B3,1),3.5)*24*{1,-1}+{-8.5,13.5},{3.5,1.5}),ROUND(MOD($A3:$B3,1),1.5)*24*{1,-1}+{-10,15},{5,0}*(WEEKDAY(A3:B3*1,2)=6))

Em cảm ơn anh!
 
Em xin phép hỏi ý kiến anh rằng nếu mà công thức để tính giờ công thực tế phát sinh thì áp dụng công thức cũ được không ạ?

Mã:
=NETWORKDAYS($A3,$B3)*5-SUM(CHOOSE(MATCH(MOD($A3:$B3,1)*24,{0,8.5,12,13.5,15}),{0,5},ROUND(MOD($A3:$B3,1),3.5)*24*{1,-1}+{-8.5,13.5},{3.5,1.5}),ROUND(MOD($A3:$B3,1),1.5)*24*{1,-1}+{-10,15},{5,0}*(WEEKDAY(A3:B3*1,2)=6))

Mã:
=NETWORKDAYS.INTL($A3,$B3,"1111101")*5-SUM(CHOOSE(MATCH(MOD($A3:$B3,1)*24,{0,8.5,12,13.5,15}),{0,5},ROUND(MOD($A3:$B3,1),3.5)*24*{1,-1}+{-8.5,13.5},{3.5,1.5}),ROUND(MOD($A3:$B3,1),1.5)*24*{1,-1}+{-10,15},{5,0}*(WEEKDAY(A3:B3*1,2)=6))

Em cảm ơn anh!
Công thức bạn đưa theo bài #8 không phù hợp với cách tính cả 1 Vùng/Mảng kéo từ ngày 01 đến ngày 31.
Hai "cơ sở dữ liệu" của hai bài khác nhau:
  • Bài tham khảo là cách tính công trải qua nhiều ngày liên tiếp, Vd: từ ngày 15/09/2018 đến 27/09/2018 có bao nhiêu giờ công đã loại ngày thứ 7 và CN. Tức chỉ gói gọn trong hai cột nhưng tính được cho nhiều ngày trong khoảng thời gian đó (bạn tham khảo thêm giải thuật về cách tính này tại link: https://www.giaiphapexcel.com/diendan/threads/tính-thời-gian-xử-lý.137565/#post-879939)
  • Bài của bạn là tính công theo giờ vào, giờ ra theo từng ngày và được giới hạn theo Vùng (giả sử đủ 31 ngày) đến 62 cột.
Em kiểm tra bảng tính thì thấy công thức đang chặn giờ công trong 8 tiếng và 5 tiếng không tính giờ công thực tế phát sinh. Có nghĩa không quan tâm đến giờ đến sớm hay đi về muộn cũng chỉ trong vùng 8 tiếng và 5 tiếng.
"không quan tâm đến giờ đến sớm hay đi về muộn cũng chỉ trong vùng 8 tiếng và 5 tiếng"
Chính xác là như vậy. Đa số Cty chấm công cho nhân viên đều không tính đến sớm, quy đổi nếu đến sớm thành đến đúng Mốc giờ vào. Riêng về trễ còn tùy theo Cty có tính là tăng ca hay không! thì thuộc đối tượng quản lý của cột "Theo dõi giờ tăng ca".​
Thân
 
Lần chỉnh sửa cuối:
Công thức bạn đưa theo bài #8 không phù hợp với cách tính cả 1 Vùng/Mảng kéo từ ngày 01 đến ngày 31.
Hai "cơ sở dữ liệu" của hai bài khác nhau:
  • Bài tham khảo là cách tính công trải qua nhiều ngày liên tiếp, Vd: từ ngày 15/09/2018 đến 27/09/2018 có bao nhiêu giờ công đã loại ngày thứ 7 và CN. Tức chỉ gói gọn trong hai cột nhưng tính được cho nhiều ngày trong khoảng thời gian đó (bạn tham khảo thêm giải thuật về cách tính này tại link: https://www.giaiphapexcel.com/diendan/threads/tính-thời-gian-xử-lý.137565/#post-879939)
  • Bài của bạn là tính công theo giờ vào, giờ ra theo từng ngày và được giới hạn theo Vùng (giả sử đủ 31 ngày) đến 62 cột.

"không quan tâm đến giờ đến sớm hay đi về muộn cũng chỉ trong vùng 8 tiếng và 5 tiếng"
Chính xác là như vậy. Đa số Cty chấm công cho nhân viên đều không tính đến sớm, quy đổi nếu đến sớm thành đến đúng Mốc giờ vào. Riêng về trễ còn tùy theo Cty có tính là tăng ca hay không! thì thuộc đối tượng quản lý của cột "Theo dõi giờ tăng ca".​
Thân

Dạ vâng anh,

Em hiểu ý nghĩa của các bạn ấy rồi ạ! Em cũng vỡ ra là đúng như vậy nếu đên sớm trước giờ làm thì sẽ quy về mốc chuẩn là 8h30. Còn nếu về muộn hơn so với giờ về thì sẽ được tính cộng vì đơn vị em tính trả lương theo giờ làm việc chứ không phải ngày công ạ.

Tuy nhiên, em đang test thử lại bảng tính thì có một số điểm đáng chú ý ạ (anh giúp em mở file đính kèm nhé) có trường hợp bạn A về sớm bị âm vì em ví dụ thứ bảy bạn A về lúc 4h chiều thì hàm tính tổng sẽ tính ra là bạn về sớm âm 1h. Trường hợp của bạn B thì em đang để giờ muộn hẳn thì công thức sẽ trả về kết quả là 13h (ngày thường 8h + thứ bảy 5h). Trường hợp bạn C em để tiệm cận gần với mốc về chứ không phải muộn lắm thì công thức sẽ trả kết quả là 14h và về sớm âm 1h tức bằng 13h ạ.

Ý của em là không hiểu sao công thức mảng lại trả các kết quả khác nhau như vậy? Anh cho em hỏi xíu ý nghĩa của 10,8 & 7,2 ạ.

Và anh có thể giúp em viết công thức mảng của cột về muộn được không ạ. Về muộn sau 18h từ thứ 2 - thứ 6 và sau 15h của thứ 7 ạ.

Em cảm ơn anh Hiệp!
Chúc anh buổi tối nhiều niềm vui ạ :)

Gấu Trúc,
 

File đính kèm

  • BCC TEST.xlsx
    41 KB · Đọc: 14
Tuy nhiên, em đang test thử lại bảng tính thì có một số điểm đáng chú ý ạ (anh giúp em mở file đính kèm nhé) có trường hợp bạn A về sớm bị âm vì em ví dụ thứ bảy bạn A về lúc 4h chiều thì hàm tính tổng sẽ tính ra là bạn về sớm âm 1h. Trường hợp của bạn B thì em đang để giờ muộn hẳn thì công thức sẽ trả về kết quả là 13h (ngày thường 8h + thứ bảy 5h). Trường hợp bạn C em để tiệm cận gần với mốc về chứ không phải muộn lắm thì công thức sẽ trả kết quả là 14h và về sớm âm 1h tức bằng 13h ạ.
Ý của em là không hiểu sao công thức mảng lại trả các kết quả khác nhau như vậy? Anh cho em hỏi xíu ý nghĩa của 10,8 & 7,2 ạ.
Và anh có thể giúp em viết công thức mảng của cột về muộn được không ạ. Về muộn sau 18h từ thứ 2 - thứ 6 và sau 15h của thứ 7 ạ.
1/ Đã điều chỉnh công thức tính ngày thứ 7 về sớm:
Mã:
BQ10=ROUND(SUM(IF(($E$9:$BN$9="out")*(--$E10:$BN10>0),IF(WEEKDAY($E$7:$BN$7,2)<6,CHOOSE(MATCH($E10:$BN10*24,{0,8.5,12,13.5,18}),8,16.5-$E10:$BN10*24,4.5,18-$E10:$BN10*24,),CHOOSE(MATCH($E10:$BN10*24,{0,8.5,12,13.5,15}),5,13.5-$E10:$BN10*24,1.5,15-$E10:$BN10*24,)),)),2)
Kết thúc bằng Ctrl+Shift+Enter.

2/ Thêm công thức tính về muộn:
Mã:
BR10=ROUND(SUM(IF(($E$9:$BN$9="out")*($E$7:$BN$7<>""),IF($E10:$BN10*24>IF(WEEKDAY($E$7:$BN$7,2)<6,18,15),$E10:$BN10*24-IF(WEEKDAY($E$7:$BN$7,2)<6,18,15),),)),2)
Kết thúc bằng Ctrl+Shift+Enter.

3/ Các thông số như bạn hỏi: "10,8 & 7,2" chẳng qua là số di dời các Mốc Giờ vào, Giờ ra khi so sánh Giờ vào và Giờ ra thực tế đang trước hay sau Giờ nghỉ trưa: 12h đến 13h30 (1.5 tiếng).
  • Giờ vào:
    • Nếu Giờ vào thực tế nằm ở khoảng trước 8h30: thì không tính trễ, tức lấy giá trị 0
    • Nếu Giờ vào thực tế nằm ở khoảng từ 8h30 đến 12h: thì 'Giờ đi muộn' = Giờ vào thực tế - Mốc vào (8h30 hay 8.5)
    • Nếu Giờ vào thực tế nằm ở khoảng từ 12h đến 13h30: thì 'Giờ đi muộn' chính là khoảng thời gian buổi sáng, tức đi muộn 3.5 tiếng.
    • Nếu Giờ vào thực tế nằm ở khoảng từ 13h30 đến 18h: thì 'Giờ đi muộn' = Giờ vào thực tế - Mốc vào (8h30 hay 8.5) - Giờ nghỉ (1.5 tiếng) <=> Giờ vào thực tế - Mốc 10h (do: 8.5+1.5).
    • Nếu Giờ vào thực tế nằm ở khoảng lớn hơn 18h, coi như trễ nguyên ngày là 8h.
  • Giờ ra: do phải phân biệt ngày thường (về 18h) và ngày thứ 7 (về 15h) nên thông số nhiều hơn.
    • Nếu Giờ ra thực tế nằm ở khoảng trước 8h30: coi như "về sớm" nguyên ngày là 8h (ngày thường), hay 5h (ngày Thứ 7).
    • Nếu Giờ ra thực tế nằm ở khoảng từ 8h30 đến 12h: thì 'Giờ về sớm' = Mốc Ra (18h ngày thường, hay 15h ngày thứ 7) - Giờ nghỉ (1.5 tiếng) - Giờ ra thực tế <=> Mốc Ra (16.5 ngày thường, hay 13.5 ngày thứ 7) - Giờ ra thực tế.
    • Nếu Giờ ra thực tế nằm ở khoảng từ 12h đến 13h30: thì 'Giờ về sớm' chính là khoảng thời gian buổi chiều, tức về sớm 4.5 tiếng (ngày thường) hay 1.5 tiếng (ngày thứ 7).
    • Nếu Giờ ra thực tế nằm ở khoảng từ 13h30 đến 18h: Mốc Ra (18h ngày thường, hay 15h ngày thứ 7) - Giờ ra thực tế
    • Nếu Giờ ra thực tế nằm ở khoảng lớn hơn 18h, coi như không về sớm.
Thân
 

File đính kèm

  • BCC TEST.xlsx
    42.2 KB · Đọc: 40
@Phan Thế Hiệp

Anh ơi, em cảm ơn anh ạ. Nếu có dịp ra nào ra Hà Nội, em xin kính mời Bác Hiệp cốc Bia ạ.

Chúc anh cuối tuần vui vẻ ạ :)
Không có gì lớn lao đâu bạn!
Cảm ơn lời mời của bạn, nhưng chắc tôi không có dịp nào để ra Hà Nội rồi! Tiếc quá!

Nếu bạn muốn được lực lượng hỗ trợ thân cận hơn, tôi còn có hai người em rất giỏi về VBA và công thức mảng cũng ở Hà Nội, bạn nên tìm cách (Vd: trao đổi hộp thư riêng) để liên lạc với anh @befaint@vanthinh3101 rồi muốn offline họp mặt trao đổi tùy thích.

Chúc bạn học tập vui với anh em GPE.
Thân
 
Web KT
Back
Top Bottom