luongkiengxuong
Thành viên chính thức
- Tham gia
- 8/6/09
- Bài viết
- 87
- Được thích
- 20
Cảm ơn bạn HieuCD rất nhiều , bạn rất nhiệt tình qua cách hướng dẫn của bạn mình học được rất nhiều điều bổ ích! Thanks
Xử lý dữ liệu từ máy chấm công
Mình cũng muốn hỏi giống như bạn tuanquapharco, cty mình cũng sử dụng máy chấm công bằng dấu vân tay.
Các bạn vui lòng chỉ giúp tôi tạo công thức để tính giờ làm bình thường, và tách giờ tăng ca ra giờ buổi chiều.
VD: Nguyễn Văn A: buổi sáng Giờ vào 7:15 giờ ra 11:30,
buổi chiều giờ vào 13:00 giờ ra 17:00, nếu có tăng ca thì nhập giờ tăng ca chung buổi chiều.Giờ vào 13:00 giờ ra 20:30
Có những trường hợp vào làm trước 7:30 sẽ không tính công, bởi vì thời gian quy định bắt đầu làm việc từ 7:30, mình làm sao để tính đúng thời gian quy định.
Chỉ giúp mình công thức trừ giờ nghỉ tăng ca, giờ tăng ca từ 17:30->20:30.
Cảm ơn rất nhiều!
cảm ơn bạn đã giúp đỡ, nhưng mình không hiểu cách làm như thế nào để có được kết quảTạm thời là vầy; Bạn kiểm & cho í kiến tiếp theo
Sub ChuyenCong()
Dim Sh As Worksheet, Arr()
Dim J As Long, Rws As Long, Dg As Integer, Ng As Integer, NCT As Integer
On Error Resume Next
Rws = [b10].CurrentRegion.Rows.Count
Arr() = [A10].Resize(Rws, 6).Value
Set Sh = ThisWorkbook.Worksheets("BCC")
NCT = Day(DateSerial(Sh.[a3].Value, Sh.[a4].Value, 0))
MsgBox NCT
For Dg = 7 To Sh.[C9999].End(xlUp).Row Step 2
ReDim dArr(1 To 2, 1 To 31)
For J = 1 To UBound(Arr())
If Arr(J, 3) = Sh.Cells(Dg, "C").Value Then
Ng = Day(Arr(J, 1))
If Arr(J, 4) > 0 Then
If Ng > 20 Then
dArr(1, Ng - 20) = Arr(J, 4)
dArr(2, Ng - 20) = Arr(J, 6)
Else
dArr(1, NCT - 20 + Ng) = Arr(J, 4)
dArr(2, NCT + Ng - 20) = Arr(J, 6)
End If
End If
End If
Next J
Sh.Cells(Dg, "E").Resize(2, 31).Value = dArr()
Erase dArr()
Next Dg
End Sub
Cảm ơn bạn nhiều, mình đã hiểu mình cần học thêm cái gì rồi. ThanksĐể có kết quả, cần chạy 1 macro;
Nó được cải tiến thêm trong khi chờ bạn trả lời, như sau:
PHP:Sub ChuyenCong() Dim Sh As Worksheet, Arr() Dim J As Long, Rws As Long, Dg As Integer, Ng As Integer, NCT As Integer On Error Resume Next Rws = [b10].CurrentRegion.Rows.Count Arr() = [A10].Resize(Rws, 6).Value Set Sh = ThisWorkbook.Worksheets("BCC") NCT = Day(DateSerial(Sh.[a3].Value, Sh.[a4].Value, 0)) MsgBox NCT For Dg = 7 To Sh.[C9999].End(xlUp).Row Step 2 ReDim dArr(1 To 2, 1 To 31) For J = 1 To UBound(Arr()) If Arr(J, 3) = Sh.Cells(Dg, "C").Value Then Ng = Day(Arr(J, 1)) If Arr(J, 4) > 0 Then If Ng > 20 Then dArr(1, Ng - 20) = Arr(J, 4) dArr(2, Ng - 20) = Arr(J, 6) Else dArr(1, NCT - 20 + Ng) = Arr(J, 4) dArr(2, NCT + Ng - 20) = Arr(J, 6) End If End If End If Next J Sh.Cells(Dg, "E").Resize(2, 31).Value = dArr() Erase dArr() Next Dg End Sub
Rất vui được tiếp tục trao đổi cùng bạn!
Cảm ơn bạn nhiều nhiều nhưng còn 1 ca chiều nữa ạ. Mỗi ngày 2 ca la 8 tiêng ạ.Bạn xem file này xài macro xem sao?
Cảm ơn bạn nhiều. Mình sửa lệnh được rồi, bạn cho mình hỏi them 1 cái nha, nếu sheet CCM mình có them ng. qua sheet BCC mình insert them tên nhân viên, thì sửa lệnh nào về vùng do không ạ. Mình k rành marco lắm, bạn giúp mình them tí nhé. mình có add thêm nhân viên nhưng lúc chạy marco thì k ra ahVậy bạn sửa dùm câu lệnhThành lệnh:Mã:dArr(1, Ng) = Arr(J, 11)
Mình chưa thực sự chú í lắm, xin lỗi bạn nha!PHP:dArr(1, Ng) = dArr(1, Ng) + Arr(J, 11) '*'
Không có bất cứ một diễn giải về cái file của bạn.Ad ơi cho mình hỏi với dữ liệu quẹt thẻ như thế này , thì chấm công trên excel như thế nào ? Mình hay chấm bằng phần mềm nay phải chấm công bằng excel nên hơi bí
Ghi Macro thôi màBạn tham khảo đoạn code "chân quê" này xem. Cứ chép dữ liệu vào cột 1 từ A2 rồi nhấn nút
Code nay dựa nhiều vao dữ liệu thưc tế, vậy nên tuỳ cơ mà gia giảm.