Xử lý chấm công (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Excel365

Thành viên tích cực
Tham gia
29/10/10
Bài viết
865
Được thích
127
Giới tính
Nam
Em có bảng dữ liệu chấm công, có 1 số trường hợp hiểu sai giờ vào ra như có vào nhưng không có ra. Hoặc giờ ra của ngày này là thành giờ vào của ngày hôm trước.
Nay nhờ các anh chị xem và giúp (em có diễn tả và ví dụ trong file đính kém)
Trân trọng cảm ơn
http://www.mediafire.com/view/dxhurfj8cracv5b/Cong.xlsx
 
Em có bảng dữ liệu chấm công, có 1 số trường hợp hiểu sai giờ vào ra như có vào nhưng không có ra. Hoặc giờ ra của ngày này là thành giờ vào của ngày hôm trước.
Nay nhờ các anh chị xem và giúp (em có diễn tả và ví dụ trong file đính kém)
Trân trọng cảm ơn
http://www.mediafire.com/view/dxhurfj8cracv5b/Cong.xlsx
Rất mong được sự giúp đỡ của các anh chị
 
Upvote 0
Rất mong được sự giúp đỡ của các anh chị

Tôi chỉ lăn tăn 1 chỗ vào vào 1 không có nhưng ra 1 vào vào 2 lại có(hàng 17). Không biết có phải là do nhầm hay không. Tôi cứ đặt giả sử là bỏ qua trường hợp đó thì bạn xem file đính kèm nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi chỉ lăn tăn 1 chỗ vào vào 1 không có nhưng ra 1 vào vào 2 lại có(hàng 17). Không biết có phải là do nhầm hay không. Tôi cứ đặt giả sử là bỏ qua trường hợp đó thì bạn xem file đính kèm nhé
Cảm ơn bạn.
Đúng là dòng số 17 thiếu giờ vào 1
Như code của bạn thì đã xử lý được trường hợp lấy giờ vào 1 của ngày kế tiếp thành giờ ra của ngày hôm trước rồi.
Nhưng còn trường hợp (chưa đôn giờ lên) của ngày sau theo thứ tự như:
Vào 1: đã lấy thành giờ ra của ngày trước.
Ra 1: thành Vào 1
Vào 2: Thành Ra 1.
 
Upvote 0
Rất mong được sự giúp đỡ của các anh chị
Bạn làm rõ thêm cách xử lý vài trường hợp
Trường hợp "Mã Khánh Phong" dòng 107 sẽ lấy giờ ra như thế nào
Trường hợp "Dương Việt Ái" dòng 67-70, khi dồn thời gian lên sẽ bị mất 1 ngày
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn làm rõ thêm cách xử lý vài trường hợp
Trường hợp "Mã Khánh Phong" dòng 107 sẽ lấy giờ ra như thế nào
Trường hợp "Dương Việt Ái" dòng 67-70, khi dồn thời gian lên sẽ bị mất 1 ngày

Tôi nghĩ nếu như dòng 107 thì sẽ bỏ qua do không có dữ liệu và phải chờ lần cập nhật tiếp theo.
còn dòng 67 có thể do lỗi(?)
 
Upvote 0
Cảm ơn bạn.
Đúng là dòng số 17 thiếu giờ vào 1
Như code của bạn thì đã xử lý được trường hợp lấy giờ vào 1 của ngày kế tiếp thành giờ ra của ngày hôm trước rồi.
Nhưng còn trường hợp (chưa đôn giờ lên) của ngày sau theo thứ tự như:
Vào 1: đã lấy thành giờ ra của ngày trước.
Ra 1: thành Vào 1
Vào 2: Thành Ra 1.

Khái niệm "đôn giờ lên" tôi thấy hơi khó hiểu nên bạn cho ví dụ rõ ràng. ví dụ như ở dòng nào, phải sửa thế nào mới đúng, vì tôi không rõ bạn định làm gì và xử lý ra sao.

Có phải là trường hợp ô đầu trống mà các ô sau không trống thì phải đẩy vào phần trống? Ví dụ hàng 17 thì đẩy ngước về 1 cột?
 
Upvote 0
còn dòng 67 có thể do lỗi(?)

Xem bài 4 của thấy ý đôn giờ là:
"Ví dụ như dòng 67 đến 70
Giờ vào của dòng 68 chuyển lên giờ ra dòng 67
Giờ ra dòng 68 dồn lên thành giờ vào dòng 68
Giờ vào của dòng 69 chuyển lên giờ ra dòng 68
Giờ ra dòng 69 dồn lên thành giờ vào dòng 69
Giờ vào của dòng 70 chuyển lên giờ ra dòng 69"

Có lẽ ý là dịch chuyển thời gian nếu bị lẻ
Nếu đúng như vậy thì dòng 70 sẽ rỗng.

Có lẽ phải chờ chủ thớt giải thích vậy.
---
sheet help trong file đính kèm bài 1 có lẽ cũng có thể hiện ý như vậy
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Public Sub Sap_Xep_Tg()
Dim DL, kq() As String, r As Long, c As Long, i

DL = Sheet1.Range("A5", "R" & Sheet1.Range("A1000000").End(xlUp).Row + 1)
ReDim kq(1 To UBound(DL) - 1, 1 To 12)

For r = 1 To UBound(DL) - 1
i = 0
For c = 7 To 18
If DL(r, c) <> "" Then
i = i + 1
kq(r, i) = DL(r, c)
End If
Next c

If i Mod 2 = 1 And DL(r + 1, 4) = DL(r, 4) Then
kq(r, i + 1) = DL(r + 1, 7)
DL(r + 1, 7) = ""
End If

Next r

With Sheet3
.Range("G5", "R" & .Range("A1000000").End(xlUp).Row).ClearContents
.Range("G5").Resize(UBound(kq), UBound(kq, 2)) = kq
End With
End Sub

- Ngày làm việc cuối cùng của mỗi nhân viên sẽ không xử lý vì không có số liệu tiếp theo
- Vì dồn thời gian nên sẽ có một số ngày sẽ bị rỗng
 

File đính kèm

Upvote 0
PHP:
Public Sub Sap_Xep_Tg()
Dim DL, kq() As String, r As Long, c As Long, i

DL = Sheet1.Range("A5", "R" & Sheet1.Range("A1000000").End(xlUp).Row + 1)
ReDim kq(1 To UBound(DL) - 1, 1 To 12)

For r = 1 To UBound(DL) - 1
i = 0
For c = 7 To 18
If DL(r, c) <> "" Then
i = i + 1
kq(r, i) = DL(r, c)
End If
Next c

If i Mod 2 = 1 And DL(r + 1, 4) = DL(r, 4) Then
kq(r, i + 1) = DL(r + 1, 7)
DL(r + 1, 7) = ""
End If

Next r

With Sheet3
.Range("G5", "R" & .Range("A1000000").End(xlUp).Row).ClearContents
.Range("G5").Resize(UBound(kq), UBound(kq, 2)) = kq
End With
End Sub

- Ngày làm việc cuối cùng của mỗi nhân viên sẽ không xử lý vì không có số liệu tiếp theo
- Vì dồn thời gian nên sẽ có một số ngày sẽ bị rỗng
Cám ơn tất cả anh, chị nhiều.
 
Upvote 0
PHP:
Public Sub Sap_Xep_Tg()
Dim DL, kq() As String, r As Long, c As Long, i

DL = Sheet1.Range("A5", "R" & Sheet1.Range("A1000000").End(xlUp).Row + 1)
ReDim kq(1 To UBound(DL) - 1, 1 To 12)

For r = 1 To UBound(DL) - 1
i = 0
For c = 7 To 18
If DL(r, c) <> "" Then
i = i + 1
kq(r, i) = DL(r, c)
End If
Next c

If i Mod 2 = 1 And DL(r + 1, 4) = DL(r, 4) Then
kq(r, i + 1) = DL(r + 1, 7)
DL(r + 1, 7) = ""
End If

Next r

With Sheet3
.Range("G5", "R" & .Range("A1000000").End(xlUp).Row).ClearContents
.Range("G5").Resize(UBound(kq), UBound(kq, 2)) = kq
End With
End Sub

- Ngày làm việc cuối cùng của mỗi nhân viên sẽ không xử lý vì không có số liệu tiếp theo
- Vì dồn thời gian nên sẽ có một số ngày sẽ bị rỗng


Bạn ơi cho mình hỏi thêm 1 tí.
Khi áp dụng thực tế thì có 1 số người chấm công thiếu (chỉ có vào 1).
Bây giờ em muốn những trường hợp như thế thì sẽ không đôn giờ lên, mà là sẽ bỏ qua không xử lý dòng đó luôn.

Ngày 15, chỉ có vào 1 - Để y nguyên không xử lý ( do chỉ có vào 1, có thể do quẹt thẻ bị lôĩ)
Ngày 16, Vào 1-Ra 1, Vào 2-Ra 2, Vào 3- ??? (Ra 3 = Vào 1 của ngày 17)
Trân trọng ảm ơn

Ps:
Sẽ dồn giờ từ dòng dưới lên dòng trên với điều kiện dòng dưới có số lần quẹt thẻ phải là số lẻ



 
Lần chỉnh sửa cuối:
Upvote 0
Bạn ơi cho mình hỏi thêm 1 tí.
Khi áp dụng thực tế thì có 1 số người chấm công thiếu (chỉ có vào 1).
Bây giờ em muốn những trường hợp như thế thì sẽ không đôn giờ lên, mà là sẽ bỏ qua không xử lý dòng đó luôn.

Ngày 15, chỉ có vào 1 - Để y nguyên không xử lý ( do chỉ có vào 1, có thể do quẹt thẻ bị lôĩ)
Ngày 16, Vào 1-Ra 1, Vào 2-Ra 2, Vào 3- ??? (Ra 3 = Vào 1 của ngày 17)
Trân trọng ảm ơn

Ps:
Sẽ dồn giờ từ dòng dưới lên dòng trên với điều kiện dòng dưới có số lần quẹt thẻ phải là số lẻ

Cái này sửa lại vài dòng code là được nhưng có lẽ bạn kiểm tra trường hợp này trước đã rồi sẽ sửa một lần.
Trường hợp "Nguyễn Vũ" dòng 392 tới 408:
Dòng 392 có 1 là "Vào 1"
Dòng 393 : lẻ
Dòng 394 có 1 là "Vào 1" ( cũng là lẻ )
và một vài dòng dưới cũng vậy

Tức là dòng trên có 1 "Vào", dòng dưới "Lẻ" hoặc dòng trên "Lẻ" dòng dưới có 1 "Vào" thì có dồn thời gian lên hay không.
Nếu dồn lên sẽ có dòng trống mà hình như ý bạn là không được có dòng trống thì phải
 
Upvote 0
Cái này sửa lại vài dòng code là được nhưng có lẽ bạn kiểm tra trường hợp này trước đã rồi sẽ sửa một lần.
Trường hợp "Nguyễn Vũ" dòng 392 tới 408:
Dòng 392 có 1 là "Vào 1"
Dòng 393 : lẻ
Dòng 394 có 1 là "Vào 1" ( cũng là lẻ )
và một vài dòng dưới cũng vậy

Tức là dòng trên có 1 "Vào", dòng dưới "Lẻ" hoặc dòng trên "Lẻ" dòng dưới có 1 "Vào" thì có dồn thời gian lên hay không.
Nếu dồn lên sẽ có dòng trống mà hình như ý bạn là không được có dòng trống thì phải

Gửi bạn file đính kèm với code sửa tạm, bạn kiểm tra trường hợp "Nguyễn Vũ" trên xem sao
 

File đính kèm

Upvote 0
Gửi bạn file đính kèm với code sửa tạm, bạn kiểm tra trường hợp "Nguyễn Vũ" trên xem sao
Cám ơn bạn đã giúp đỡ
Trường hợp Nguyễn Vũ.
Ngày 18 chỉ có vào 1. Thì sẽ giữ nguyên, không lấy vào 1 của ngày 19 dồn lên thành ra 1 của ngày 18.
Khi đó ngày 19 sẽ giữ nguyên

[TABLE="class: grid, width: 800, align: center"]
[TR]
[TD="align: center"]Ngày[/TD]
[TD="align: center"]Vào 1[/TD]
[TD="align: center"]Ra 1[/TD]
[TD="align: center"]Vào 2[/TD]
[TD="align: center"]Ra 2[/TD]
[TD="align: center"]Vào 3[/TD]
[TD="align: center"]Ra 3[/TD]
[TD="align: center"]Vào 4[/TD]
[TD="align: center"]Ra 4[/TD]
[TD="align: center"]Vào 5[/TD]
[TD="align: center"]Ra 5[/TD]
[TD="align: center"]Vào 6[/TD]
[TD="align: center"]Ra 6[/TD]
[/TR]
[TR]
[TD]18/08/2015[/TD]
[TD]07:03[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]19/08/2015[/TD]
[TD]07:13[/TD]
[TD]09:46[/TD]
[TD]10:53[/TD]
[TD]16:24[/TD]
[TD]17:24[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]20/08/2015[/TD]
[TD]07:01[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[/TABLE]

Sẽ chỉnh sữa lại thành như sau:

[TABLE="class: grid, width: 800, align: center"]
[TR]
[/TR]
[TR]
[TD="align: center"]Ngày[/TD]
[TD="align: center"]Vào 1[/TD]
[TD="align: center"]Ra 1[/TD]
[TD="align: center"]Vào 2[/TD]
[TD="align: center"]Ra 2[/TD]
[TD="align: center"]Vào 3[/TD]
[TD="align: center"]Ra 3[/TD]
[TD="align: center"]Vào 4[/TD]
[TD="align: center"]Ra 4[/TD]
[TD="align: center"]Vào 5[/TD]
[TD="align: center"]Ra 5[/TD]
[TD="align: center"]Vào 6[/TD]
[TD="align: center"]Ra 6[/TD]
[/TR]
[TR]
[TD]18/08/2015[/TD]
[TD]07:03[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]19/08/2015[/TD]
[TD]07:13[/TD]
[TD]09:46[/TD]
[TD]10:53[/TD]
[TD]16:24[/TD]
[TD]17:24[/TD]
[TD]07:01[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]20/08/2015[/TD]
[TD]
[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[/TABLE]

Bạn xem giúp mình nhe
 
Upvote 0
Cám ơn bạn đã giúp đỡ
Trường hợp Nguyễn Vũ.
Ngày 18 chỉ có vào 1. Thì sẽ giữ nguyên, không lấy vào 1 của ngày 19 dồn lên thành ra 1 của ngày 18.
Khi đó ngày 19 sẽ giữ nguyên

[TABLE="class: grid, width: 800, align: center"]
[TR]
[TD="align: center"]Ngày[/TD]
[TD="align: center"]Vào 1[/TD]
[TD="align: center"]Ra 1[/TD]
[TD="align: center"]Vào 2[/TD]
[TD="align: center"]Ra 2[/TD]
[TD="align: center"]Vào 3[/TD]
[TD="align: center"]Ra 3[/TD]
[TD="align: center"]Vào 4[/TD]
[TD="align: center"]Ra 4[/TD]
[TD="align: center"]Vào 5[/TD]
[TD="align: center"]Ra 5[/TD]
[TD="align: center"]Vào 6[/TD]
[TD="align: center"]Ra 6[/TD]
[/TR]
[TR]
[TD]18/08/2015[/TD]
[TD]07:03[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]19/08/2015[/TD]
[TD]07:13[/TD]
[TD]09:46[/TD]
[TD]10:53[/TD]
[TD]16:24[/TD]
[TD]17:24[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]20/08/2015[/TD]
[TD]07:01[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[/TABLE]

Sẽ chỉnh sữa lại thành như sau:

[TABLE="class: grid, width: 800, align: center"]
[TR]
[/TR]
[TR]
[TD="align: center"]Ngày[/TD]
[TD="align: center"]Vào 1[/TD]
[TD="align: center"]Ra 1[/TD]
[TD="align: center"]Vào 2[/TD]
[TD="align: center"]Ra 2[/TD]
[TD="align: center"]Vào 3[/TD]
[TD="align: center"]Ra 3[/TD]
[TD="align: center"]Vào 4[/TD]
[TD="align: center"]Ra 4[/TD]
[TD="align: center"]Vào 5[/TD]
[TD="align: center"]Ra 5[/TD]
[TD="align: center"]Vào 6[/TD]
[TD="align: center"]Ra 6[/TD]
[/TR]
[TR]
[TD]18/08/2015[/TD]
[TD]07:03[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]19/08/2015[/TD]
[TD]07:13[/TD]
[TD]09:46[/TD]
[TD]10:53[/TD]
[TD]16:24[/TD]
[TD]17:24[/TD]
[TD]07:01[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[TR]
[TD]20/08/2015[/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[TD][/TD]
[/TR]
[/TABLE]

File đính kèm của bài 13 đã sửa theo ý này.
Bạn kiểm tra kết quả tại sheet3 xem sao.
---
Có lẽ là số liệu sheet1 để nguyên, dán kết quả tính vào sheet3 để còn có cái đối chiếu
 
Upvote 0
File đính kèm của bài 13 đã sửa theo ý này.
Bạn kiểm tra kết quả tại sheet3 xem sao.
---
Có lẽ là số liệu sheet1 để nguyên, dán kết quả tính vào sheet3 để còn có cái đối chiếu
Cám ơn bạn nhiều. Chúc bạn ngày mới tốt lành.
Mình kiểm tra, có gì sẽ nhờ bạn hỗ trợ.
Trân rọng cảm ơn
 
Upvote 0
Cám ơn bạn nhiều. Chúc bạn ngày mới tốt lành.
Mình kiểm tra, có gì sẽ nhờ bạn hỗ trợ.
Trân rọng cảm ơn
À mà cho mình hỏi ngoài lề chú nhe bạn

[TIP][TABLE="width: 638"]
[TR]
[TD]Ngày[/TD]
[TD]Thứ[/TD]
[TD]Mã NV[/TD]
[TD]Tên nhân viên[/TD]
[TD]Vào 1[/TD]
[TD]Ra 1[/TD]
[TD]Vào 2[/TD]
[TD]Ra 2[/TD]
[TD]Vào 3[/TD]
[TD]Ra 3[/TD]
[TD]Vào 4[/TD]
[TD]Ra 4[/TD]
[/TR]
[TR]
[TD="align: right"]10/08/2015[/TD]
[TD]Hai[/TD]
[TD]S1074[/TD]
[TD]Lương Minh Sử[/TD]
[TD]05:55[/TD]
[TD]06:54[/TD]
[TD]07:33[/TD]
[TD]11:23[/TD]
[TD]12:20[/TD]
[TD]17:00[/TD]
[TD]18:03[/TD]
[TD]04:13[/TD]
[/TR]
[/TABLE]
[/TIP]

Làm sao tính được tổng giờ làm việc

Mình cũng đã lập công thức. Ra 1 - Vào 1+ Ra 2-Vào 2 + .... (định dịnh kiểu [h]:mm )
Nhưng không ra kết quả (Kết quả chỉ đúng đối với trường hợp không qua 24h).
 
Upvote 0
À mà cho mình hỏi ngoài lề chú nhe bạn

[TIP][TABLE="width: 638"]
[TR]
[TD]Ngày[/TD]
[TD]Thứ[/TD]
[TD]Mã NV[/TD]
[TD]Tên nhân viên[/TD]
[TD]Vào 1[/TD]
[TD]Ra 1[/TD]
[TD]Vào 2[/TD]
[TD]Ra 2[/TD]
[TD]Vào 3[/TD]
[TD]Ra 3[/TD]
[TD]Vào 4[/TD]
[TD]Ra 4[/TD]
[/TR]
[TR]
[TD="align: right"]10/08/2015[/TD]
[TD]Hai[/TD]
[TD]S1074[/TD]
[TD]Lương Minh Sử[/TD]
[TD]05:55[/TD]
[TD]06:54[/TD]
[TD]07:33[/TD]
[TD]11:23[/TD]
[TD]12:20[/TD]
[TD]17:00[/TD]
[TD]18:03[/TD]
[TD]04:13[/TD]
[/TR]
[/TABLE]
[/TIP]

Làm sao tính được tổng giờ làm việc

Mình cũng đã lập công thức. Ra 1 - Vào 1+ Ra 2-Vào 2 + .... (định dịnh kiểu [h]:mm )
Nhưng không ra kết quả (Kết quả chỉ đúng đối với trường hợp không qua 24h).

Bạn xem thử file đính kèm xem sao
tạo một cột tính giờ dùng hàm hour()
tạo một cột tính phút dùng hàm minute()
dùng hàm time() ghép lại--> format về dạng h:mm

Giờ và phút dùng hàm mảng, kết thúc =ctrl+shift+enter
---
Những dòng có 1, hoặc số liệu lẻ thì thời điểm ra cuối cùng trong ngày theo công thức là 24 giờ.
Có thể dùng hàm if() kết hợp với mod() loại bỏ không tính những dòng này.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn xem thử file đính kèm xem sao
tạo một cột tính giờ dùng hàm hour()
tạo một cột tính phút dùng hàm minute()
dùng hàm time() ghép lại--> format về dạng h:mm

Giờ và phút dùng hàm mảng, kết thúc =ctrl+shift+enter
---
Những dòng có 1, hoặc số liệu lẻ thì thời điểm ra cuối cùng trong ngày theo công thức là 24 giờ.
Có thể dùng hàm if() kết hợp với mod() loại bỏ không tính những dòng này.
Thật sự Trân trọng cám ơn bạn rất nhiều.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom