Vlookup meerdere voorwaarden met behulp van VBA
Beschouw de volgende gegevenstabel:
De standaard Vlookup-functie binnen Excel heeft het volgende formaat:
VERT.ZOEKEN(“”Mark”, B6:G12”,2,FALSE)
Wat "Brown" zal retourneren.
Maar hoe zit het als we 2 of meer voorwaarden willen opzoeken, bijvoorbeeld de voornaam, achternaam en de leeftijd in de bovenstaande tabel? Met de volgende UDF kunnen we dit doen:
123456789101112131415161718192021222324252627282930313233343536373839 | Functie ThreeParameterVlookup(Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant'Verklaar variabelen'Dim CellDim Current_Rij als geheel getalDim No_Of_Rows_in_Range als geheel getalDim No_of_Cols_in_Range als geheel getalDim Matching_Rij als geheel getal'antwoord standaard op n.v.t. instellen'ThreeParameterVlookup = CVErr(xlErrNA)Matching_Rij = 0Huidige_Rij = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Controleer of Col groter is dan het aantal kolommen in het bereik'Als (Kol > Geen_van_Kollen_in_Bereik) DanThreeParameterVlookup = CVErr(xlErrRef)Stop alsAls (Kol <= No_of_Cols_in_Range) DanDoenAls ((Data_Range.Cells(Current_Rij, 1).Waarde = Parameter1) En _(Data_Range.Cells(Current_Rij, 2).Waarde = Parameter2) En _(Data_Range.Cells(Current_Rij, 3)). Waarde = Parameter3)) DanMatching_Row = Huidige_RijStop alsHuidige_Rij = Huidige_Rij + 1Loop tot ((Current_Row = No_Of_Rows_in_Range) Of (Matching_Rij 0))Als Matching_Row 0 DanThreeParameterVlookup = Data_Range.Cells(Matching_Row, Col)Stop alsStop alsFunctie beëindigen |
Het heeft de volgende syntaxis:
ThreeParameterVlookup(Data_Range, Col, Parameter1, Parameter2, Parameter3)
Waar:
• Data_Range is het bereik van de gegevens
• Col is een geheel getal voor de vereiste kolom
• Parameter1, Parameter2 en Parameter3 zijn respectievelijk de waarden uit de eerste drie kolommen
Zodat:
=ThreeParameterVlookup(B6:G12,6,"Mark","Brown",7) retourneert "Tolworth" omdat dit een overeenkomst is met "Mark", "Brown" en 7 en een verwijzing naar de 6e kolom
Merk op dat deze functie ook werkt met (dynamische) benoemde bereiken:
=ThreeParameterVlookup(named_range,6,"Adrian","White",7) zal "Chessington" retourneren waar we het genoemde bereik "Named_Range" hebben ingesteld.
Als Excel geen overeenkomst kan vinden, wordt standaard "N.v.t." geretourneerd. In feite neemt de functie in het begin een waarde van n.v.t. aan en verandert dan alleen wanneer een exacte overeenkomst wordt gevonden.
Ook als de waarde van Col het aantal kolommen overschrijdt, treedt er een referentiefout op.
Om het .XLSM-bestand voor deze tutorial te downloaden, klik hier