Xin viết dùng mã vba thay thế cho hàm vlookup

Liên hệ QC
Bạn gởi file cụ thể lên đi, tưởng tượng ra ý bạn muốn thì khó quá.
Vâng, vẫn là file cũ ah!
Bài đã được tự động gộp:

Bạn gởi file cụ thể lên đi, tưởng tượng ra ý bạn muốn thì khó quá.
Ý em là ở Sheet "MA" thứ tự các cột là "mã, tên, đơn vị, đơn giá" khi giá trị tìm kiếm ở sheet "CT" thì thứ tự các cột có thể thay đổi "mã, xx,xx tên, đơn giá, đơn vị..." chẳng hạn. Không theo thứ tự cột thì phải làm thế nào ah?
 

File đính kèm

  • vlookup.xls
    37 KB · Đọc: 12
Lần chỉnh sửa cuối:
Vâng, vẫn là file cũ ah!
Bài đã được tự động gộp:


Ý em là ở Sheet "MA" thứ tự các cột là "mã, tên, đơn vị, đơn giá" khi giá trị tìm kiếm ở sheet "CT" thì thứ tự các cột có thể thay đổi "mã, xx,xx tên, đơn giá, đơn vị..." chẳng hạn. Không theo thứ tự cột thì phải làm thế nào ah?
Thử cái này.
 

File đính kèm

  • vlookup.xls
    35.5 KB · Đọc: 57
Em cảm ơn anh rất nhiều, tuy ở đây có 1 cái lỗi là khi quét giá trị ở cột "MA" của sheet "CT" thì giá trị tìm kiếm không tự xóa theo mà phải xóa từng mã một. Có cách nào khắc phục không ah.
Không hiểu ý của bạn lắm.Nói rõ xem nào.
 
Không hiểu ý của bạn lắm.Nói rõ xem nào.
Quét xóa giá trị ở cột "MA" của sheet "CT" thì các giá trị tìm kiếm không xóa theo, mà chỉ xóa được từng mã một. Anh cứ xóa giá trị ở cột "MA" sẽ thấy ah.
Bài đã được tự động gộp:

Không hiểu ý của bạn lắm.Nói rõ xem nào.
Quét vùng đó và xóa thì giá trị tìm kiếm không tự xóa ah, chỉ xóa từng mã một thì mới được. Và còn 1 cái chưa hoàn thiện nữa nhờ anh giúp em là khi copy mã paste vào cột "MA" thì các giá trị tìm kiếm không nhận được mà chỉ nhập từng mã một mới nhận giá trị tìm kiếm ah. Anh giúp em khắc phục được điểm này nữa thì sẽ hoàn thiện hơn ạ. Em xin chân thành cảm ơn!
 

File đính kèm

  • 1.jpg
    1.jpg
    115.1 KB · Đọc: 22
Lần chỉnh sửa cuối:
Vâng, vẫn là file cũ ah!
Bài đã được tự động gộp:


Ý em là ở Sheet "MA" thứ tự các cột là "mã, tên, đơn vị, đơn giá" khi giá trị tìm kiếm ở sheet "CT" thì thứ tự các cột có thể thay đổi "mã, xx,xx tên, đơn giá, đơn vị..." chẳng hạn. Không theo thứ tự cột thì phải làm thế nào ah?
Bạn xem thử file này.
 

File đính kèm

  • vlookup2.xlsm
    20.2 KB · Đọc: 77
Thật tuyệt, cảm ơn anh rất nhiều.
Em còn một điểm mong các anh giúp em nữa. Đó là Khi em tạo một Spinner như trong file, khi biến chạy tăng thì bảng dữ liệu tự cập nhật. Các anh giúp em một lần nữa, nếu được như vậy em xin chân thành cảm ơn ạ!
 

File đính kèm

  • OK.xlsm
    19.5 KB · Đọc: 22
Thật tuyệt, cảm ơn anh rất nhiều.
Em còn một điểm mong các anh giúp em nữa. Đó là Khi em tạo một Spinner như trong file, khi biến chạy tăng thì bảng dữ liệu tự cập nhật. Các anh giúp em một lần nữa, nếu được như vậy em xin chân thành cảm ơn ạ!
Mong các anh giúp em với ạ? có như vậy mới thay thế được Vlookup khi có dùng công cụ Spinner. Em xin chân thành cảm ơn!
 
Lần chỉnh sửa cuối:
Thật tuyệt, cảm ơn anh rất nhiều.
Em còn một điểm mong các anh giúp em nữa. Đó là Khi em tạo một Spinner như trong file, khi biến chạy tăng thì bảng dữ liệu tự cập nhật. Các anh giúp em một lần nữa, nếu được như vậy em xin chân thành cảm ơn ạ!
Bạn xem.
 

File đính kèm

  • OK.xlsm
    22.3 KB · Đọc: 61
