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

Vlookup flere forhold ved hjelp av VBA

Vurder følgende datatabell:

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

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

Som vil returnere "Brown".

Men hva om vi ville slå opp på 2 eller flere forhold, f.eks. Fornavn, etternavn og alder i tabellen ovenfor? Følgende UDF lar oss gjøre dette:

123456789101112131415161718192021222324252627282930313233343536373839 Funksjon ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant'Erklær variablerDim CellDim Current_Row As IntegerDim No_Of_Rows_in_Range As IntegerDim No_of_Cols_in_Range As IntegerDim Matching_Row As Integer'angi 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'Sjekk om Col er større enn antall kolonner i områdetIf (Col> No_of_Cols_in_Range) DaThreeParameterVlookup = CVErr (xlErrRef)Slutt omIf (Col <= No_of_Cols_in_Range) DaGjøreIf ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) And _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) Og _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) DeretterMatching_Row = Current_RowSlutt omCurrent_Row = Current_Row + 1Sløyfe til ((Current_Row = No_Of_Rows_in_Range) Eller (Matching_Row 0))Hvis Matching_Row 0 DaThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Slutt omSlutt omSluttfunksjon

Den har følgende syntaks:

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

Hvor:
• Data_Range er dataområdet
• Col er et heltall for den nødvendige kolonnen
• Parameter1, Parameter2 og Parameter3 er verdiene fra henholdsvis de tre første kolonnene

Så det:

= ThreeParameterVlookup (B6: G12,6, ”Mark”, ”Brown”, 7) vil returnere ”Tolworth” ettersom dette er en kamp på “Mark”, “Brown” og 7 og en referanse til sjette kolonne

Vær oppmerksom på at denne funksjonen også vil fungere med (dynamiske) navngitte områder:

= ThreeParameterVlookup (named_range, 6, ”Adrian”, ”White”, 7) returnerer “Chessington” der vi har satt opp det navngitte området “Named_Range”.

Hvis Excel ikke finner en treff, returneres "N/A" som standard. Faktisk antar funksjonen en verdi på N/A i begynnelsen og endres deretter bare når den finner en eksakt samsvar.

Også hvis verdien av Col overstiger antall kolonner, oppstår det en referansefeil.

For å laste ned .XLSM -filen for denne opplæringen, klikk her

wave wave wave wave wave