Hàm VLOOKUP trong VBA

  • Thread starter Thread starter dat_viet
  • Ngày gửi Ngày gửi
Liên hệ QC

dat_viet

Thành viên mới
Tham gia
2/11/09
Bài viết
5
Được thích
1
'Input documents name in inT
Mã:
Sub Input_name_inT()
Dim par As Integer
Dim tem As String
Dim name As String

    Sheets("inT").Select
    If ActiveSheet.AutoFilterMode = True Then
        Selection.AutoFilter
    End If
    If ActiveSheet.FilterMode = True Then
        ActiveSheet.ShowAllData
    End If
    Range("D6").Select
    Do Until Selection.Value = ""
        If Selection.Offset(0, 12).Value = "" And Selection.Offset(0, 11).Value = "" And Selection.Offset(0, 10).Value = "" Then
            tem = "8455001-" & Selection.Value
[B]            name = Application.WorksheetFunction.VLookup(tem, Range(Sheets("CMDR"), "B1:C500"), 2, False)[/B]
            Selection.Offset(0, 5).Value = name
            If Selection.Offset(0, 5).Value <> "-" Then
                Selection.Offset(0, 12).Value = "FL"
            Else: Selection.Offset(0, 11).Value = "EL"
            End If
        End If
        Selection.Offset(1, 0).Select
    Loop
End Sub

Trên đây là đoạn code của em, các bác xem giúp dòng n đậm bị sai chỗ nào.
Ý đồ của em là tìm tên của tài liệu phát hành trong sheet inT, dựa trên đối chiếu đánh số của tài liệu đó các tài liệu đã có sẳn tại một sheet khác (CMDR). Hàm em xử dụng trong excel là : =VLOOKUP("8455001-"&D6;FEED!B1:C500;2;FALSE). Chạy đc, nhưng giờ em muốn chuyển qua VBA cho tiện.
 
Chỉnh sửa lần cuối bởi điều hành viên:
name = Application.WorksheetFunction.VLookup(tem, Range(Sheets("CMDR"), "B1:C500"), 2, False)

1. Không nên đặt tên biến bằng 1 từ khoá như "name"
2. thay Range(Sheets("CMDR"), "B1:C500") bằng

Sheets("CMDR").Range("B1:C500")

Câu lệnh trở thành:

PHP:
Name1 = Application.WorksheetFunction.VLookup(tem, Sheets("CMDR").Range("B1:C500"), 2, False)

Không có dữ liệu mẫu nên không test được, bạn test thử.
 
Lần chỉnh sửa cuối:
Upvote 0
Hi cảm ơn bạn đã giải đáp thắc mắc mình. Mình đã sửa lại và it works :D

Mình hỏi tí về định nghĩa một range trong VBA :
par = Worksheets("Input").Range("B3") + 4
Set tabfeed = Worksheets("FEED").Range("B3:C-par")

Nguyên gốc par là một biến integer trong c trình. Mình muốn tạo một bảng tabfeed trích ra từ sheet FEED, từ ô B3 đến C-par

Một lần nữa cảm ơn bạn đã giúp mình.
 
Upvote 0
PHP:
Set tabfeed = Worksheets("FEED").Range("B3:C" & par)
 
Upvote 0
Một dạng hàm VLOOKUP được dùng trong VBA:
Mã:
Function ReturnInfo(wsName As String, ColToFind As Long, sFindValue As String, ColGetText As Integer) As String
    'Return the text at ColGetText with the sName at the first column
    Dim rFound As Range
    ' Return:
    ' error         If error occur
    ' vbNullStrign  If can not find
    ' Value         If can find the value

    On Error GoTo ErrorHandler

    Set rFound = Sheets(wsName).Columns(ColToFind).Find(sFindValue, lookat:=xlWhole)
    If rFound Is Nothing Then
        ReturnInfo = vbNullString
    Else
        ReturnInfo = rFound.Offset(, ColGetText).Value
    End If


ErrorExit:

    Exit Function

ErrorHandler:
    ReturnInfo = "error"
    Resume ErrorExit
End Function

Lê Văn Duyệt
 
Upvote 0
Một dạng hàm VLOOKUP được dùng trong VBA:
Mã:
Function ReturnInfo(wsName As String, ColToFind As Long, sFindValue As String, ColGetText As Integer) As String
    'Return the text at ColGetText with the sName at the first column
    Dim rFound As Range
    ' Return:
    ' error         If error occur
    ' vbNullStrign  If can not find
    ' Value         If can find the value

    On Error GoTo ErrorHandler

    Set rFound = Sheets(wsName).Columns(ColToFind).Find(sFindValue, lookat:=xlWhole)
    If rFound Is Nothing Then
        ReturnInfo = vbNullString
    Else
        ReturnInfo = rFound.Offset(, ColGetText).Value
    End If


ErrorExit:

    Exit Function

ErrorHandler:
    ReturnInfo = "error"
    Resume ErrorExit
End Function

Lê Văn Duyệt
Để đạt đến mức độ DÒ TÌM KHÔNG CHÍNH XÁC như VLOOKUP thì không thể dùng Find Methoad được đâu Duyệt à! ---> E rằng để viết 1 hàm y chang như VLOOKUP chắc không dể dàng chút nào!
 
Upvote 0
Để đạt đến mức độ DÒ TÌM KHÔNG CHÍNH XÁC như VLOOKUP thì không thể dùng Find Methoad được đâu Duyệt à! ---> E rằng để viết 1 hàm y chang như VLOOKUP chắc không dể dàng chút nào!
Anh nói cụ thể được không? Em dùng hàm này cũng nhiều rồi, nhưng em dò tìm chuổi mà thôi. Thấy kết quả cũng chính xác.

Lê Văn Duyệt
 
Upvote 0
Anh nói cụ thể được không? Em dùng hàm này cũng nhiều rồi, nhưng em dò tìm chuổi mà thôi. Thấy kết quả cũng chính xác.

Lê Văn Duyệt
Dò tìm không chính xác thường áp dụng cho trường hợp bảng dò đã được sort trước
Ví dụ:
=VLOOKUP(Trị dò,$A$1:$B$8,2)
Ở đây, trị dò sẽ được dò trong bảng A1:B8, chỉ cần tìm được giá trị nào trong cột A sao cho nó NHỎ HƠN GẦN NHẤT VỚI TRỊ DÒ thì sẽ chiếu sang cột B và lấy kết quả
Xếp loại học sinh thường dùng kiểu dò này (Điểm thì đâu khi nào trùng chính xác với bảng dò)
Hãy xem file ví dụ đính kèm này ---> Đây chính là kiểu dò tìm không chính xác... Và tôi nghĩ để xây dựng 1 hàm tương tự thế thật chẳng dể dàng gì
 

File đính kèm

Upvote 0
Xin cho em hỏi với 1 giá trị dò tìm xuất hiện nhiều lần thì phải làm cách nào để có thể phân biệt các lần xuất hiện đó để tìm thấy giá trị tương ứng với từng lần xuất hiện nhỉ?
 
Upvote 0
Xin cho em hỏi với 1 giá trị dò tìm xuất hiện nhiều lần thì phải làm cách nào để có thể phân biệt các lần xuất hiện đó để tìm thấy giá trị tương ứng với từng lần xuất hiện nhỉ?
bạn thử với file này nhé
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom