Vlookup Nhiều tiêu chí với VBA UDF - Ví dụ về mã VBA

Vlookup Nhiều Điều kiện Sử dụng VBA

Hãy xem xét bảng dữ liệu sau:

Hàm Vlookup tiêu chuẩn trong Excel có định dạng sau:

VLOOKUP (“" Mark ", B6: G12", 2, FALSE)

Cái nào sẽ trả về "Brown".

Tuy nhiên, nếu chúng ta muốn tra cứu trên 2 hoặc nhiều điều kiện, ví dụ: họ, tên và tuổi trong bảng trên thì sao? UDF sau đây cho phép chúng tôi thực hiện việc này:

123456789101112131415161718192021222324252627282930313233343536373839 Hàm ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 as Variant, Parameter2 as Variant, Parameter3 as Variant) As Variant'Khai báo các biếnLàm mờ ôDim Current_Row as IntegerDim No_Of_Rows_in_Range As IntegerDim No_of_Cols_in_Range dưới dạng số nguyênDim Matching_Row As Integer'đặt câu trả lời thành N / A theo mặc địnhThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Kiểm tra xem Col có lớn hơn số cột trong phạm vi khôngIf (Col> No_of_Cols_in_Range) ThìThreeParameterVlookup = CVErr (xlErrRef)Kết thúc nếuNếu (Col <= No_of_Cols_in_Range) ThìLàmIf ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) Và _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) Và _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) Sau đóMatching_Row = Current_RowKết thúc nếuCurrent_Row = Current_Row + 1Loop Until ((Current_Row = No_Of_Rows_in_Range) Hoặc (Matching_Row 0))If Matching_Row 0 thenThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Kết thúc nếuKết thúc nếuChức năng kết thúc

Nó có cú pháp sau:

ThreeParameterVlookup (Data_Range, Col, Parameter1, Parameter2, Parameter3)

Ở đâu:
• Data_Range là phạm vi của dữ liệu
• Col là một số nguyên cho cột bắt buộc
• Tham số1, Tham số2 và Tham số3 lần lượt là các giá trị từ ba cột đầu tiên

Vậy nên:

= ThreeParameterVlookup (B6: G12,6, "Mark", "Brown", 7) sẽ trả về "Tolworth" vì đây là kết quả khớp trên "Mark", "Brown" và 7 và tham chiếu đến cột thứ 6

Lưu ý rằng hàm này cũng sẽ hoạt động với các dải ô được đặt tên (động):

= ThreeParameterVlookup (names_range, 6, ”Adrian”, “White”, 7) sẽ trả về “Chessington” nơi chúng tôi đã thiết lập phạm vi được đặt tên là “Named_Range”.

Nếu Excel không thể tìm thấy kết quả phù hợp thì "N / A" được trả về theo mặc định. Trên thực tế, hàm giả định một giá trị là N / A ngay từ đầu và sau đó chỉ thay đổi khi nó tìm thấy một kết quả khớp chính xác.

Ngoài ra, nếu giá trị của Col vượt quá số cột thì sẽ xảy ra lỗi Tham chiếu.

Để tải xuống tệp .XLSM cho hướng dẫn này, hãy nhấp vào đây

wave wave wave wave wave