Lấy danh sách nhân viên làm thừa hoặc thiếu đầu công việc

Liên hệ QC

nvh611

Thành viên thường trực
Tham gia
20/5/17
Bài viết
228
Được thích
42
Chào các bạn, các bạn giúp mình bài toán này nhé!
Xin tran thành cảm ơn các bạn!
 

File đính kèm

  • Kiểm tra nhân viên có làm đủ công việc không.xlsb
    9 KB · Đọc: 14
Làm sao máy nó hiểu đâu là tên người & đâu là đầu công việc vậy bạn?
Có lẽ nên cho mỗi người bạn thuê 1 mã, như
NVA00Nguyễn Văn An
NVB00Ngô Văn Bé
NVC00Như Văn Việt Cảnh
NVD00Nhâm Văn Dy
NJE00Nguyễn Em
 
Upvote 0
Làm sao máy nó hiểu đâu là tên người & đâu là đầu công việc vậy bạn?
Có lẽ nên cho mỗi người bạn thuê 1 mã, như
NVA00Nguyễn Văn An
NVB00Ngô Văn Bé
NVC00Như Văn Việt Cảnh
NVD00Nhâm Văn Dy
NJE00Nguyễn Em
Tôi thì không biết về VBa, nhưng có khả năng bạn lấy tên theo bước nhẩy của nó
Ví dụ 5đầu công việc+ với tên =6
Vậy tìm ở bước nhẩy 6 đó bạn @SA_DQ
Đấy là mà nghĩ thuật toán như vậy
Còn thật sự mình không hiểu VBA
Bài đã được tự động gộp:

Làm sao máy nó hiểu đâu là tên người & đâu là đầu công việc vậy bạn?
Có lẽ nên cho mỗi người bạn thuê 1 mã, như
NVA00Nguyễn Văn An
NVB00Ngô Văn Bé
NVC00Như Văn Việt Cảnh
NVD00Nhâm Văn Dy
NJE00Nguyễn Em
À mã số thì có khả năng bạn @SA_DQ lấy theo tên dược không?
 
Lần chỉnh sửa cuối:
Upvote 0
Vấn đề là khi có mã như mình đã đề xuất, thì dữ liệu của bạn sẽ như thế nào:
1 cột xen kẻ giữa mã & các đầu việc
2 Cột mã ghi riêng & Họ & tên người củng đầu việc ghi riêng
3 . . . . .
 
Upvote 0
Vấn đề là khi có mã như mình đã đề xuất, thì dữ liệu của bạn sẽ như thế nào:
1 cột xen kẻ giữa mã & các đầu việc
2 Cột mã ghi riêng & Họ & tên người củng đầu việc ghi riêng
3 . . . . .
Vâng, bạn tùy biến cho mình vấn đề này với nhé
Ví dụ mã là tên người (Thì cho ở cột khác cũng được)
Bạn viết và làm theo thuật toán của bạn @SA_DQ làm sao có kết quả là được
Cảm ơn bạn rất nhiều!
 
Upvote 0
Bạn xem file, mình xài hàm mảng tự tạo
 

File đính kèm

  • UDF.rar
    12 KB · Đọc: 24
Upvote 0
Cảm ơn bạn @SA_DQ rất nhiều, chúc bạn ngày mới nhiều thành công và tràn đầy niềm vui
Bạn @SA_DQ cho tôi hỏi là cái mã số
NVA00
NVB00
NVC00
NVD00
NVF00
NJD00
NDF00
Là bắt buộc có phải không? (Tại vì mình thay bằng tên thì không được)
 
Upvote 0
Nếu muốn thay bằng tên thì thử thêm vài ký số sau tên

Hồng Nhung 95
Hải Yến 00
Văn Toàn 02
Nghĩa Thục 95
 
Upvote 0
Nếu muốn thay bằng tên thì thử thêm vài ký số sau tên

Hồng Nhung 95
Hải Yến 00
Văn Toàn 02
Nghĩa Thục 95
Cảm ơn bạn @SA_DQ tôi hiểu rồi, miễn là phải có chữ số ở đó
Đáp án của bạn rất hây
Nhưng bây giờ có một vấn đề phức tạp là trong danh sách có rất nhiều nhân viên (Các nhân viên có thể là không thường xuyên) mà phải thay mã thì mất thời gian quá.
Bạn nghĩ giúp mình xem còn phương pháp nào không nhé
Bài đã được tự động gộp:

