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