Mã:
Dim i As Long
                For i = 1 To Range("K10000").End(xlUp).Row - 5
                    Range("D" & i + 5).Value = WorksheetFunction.VLookup(Range("K" & i + 5).Value, Sheet7.Range("B3:G400"), 2, 0)
                    Range("E" & i + 5).Value = WorksheetFunction.VLookup(Range("K" & i + 5).Value, Sheet7.Range("B3:G400"), 3, 0)
                    Range("F" & i + 5).Value = WorksheetFunction.VLookup(Range("K" & i + 5).Value, Sheet7.Range("B3:G400"), 4, 0)
                    Range("L" & i + 5).Value = WorksheetFunction.VLookup(Range("K" & i + 5).Value, Sheet7.Range("B3:G400"), 6, 0)
                    Range("O" & i + 5).Value = WorksheetFunction.VLookup(Range("K" & i + 5).Value, Sheet7.Range("B3:G400"), 5, 0)
                    Range("J" & i + 5).Value = WorksheetFunction.VLookup(Range("P" & i + 5).Value, Sheet7.Range("H3:I400"), 2, 0)
                Next
Ai có thể giúp em viết code dùng mảng để thay thế đoạn code này của em với ạ. Code này chạy hơi chậm do phải load lại tất cả các dòng.nếu sau này Data có vài nghìn dòng thì đơ luôn quá. Em mày mò viết, không học cơ bản nên có gì các anh chị thông cảm.

Em muốn là khi ấn nhập dữ liệu hoặc sửa dữ liệu thì các cột D, E, F, L, O, J sẽ tự điền luôn ạ.
Em xin chân thành cám ơn ạ.
 

File đính kèm

  • 23.5.2019 test.xlsm
    1.4 MB · Đọc: 21
Tôi thấy có vẻ nhiều người hơi lạm dụng Dictionary. Dictionary mạnh và không dễ thay thế được trong một vài trường hợp không có nghĩa là nó tốt cho mọi trường hợp. Tỏi nếu nấu với món "này" thì tuyệt nhưng không có nghĩa là nấu món nào cũng cho tỏi. Không phải mổ trâu, lợn, gà, bóc tỏi, gọt táo đều dùng dao mổ trâu. Lợi thì chắc không mà hại thì nhiều.
Sửa một chút code trên thành

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I, Vung, Ws
    Set Ws = Sheets("MA")
    Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 4)
    If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then
        If Target.Count = 1 Then
            For I = 1 To UBound(Vung)
                If Vung(I, 1) = Ucase(Target.Value) Then
                    Target.Offset(, 1) = Vung(I, 2)
                    Target.Offset(, 2) = Vung(I, 3)
                    Target.Offset(, 5) = Vung(I, 4)
                    Exit For
                End If
            Next I
        End If
    End If
End Sub

nếu tôi không lầm thì code tốt hơn. Trong trường hợp xấu nhất thì cũng chỉ phải duyệt (FOR) tất cả các dòng của Vung, còn trong trường hợp tốt nhất thì chỉ duyệt có 1 dòng. Dùng Dictionary như trên luôn phải duyệt tất cả các dòng, rồi với mỗi dòng đó làm "động tác" d.Add ... (thừa)
Nếu số dòng không phải là "vài" mà là "mấy trăm" (mã không phải là A --> Z mà là vd. wxyz) thì chắc chắn code dùng Dictionary như trên sẽ làm nhiều việc hơn, lâu hơn.
MỌI NGƯỜI CHO EM HỎI, EM DÙNG CODE NÀY NHƯNG KHI E THAY MÃ ABCD THÀNH SỐ 1234 THÌ LẠI KHÔNG ĐƯỢC NHỈ?
 

File đính kèm

  • QUAN LY HANG HOA.xlsb
    349.6 KB · Đọc: 7
chào cả nhà, e có file như ở dưới nhờ mọi người sửa lại mã code để khi e sửa dữ liệu nguồn ở sheet11111 thì dữ liệu ở sheet22222 sẽ tự động cập nhật theo giống như hàm vlookup đó. Trong sheet22222 thì cột S dùng để nhập mã tham chiếu, các cột còn lại là kết quả cần hiện. E xin cám ơn!
 

File đính kèm

  • Everyday report.xlsm
    180.1 KB · Đọc: 10
Lần chỉnh sửa cuối:
Xin chào các anh chị ạ
Em xin hỏi câu hỏi như chủ top nhưng sheet MA lại là 1 file khác không cùng trên worksheet này thì làm như thế nào ạ
em muốn dán đường dẫn file MA đó vào ô nào đâý ở sheet CT, để khi thay đổi thì chỉ cần paste đường dẫn mới của MA vào đó là ok ạ
cảm ơn các anh chị
 
1595218677683.png

Nhờ cả nhà giúp đỡ với ah.
Em chạy công thức này trên file của e nó cứ báo Micro name. Vậy nghĩa là sao vậy ah.
1595219359803.png
Em gửi file của e nhờ các bác chỉ dạy. Em ko có hiểu gì về VBA hết nên chỉ biết copy, paste vô thôi ah.
 

File đính kèm

  • 01.06.xlsx
    2.3 MB · Đọc: 6
  • 1595219308633.png
    1595219308633.png
    40 KB · Đọc: 5
Lần chỉnh sửa cuối:
Chào mọi người

Cho em hỏi là cùng 1 đoạn code mà trên máy em lại không chạy được nhưng qua máy khác lại chạy được.

Mọi người chỉ cho em khắc phục lỗi này với ạ. Em cám ơn!
 
Web KT
Back
Top Bottom