Vlookup trong VBA

tuhocvba

Administrator
Thành viên BQT
Hôm nay tôi sẽ trình bày Vlookup trong VBA. Tôi cố gắng trình bày dễ hiểu nhất có thể.
Bài viết này, diễn đàn thực hiện theo lời hứa với @songcham .
Trước hết các bạn hãy xem hình ảnh dưới đây:
Bạn cần đăng nhập để thấy hình ảnh


Ở đây tôi xây dựng UserForm gồm có ô Textbox1. Người dùng nhập ký tự cần tìm kiếm vào ô này.
Macro sẽ thực hiện tìm kiếm giá trị này trong vùng tìm kiếm [B2 : D18 ]
Mã:
Private Sub CommandButton1_Click()
    Dim kq As String
    Dim x As String
    'Gan tri tri cua Textbox1 tren UserForm cho x
    x = UserForm1.TextBox1.Value
    kq = timkiem(x)
    MsgBox kq
End Sub
Phần code VBA sử dụng Vlookup được thể hiện như dưới đây:
Mã:
Function timkiem(ByVal x As String) As String
    Dim r As Range
    
    'thiet dinh vung tim kiem
    Set r = ThisWorkbook.Sheets(1).Range(Cells(2, 2), Cells(18, 4))
    On Error GoTo ErrHdl
    With ActiveSheet
        'TIm kiem trong vung tim kiem data, ket qua tra ve lay o cot C
        timkiem = _
            Application.WorksheetFunction.VLookup(x, r, 2, False)
    End With
    
    Exit Function
ErrHdl: 'Nếu lỗi xảy ra do hàm Vlookup không tìm kiếm thấy, thì nhảy tới đây
    timkiem = "Khong tim thay"
End Function
File các bạn có thể download ở đây: .

Bây giờ tôi di chuyển lại vị trí cột và thực hiện tìm kiếm.
Bạn cần đăng nhập để thấy đính kèm

Kết quả thật bất ngờ, nó không tìm thấy nữa. Lý do là 2 ghi ở trên cột B của excel được macro hiểu là số.
Còn 2 ghi trong ô textbox được VBA hiểu là string. Do đó, trong trường hợp tìm số, thì code trên phải sửa lại hàm tìm kiếm:
Mã:
Function timkiem(ByVal x As String) As String
    Dim r As Range
    Dim y As Long 'sua lai code de tim kiem so
    'thiet dinh vung tim kiem
    Set r = ThisWorkbook.Sheets(1).Range(Cells(2, 2), Cells(18, 4))
    y = Val(x) 'sua lai code de tim kiem so
    On Error GoTo ErrHdl
    With ActiveSheet
        'TIm kiem trong vung tim kiem data, ket qua tra ve lay o cot C
        timkiem = _
            Application.WorksheetFunction.VLookup(y, r, 2, False) 'tim kiem y, chu y khong phai la tim kiem x
            
        
    End With
    
    Exit Function
ErrHdl:
    timkiem = "Khong tim thay"
End Function
Hãy chú ý các dòng code 3,6,11 là các vị trí tôi đã sửa để thực hiện tìm kiếm được với số.
Và bây giờ kết quả đúng như mong đợi.
Bạn cần đăng nhập để thấy đính kèm
 
Top