Nếu muốn thay bằng tên thì thử thêm vài ký số sau tên

Hồng Nhung 95
Hải Yến 00
Văn Toàn 02
Nghĩa Thục 95
Nếu không có giải pháp nào thì bạn có thể giúp mình thay đổi hàng loạt danh sách nhân viên gắn thêm số vào cho họ được không?
Danh sách nhân viên là có sẵn.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu không có giải pháp nào thì bạn có thể giúp mình thay đổi hàng loạt danh sách nhân viên gắn thêm số vào cho họ được không?
Danh sách nhân viên là có sẵn.
Nếu thế thì làm vầy:
"HoTen" & "yy"; Ở đây 'yy" là số năm sinh của người đó
& nếu bạn không viết được macro thì đưa DS ý lên, mọi người sẽ viết macro cho bạn, dễ mà!

Nếu không có 'Năm sinh' thì gán chuỗi số thứ tự cũng xong ngay!
 
Upvote 0
Nếu thế thì làm vầy:
"HoTen" & "yy"; Ở đây 'yy" là số năm sinh của người đó
& nếu bạn không viết được macro thì đưa DS ý lên, mọi người sẽ viết macro cho bạn, dễ mà!

Nếu không có 'Năm sinh' thì gán chuỗi số thứ tự cũng xong ngay!
Mình thử code của bạn rồi, rất ok bạn @SA_DQ , chỉ cần thêm 1 số vào đuôi của các nhân viên là đươc
Cái này chỉ cấn dùng hàm để thêm cột phụ vào thì cũng dược. (Nhưng giải pháp thêm cột phụ thì không hay lắm)
Rất cảm ơn bạn đã có giải pháp rất hay, tôi biết đây là bài toán hơi khó và phức tạp.
Nhưng mình muốn hoàn thiện hơn.
 
Upvote 0
Bạn nghĩ giúp mình xem còn phương pháp nào không nhỉ
Ta có thể làm ngược lại là đánh số TT cho các đầu việc, như vầy:

01.Buổi chiều tập đá bóng
02.Buổi tối học bài lại
03.Cắt cỏ
04.Đi học
05.Đưa trâu về
06.Giặt quần áo
07.Là quần áo
08.Lau nhà
09.Nấu cơm
10.Nấu nước
11.Nhặt rau
12.Pha trà
13.Phơi quần áo
14.Rửa bát
15.Rửa chén
16.Tắm rửa cho trâu
17.Thả trâu
18.Thu dọn quần áo
19.Trăn trâu
20.Vo gạo
 
Upvote 0
Cảm ơn bạn
SA_DQ
Mình nghĩ ra thuật toán như sau, bạn xem có được không nhé!
Ta dùng hàm đếm số nhân viên (Ví dụ như mình làm ở cột B)
Sau đó đếm số "0" sau các nhân viên tìm được
Và lấy các số không ở đằng sau số 1, khi gặp số 1 khác thì dừng
Liệu vấn đề này có giải quyết được bàng VBA được không bạn?
 

File đính kèm

  • 5 Việc.xls
    41.5 KB · Đọc: 14
