Vlookup flera kriterier med VBA UDF - exempel på VBA -kod

Innehållsförteckning

Vlookup flera villkor med VBA

Tänk på följande datatabell:

Standard Vlookup -funktionen i Excel har följande format:

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

Som kommer att returnera "Brown".

Men vad händer om vi ville slå upp på två eller fler villkor, t.ex. förnamn, efternamn och ålder i tabellen ovan? Följande UDF tillåter oss att göra detta:

123456789101112131415161718192021222324252627282930313233343536373839 Funktion ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) Som Variant'Deklarera variablerDim CellDim Current_Row Som heltalDim No_Of_Rows_in_Range Som heltalDim No_of_Cols_in_Range Som heltalDim Matching_Row som heltal'ställ in svaret på N/A som standardThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Kontrollera om Col är större än antalet kolumner i intervalletOm (Col> No_of_Cols_in_Range) DåThreeParameterVlookup = CVErr (xlErrRef)Avsluta omOm (Col <= No_of_Cols_in_Range) DåDoIf ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) Och _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) Och _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) SedanMatching_Row = Current_RowAvsluta omCurrent_Row = Current_Row + 1Loop Till ((Current_Row = No_Of_Rows_in_Range) Eller (Matching_Row 0))Om Matching_Row 0 DåThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Avsluta omAvsluta omAvsluta funktion

Den har följande syntax:

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

Var:
• Data_Range är dataintervallet
• Col är ett heltal för den kolumn som krävs
• Parameter1, Parameter2 och Parameter3 är värdena från de tre första kolumnerna

Så att:

= ThreeParameterVlookup (B6: G12,6, ”Mark”, ”Brown”, 7) kommer att returnera ”Tolworth” eftersom detta är en matchning på “Mark”, “Brown” och 7 och en referens till sjätte kolumnen

Observera att den här funktionen också fungerar med (dynamiska) namngivna intervall:

= ThreeParameterVlookup (named_range, 6, ”Adrian”, ”White”, 7) kommer att returnera “Chessington” där vi har ställt in det namngivna intervallet “Named_Range”.

Om Excel inte kan hitta en matchning returneras "N/A" som standard. Faktum är att funktionen antar ett värde på N/A i början och sedan bara ändras när den hittar en exakt matchning.

Om värdet på Col överstiger antalet kolumner uppstår ett referensfel.

För att ladda ner .XLSM -filen för den här självstudien, klicka här

wave wave wave wave wave