Criterii multiple Vlookup cu VBA UDF - Exemple de cod VBA

Vlookup Condiții multiple folosind VBA

Luați în considerare următorul tabel de date:

Funcția standard Vlookup din Excel are următorul format:

VLOOKUP („„ Mark ”, B6: G12”, 2, FALS)

Care va da „Brown”.

Totuși, ce se întâmplă dacă am dori să căutăm 2 sau mai multe condiții, de exemplu, prenumele, prenumele și vârsta din tabelul de mai sus? Următorul UDF ne permite să facem acest lucru:

123456789101112131415161718192021222324252627282930313233343536373839 Funcția ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant„Declarați variabileleDim CellAtenuați rândul curent ca întregDim No_Of_Rows_in_Range Ca întregDim No_of_Cols_in_Range As IngerDim Matching_Row Ca întreg'setați răspunsul la N / A în mod implicitThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Rând_curent = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Verificați dacă Col este mai mare decât numărul de coloane din intervalDacă (Col> No_of_Cols_in_Range) AtunciThreeParameterVlookup = CVErr (xlErrRef)End IfDacă (Col <= No_of_Cols_in_Range) AtunciDoIf ((Data_Range.Cells (Current_Row, 1). Valoare = Parameter1) Și _(Data_Range.Cells (Current_Row, 2). Valoare = Parametru2) Și _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) ApoiMatching_Row = Current_RowEnd IfCurrent_Row = Current_Row + 1Buclați până ((Current_Row = No_Of_Rows_in_Range) Sau (Matching_Row 0))Dacă Matching_Row 0 AtunciThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)End IfEnd IfFuncția de sfârșit

Are următoarea sintaxă:

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

Unde:
• Data_Range este intervalul de date
• Col este un număr întreg pentru coloana necesară
• Parametrul1, Parametrul2 și Parametrul3 sunt valorile din primele trei coloane, respectiv

Astfel încât:

= ThreeParameterVlookup (B6: G12,6, „Mark”, „Brown”, 7) va returna „Tolworth” deoarece acesta este un meci pe „Mark”, „Brown” și 7 și o referință la coloana a 6-a

Rețineți că această funcție va funcționa și cu intervale denumite (dinamice):

= ThreeParameterVlookup (named_range, 6, ”Adrian”, ”White”, 7) va returna „Chessington” unde am configurat intervalul numit „Named_Range”.

Dacă Excel nu poate găsi o potrivire, „N / A” este returnat în mod implicit. De fapt, funcția își asumă o valoare de N / A la început și apoi se modifică numai atunci când găsește o potrivire exactă.

De asemenea, dacă valoarea Col depășește numărul de coloane, atunci apare o eroare de referință.

Pentru a descărca fișierul .XLSM pentru acest tutorial, faceți clic aici

wave wave wave wave wave