Upvote 0
Đặt vấn đề"
1./ Cột [D] đang chứa danh sách họ & tên nhân viên cơ quan bạn ([D1: D12]
2./ Danh sách họ Tên nhân viên & xen kẻ là các công việc đã làm đang nằm trên cột F (từ F1 trỡ xuống

Nguyễn văn AnHo & Ten#05
Thả trâuNhữ Vũ Việt Công
7​
Cắt cỏNguyễn Vân Dung
3​
Trăn trâu
Đưa trâu về
Tắm rửa cho trâu
Ngô Vũ Văn Bé
Nhặt rau
Nấu nước
Pha trà
Rửa bát
Lau nhà
Nấu cơm
Vo gạo
Nhữ Vũ Việt Công
Rửa chén
Giặt quần áo
Là quần áo
Phơi quần áo
Thu dọn quần áo
Nguyễn Vân Dung
Đi học
Buổi chiều tập đá bóng
Buổi tối học bài lại

Lúc đó bạn cho macro sau chạy sẽ có` kết quả:

PHP:
Sub LietKeKhac05()
Dim Rng As Range, sRng As Range, Cls As Range
Dim W As Integer, Dm As Integer:            Dim Ma As String
ReDim Arr(1 To 9, 1 To 2)

1 [H2].CurrentRegion.Offset(1).Clear
Set Rng = Range([d1], [d1].End(xlDown))
3 For Each Cls In Range([f1], [f1].End(xlDown))
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
5    If sRng Is Nothing Then
        Dm = Dm + 1
7    Else
        If (Dm = 0 And W = 0) Then W = W + 1
9        If Cls.Row <> 1 And Dm <> 5 Then
            Arr(W, 1) = Ma:                     Arr(W, 2) = Dm
11            W = W + 1:
        End If
13        Ma = Cls.Value:                             Dm = 0
    End If
15 Next Cls
If Dm > 0 And Dm <> 5 Then
17    Arr(W, 1) = Ma:                             Arr(W, 2) = Dm
End If
19 If W Then [H2].Resize(W, 2).Value = Arr()
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ở #13 bạn đã đề cập đến thuật toán
Vậy bạn biết thuật toán của bài trên liền kề là như thế nào chưa & có giống như bạn đã đề xuất không?
 
Upvote 0
Ở #13 bạn đã đề cập đến thuật toán
Vậy bạn biết thuật toán của bài trên liền kề là như thế nào chưa & có giống như bạn đã đề xuất không?
Cảm ơn bạn @SA_DQ rất nhiều, đấy là mình nghĩ như vậy, còn các thuật toán đó mình không biết.
Bài đã được tự động gộp:

Đặt vấn đề"
1./ Cột [D] đang chứa danh sách họ & tên nhân viên cơ quan bạn ([D1: D12]
2./ Danh sách họ Tên nhân viên & xen kẻ là các công việc đã làm đang nằm trên cột F (từ F1 trỡ xuống

Nguyễn văn AnHo & Ten#05
Thả trâuNhữ Vũ Việt Công
7​
Cắt cỏNguyễn Vân Dung
3​
Trăn trâu
Đưa trâu về
Tắm rửa cho trâu
Ngô Vũ Văn Bé
Nhặt rau
Nấu nước
Pha trà
Rửa bát
Lau nhà
Nấu cơm
Vo gạo
Nhữ Vũ Việt Công
Rửa chén
Giặt quần áo
Là quần áo
Phơi quần áo
Thu dọn quần áo
Nguyễn Vân Dung
Đi học
Buổi chiều tập đá bóng
Buổi tối học bài lại

Lúc đó bạn cho macro sau chạy sẽ có` kết quả:

PHP:
Sub LietKeKhac05()
Dim Rng As Range, sRng As Range, Cls As Range
Dim W As Integer, Dm As Integer:            Dim Ma As String
ReDim Arr(1 To 9, 1 To 2)

1 [H2].CurrentRegion.Offset(1).Clear
Set Rng = Range([d1], [d1].End(xlDown))
3 For Each Cls In Range([f1], [f1].End(xlDown))
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
5    If sRng Is Nothing Then
        Dm = Dm + 1
7    Else
        If (Dm = 0 And W = 0) Then W = W + 1
9        If Cls.Row <> 1 And Dm <> 5 Then
            Arr(W, 1) = Ma:                     Arr(W, 2) = Dm
11            W = W + 1:
        End If
13        Ma = Cls.Value:                             Dm = 0
    End If
15 Next Cls
If Dm > 0 And Dm <> 5 Then
17    Arr(W, 1) = Ma:                             Arr(W, 2) = Dm
End If
19 If W Then [H2].Resize(W, 2).Value = Arr()
End Sub
Xin trân thành cảm ơn bạn @SA_DQ rất nhiều và nhiều.
Bài toán đã được giải quyết xong.
Chúc bạn luôn trẻ khỏe và hồn nhiêu yêu đời
Vạn sự thành công, may mắn.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom