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:
Ở đâ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 ]
Phần code VBA sử dụng Vlookup được thể hiện như dưới đây:
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.
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:
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à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
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
Bạn cần đăng nhập để thấy link
.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
Và bây giờ kết quả đúng như mong đợi.
Bạn cần đăng nhập để thấy đính kèm