Vlookup flere kriterier med VBA UDF - eksempler på VBA -kode

Vlookup flere betingelser ved hjælp af VBA

Overvej følgende datatabel:

Standard Vlookup -funktionen i Excel har følgende format:

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

Som vil returnere "Brown".

Men hvad med, hvis vi ville slå op på 2 eller flere betingelser, f.eks. Fornavn, efternavn og alder i ovenstående tabel? Følgende UDF giver os mulighed for at gøre dette:

123456789101112131415161718192021222324252627282930313233343536373839 Funktion ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) Som Variant'Deklarér variablerDim CellDim Current_Row som heltalDim No_Of_Rows_in_Range som heltalDim No_of_Cols_in_Range som heltalDim Matching_Row som heltal'indstil svaret til 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'Kontroller, om Col er større end antallet af kolonner i områdetHvis (Col> No_of_Cols_in_Range) SåThreeParameterVlookup = CVErr (xlErrRef)Afslut HvisHvis (Col <= No_of_Cols_in_Range) SåGørHvis ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) Og _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) Og _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) DerefterMatching_Row = Current_RowAfslut HvisCurrent_Row = Current_Row + 1Loop indtil ((Current_Row = No_Of_Rows_in_Range) Eller (Matching_Row 0))Hvis Matching_Row 0 SåThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Afslut HvisAfslut HvisAfslut funktion

Den har følgende syntaks:

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

Hvor:
• Data_Range er dataområdet
• Col er et helt tal for den nødvendige kolonne
• Parameter1, Parameter2 og Parameter3 er værdierne fra henholdsvis de tre første kolonner

Så det:

= ThreeParameterVlookup (B6: G12,6, ”Mark”, ”Brown”, 7) returnerer ”Tolworth”, da dette er en match på “Mark”, “Brown” og 7 og en henvisning til 6. kolonne

Bemærk, at denne funktion også også fungerer med (dynamiske) navngivne områder:

= ThreeParameterVlookup (named_range, 6, ”Adrian”, ”White”, 7) returnerer “Chessington”, hvor vi har konfigureret det navngivne område “Named_Range”.

Hvis Excel ikke kan finde et match, returneres "N/A" som standard. Faktisk antager funktionen en værdi på N/A i begyndelsen og ændres derefter kun, når den finder et nøjagtigt match.

Også hvis værdien af ​​Col overstiger antallet af kolonner, opstår der en referencefejl.

Klik her for at downloade .XLSM -filen til denne vejledning

wave wave wave wave wave