Tìm kiếm bằng Macro hay VLOOKUP

Liên hệ QC

cuongetb

Thành viên chính thức
Tham gia
3/6/08
Bài viết
87
Được thích
37
Nghề nghiệp
HR Talent Development
Dear các anh chị,

Em có 1 bài tập xin nhờ các anh chị giải giúp

Em muốn tìm thông tin từ Sheet Điền Thông tin từ tất cả các Sheet đằng sau.

-Tìm Tên ở Sheet Điền thông tin tại các Sheet đằng sau
- Nếu tìm thấy Tên ở các sheet đằng sau thì cần lấy dữ liệu Ngày vào rồi paste vào cột Ghi chú Sheet Điền Thông tin

Em xin nhờ các anh chị giúp đỡ

Thanks
 

File đính kèm

Cảm nhận ban đầu - Các bảng dữ liệu trình bày luộm thuộm -> Thấy hơn nản. Sẽ cố gắng xem tiếp.
 
Upvote 0
Macro của bạn đây, xin mời

PHP:
Option Explicit

Sub NgayVao()
 Dim Sh As Worksheet, Rng As Range, sRng As Range, Cls As Range
 Dim ShName As String
 
 Sheet1.Select:               ShName = Sheet1.Name
 For Each Cls In Range([B4], [B65500].End(xlUp))
   For Each Sh In Worksheets
      If Sh.Name <> ShName And Sh.Name <> "MaNV" Then
         Set Rng = Sh.Range(Sh.[B1], Sh.[B65500].End(xlUp))
         Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
         If Not sRng Is Nothing Then
            If Sh.Cells(sRng.Row, "AK").Value <> "" Then
               Cls.Offset(, 3).Value = Sh.Cells(sRng.Row, "AK").Value
               Cls.Offset(, 4).Value = Sh.Name
            Else
               Cls.Offset(, 4).Interior.ColorIndex = 38
            End If
         End If
      End If
   Next Sh
 Next Cls
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em cảm ơn trước, quả thật là chua có forrm chuẩn, nên em đang phải làm lại, bởi vì là việc gấp cần giải quyết trước nên em mới phải như vậy
Em xin cảm ơn đã nhé, em chạy thử xem thế nào
 
Upvote 0
Bác ơi,

Em thử rồi, nó chạy không hết bác ạ, với lại em có 1 file khác cũng như thế thì có phải sửa thêm gì không, Tức là các Sheet sau của em nhiều hơn ý
Bác giúp em nhé
 
Upvote 0
Những anh chàng nào không hết vậy, bạn cụ thể thêm nha.

Bác ơi, nó chạy không hết bác ạ, với lại em có 1 file khác cũng như thế thì có phải sửa thêm gì không, Tức là các Sheet sau của em nhiều hơn ý
Bác giúp em nhé

Các trang tính nhiều hơn cũng không là vấn đề gì cả;

Khuyên bạn tên CNV cần có mã để tránh những sai sót không đáng có, như:
(*) Sai chính tả;
(*) Trùng tên Ở các nơi khác nhau
(*) Tăng đáng nể tốc độ tìm kiếm, nhất là có nhiều trang tính trong workbook.

Chờ tin bạn về việc 'nó chạy không hết' đó nha.
 
Upvote 0
Bác làm ơn mở lại file giúp em nhé

Ví dụ anh Lưu Chí Công ở file cần điền thông tin là có tên và ở Chợ Lớn, trong Sheet Chợ Lớn có thông tin ngày vào, nhưng nó vẫn chưa chạy và paste được ở Sheet Điền thông tin
Mong bác chỉ giáo
 
Upvote 0
Bác làm ơn mở lại file giúp em nhé

Ví dụ anh Lưu Chí Công ở file cần điền thông tin là có tên và ở Chợ Lớn, trong Sheet Chợ Lớn có thông tin ngày vào, nhưng nó vẫn chưa chạy và paste được ở Sheet Điền thông tin
Mong bác chỉ giáo

Vì bản thân tên anh chàng này tại 'ChoLon' dài hơn tại 'Điền Thông tin' 1 ký tự; Đó là 1 khoảng trắng.
Chuyện này mình đã cảnh báo đến bạn theo bài trên.
Bạn tìm tiếp đi nha.
 
Upvote 0
Cảm ơn bác, em sẽ tiếp tục kiểm tra nhé
Chúc bác một ngày mới với nhiều niềm vui
 
Upvote 0
Nếu là tìm kiếm rồi trả về giá trị, bạn nên dùng hàm VLOOKUP tốc độ đảm bảo nhanh nhất. VBA dùng phải có kiểu thì mới nhanh hơn trong trường hợp này.
 
Upvote 0
Cái này của em, tìm xong rồi quay về Paste lại vào sheet yêu cầu anh ạ. Anh có thể giúp em hàm VLOOKUP được không, khoản này em không khá lắm
 
Upvote 0
Mình tham gia code dùng chính các hàm của Worksheet để cải thiện tốc độ.
Bạn nên đặt mã nhân viên chứ dò tìm bằng tên tiềm ẩn nguy hiểm trùng tên, sai chính tả dẫn đến thông tin sai lệch. Trong danh sách của bạn có rất nhiều tên không tìm thấy thể hiện việc gõ chính tả không đồng nhất (Nếu copy và Paste để tạo Danh sách thì OK ngay, chạy thật trơn tru).

Mã:
Public Sub dien()
Dim ch, i
Dim sh As Worksheet
Sheet1.[F4:F65536].ClearContents
For i = 4 To Sheet1.[b56536].End(xlUp).Row
ch = Sheet1.Cells(i, 2)
For Each sh In Sheets
If sh.CodeName <> "Sheet1" Then
If WorksheetFunction.CountIf(sh.[b12:b1000], ch) > 0 Then
Sheet1.Cells(i, 6) = WorksheetFunction.VLookup(ch, sh.[b1:an1000], 36, 0)
Exit For
End If
End If
Next
Next
End Sub
Lưu ý: Code của mình nếu thông tin đầy đủ và chuẩn xác chạy nhanh đáng kể vì khi đã tìm thấy thì ngừng và tìm tên khác. Nếu không tìm thấy thì có bao nhiêu Sheet là nó phải tìm hết mới thôi
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các bác, đúng là hiện nay hệ thống đang được cài đặt và chưa có mã số nhân viên nên mới khó thế đấy bác ạ
Em cảm ơn nhé
 
Upvote 0
Web KT

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

Back
Top Bottom