Bảng chấm công

Liên hệ QC

heroic

Thành viên mới
Tham gia
12/1/07
Bài viết
41
Được thích
27
Em đang làm bảng chấm công này mà vẫn chưa ra.
Tiêu chí chấm công của em:
các ngày thường nếu làm trên 8h thì em sẽ nhập thực tế, giờ làm hơn là 9h thì em sẽ cộng hết vào rồi trừ đi ngày công chuẩn làm việc của tháng (cty em làm nửa ngày thứ 7)

Còn nếu làm thêm ngày chủ nhật thì em tính số giờ làm thêm.

em đã dùng cái sumproduct của bác ThuNghi nhưng khi nhập các ngày công là ký tự thì P (phép năm), O (ốm) thì sumproduct không sử dụng được.

Các bác có cao kiến hoàn thiện cho em thêm cách tính ngày công của các ngày lễ, ngày nghỉ giống cái Time sheet day Function có cái phần Holiday http://www.giaiphapexcel.com/forum/showpost.php?p=81524&postcount=29
 

File đính kèm

  • timeshet2.xls
    64.5 KB · Đọc: 144
Theo tôi, bạn nên chấm vô các ngày của nhân viên toàn thể các loại công sẽ có (theo quy định của đơn vị bạn) trong bảng chấm công đó;

Lấy ví dụ:
Nghĩ phép 1/2 ngày & làm 1/2 ngày bạn sẽ chấm sao? P24 hay 4P2 (?)

Và dành ra 1 người để bạn tổng hợp công bằng cách tính rợ để mọi người dễ hình dung & hiểu hết ngọn nguồn sự việc;

Nếu không rõ hết mọi điều, sẽ dẫn đến tình trạng viết đi viết lại nhiều lần, tốn thời gian của bạn & công đồng.

Thân ái!
 
Bạn xem hàm tự tạo tính với công thêm giớ xem sao

PHP:
Option Explicit
Function TinhCong(LookUpRange As Range, Loai As String)
 Dim Clls As Range
 
 For Each Clls In LookUpRange
   If Cells(6, Clls.Column).Value = "T7" And Loai = "LT_T7" Then
      If Clls.Value = 8 Then
         TinhCong = TinhCong + 0.5
      ElseIf Clls.Value = "" Or Clls.Value = "K" Then
         TinhCong = TinhCong - 0.5
      End If
   ElseIf Cells(6, Clls.Column).Value = "CN" And Loai = "LT_CN" Then
      If IsNumeric(Clls.Value) Then _
         TinhCong = TinhCong + Clls.Value/ 8
   End If
 Next Clls
 TinhCong = TinhCong
End Function
 

File đính kèm

  • GPE.rar
    20.2 KB · Đọc: 91
Lần chỉnh sửa cuối:
Cảm ơn bác ChanhTQ@ và Bác SA_DQ trong bảng chấm công của em tính công chỉ có 2 loại dữ liệu số (số giờ làm) và ký tự (P:phép, P2: nghỉ nửa ngày, O: Ốm, K: nghỉ không phép)

Cty em làm nửa ngày thứ 7 nên Số ngày làm việc em tính theo giờ và chia cho 8 tiếng. Em đã tính được ngày công chuẩn.
Số giờ thực tế làm việc ngày thường nếu hơn ngày công chuẩn thì khi trừ đi ngày công chuẩn sẽ ra ngày công làm thêm ngày thường.

Còn vấn đề nữa là nếu làm thêm ngày thứ 7 và chủ nhật em vẫn chưa cộng được số giờ làm?
theo cách của bác
chanhTQ@ thì tính được nhưng phải nhập là 8 mới là 1 công còn em nhập 4 làm nửa ngày hoặc 3 tiếng thì nó phải ra đúng giá trị lẻ số công giờ làm thêm. VD: 4 tiếng = 0,5 công.

Còn các loại chấm công là ký tự thì em dùng để tính công theo lương bảo hiểm.

Chắc còn 1 số trường hợp đặc biệt là làm thêm vào ngày lễ nghỉ thì em chưa biết cách rút trích?

Các bác xem còn trường hợp nào thì bổ sung thêm cho em!
 
Bạn sửa lại hàm trên bằng hàm này để kiểm tra công lẽ làm thêm ngày thứ 7

PHP:
Option Explicit
Function TinhCong(LookUpRange As Range, Loai As String)
 Dim Clls As Range
 
 For Each Clls In LookUpRange
   If Cells(6, Clls.Column).Value = "T7" And Loai = "LT_T7" Then
      If IsNumeric(Clls.Value) Then                      '<=| Da Sua Cho Này'
         TinhCong = TinhCong + Clls.Value / 8 - 0.5      '<=| Da Sua Cho Này'
      ElseIf Clls.Value = "" Or Clls.Value = "K" Then
         TinhCong = TinhCong - 0.5
      End If
   ElseIf Cells(6, Clls.Column).Value = "CN" And Loai = "LT_CN" Then
      If IsNumeric(Clls.Value) Then _
         TinhCong = TinhCong + Clls.Value \ 8
   End If
 Next Clls
 TinhCong = TinhCong
End Function

Chắc còn 1 số trường hợp đặc biệt là làm thêm vào ngày lễ nghỉ thì em chưa biết cách rút trích?
Các bác xem còn trường hợp nào thì bổ sung thêm cho em!
Những ngày này bạn chấm như thế nào, hãy nêu ra trước; Cách thức châm thực tế đang có ở đơn vị/cơ quan bạn; Lúc đó mới viết hàm cho bạn được: Chính bạn cần bổ sung trước, những dữ liệu ban đầu.
 
Lần chỉnh sửa cuối:
Cám ơn bác SA_DQ phần ngày công thường em dùng =ROUND(SUM(D8:AH8)/8,1) nên nó cộng cả giá trị của các giờ làm ngày T7, CN vậy bác bổ sung thêm cho em một dòng code nữa bác nhé! Tức là :
If Cells(6, Clls.Column).Value = "T2,T3,T4,T5,T6" And Loai = "NC" Then
If IsNumeric(Clls.Value) Then
'<=| Da Sua Cho Này'
TinhCong = TinhCong + Clls.Value / 8 - 0.5


em không biết thêm vào làm sao?


 
Bổ sung cách tính công khác ngày T7 & CN đây, xin mời

PHP:
Option Explicit
Function TinhCong(LookUpRange As Range, Loai As String)
 Dim Clls As Range, Col As Byte
 
 For Each Clls In LookUpRange
   Col = Clls.Column
   Select Case Loai
   Case "LT_T7"
      If Cells(6, Col).Value = "T7" And IsNumeric(Clls.Value) Then
         TinhCong = TinhCong + Clls.Value / 8 - 0.5
      ElseIf Cells(6, Col).Value = "T7" And (Clls.Value = "" Or Clls.Value = "K") Then
         TinhCong = TinhCong - 0.5
      End If
   Case "LT_CN"
      If Cells(6, Col).Value = "CN" And IsNumeric(Clls.Value) Then _
         TinhCong = TinhCong + Clls.Value / 8
   Case "NC"
      If IsNumeric(Clls.Value) And _
            (Cells(6, Col).Value < "T7" And Cells(6, Col).Value > "CN") Then
15         TinhCong = TinhCong + Clls.Value / 8
      End If
   End Select
 Next Clls
End Function

Lúc đó cú pháp hàm tại ô [AI16] sẽ như sau =TinhCong(D7:AH7,AI$5)
Cho kết quả là 13; Các số bên dưới sẽ là 16.5, 16.5, 12, 13, 13, 17, 22 nếu ta copy công thức xuống

Nếu muốn có kết quả như tại [AI7:AI14] thì dòng lệnh ngay trước dòng lệnh có đánh số chỉ đơn giản là:

Mã:
    If IsNumeric(Clls.Value) Then
 
Em gởi file đã làm những vẫn còn lỗi 2 trường hợp!

Cám ơn Bác SA_DQ và mọi người cùng chia sẻ học tập em đã làm nhưng vẫn chưa xử lý được 2 trường hợp đó là nhân viên mới đi làm và có nghỉ phép.
Còn nếu là nhân viên cũ mà ko làm ngày thứ 7 mà có làm thêm ngày thường thì sau khi trừ đi mới được tính công làm thêm.
 

File đính kèm

  • timeshet3.xls
    53 KB · Đọc: 66
Bạn đưa file toàn những công thức lổi #NAME thì xem không được đâu!

Bạn xem lại những yêu cầu của bạn!
 
Mình download thử mở thấy bình thường mà, hình như bạn chưa enable Macro nên bị lỗi đó thôi!
 
Theo em nếu timesheet3.xls tính được sumcolor conditional format thì sẽ dễ xử lý hơn. vì dùng hàm tính công vẫn chưa xử lý được hết các trường hợp như nhân viên mới vào hoặc nghỉ phép đi làm ko đủ mà cứ bị trừ các ngày thứ 7 nửa ngày thì lại ko đúng.

Bài toán làm bảng chấm công này lại phức tạp quá! việc nghỉ phép và ốm dùng countif thì dễ tính rồi các bác xem còn cách nào khác để em có thể tính hay hơn cho kết quả đúng công làm thêm ngày thường, công làm thêm ngày CN.
 
Lần chỉnh sửa cuối:
Bạn thử download cái timesheet3.xls xem hay cái file cũ thì bị lỗi là đúng
 
Cùng nhau xem file đính kèm của mình vậy

(Làm theo cách mình hiểu yêu cầu bằng lới của bạn)
 

File đính kèm

  • GPE.rar
    23.7 KB · Đọc: 56
chắc HYen17 chưa hiểu yêu cầu của mình, Bác SA_DQ đã giúp mình hàm tính công và mình còn bị mắc ở cái hàm đó là. Mình trình bày lại cách chấm công của mình Bạn thử download cái timesheet3.xls xem

Cty mình chấm công theo tổng số giờ làm việc kể cả làm thêm giờ theo bảng chấm công.
mình cần số liệu:
1 số công trong tháng
2 số công phép trong tháng (P2,P,O các cái này dùng countif thì tính được rồi)
3 số công làm thêm ngày thường
4 số công làm thêm ngày CN ( Hàm chấm công của bác SA_DQ đã làm được)

Nhưng bị lỗi khi xảy ra các trường hợp sau khi phải cộng trừ với công ngày làm thứ 7. tính trên tháng 01/2009 nhé vì tháng này có 5 ngày thứ 7 và 4 ngày CN
-Nếu là nhân viên mới vào làm bắt đầu ngày 19 đến ngày 31 của tháng thì số công bị nhập nhằng giữa việc trừ đi nửa ngày thứ 7 là 0.5 công đáng nhẽ phải cộng công vào. cụ thể là tuần đầu làm việc hoặc các ngày lễ mà nghỉ từ đầu tháng vài ngày rơi vào ngày thứ 7 nó lại trừ mất công của nhân viên.
T2 T3 T4 T5 T6 T7 CN T2 T3 T4 T5 T6 T7 CN
8 8 8 8 8 4 0 8 8 8 8 8 8 0

Thì số công này phải là 11 công và 0.5 công làm thêm ngày thường

Bác SA_DQ có thể điều chỉnh lại hàm sao cho hợp lý hơn Ko?
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom