Viacnásobné kritériá Vlookup s VBA UDF - Príklady kódu VBA

Vlookup Viac podmienok pomocou VBA

Zvážte nasledujúcu tabuľku údajov:

Štandardná funkcia Vlookup v programe Excel má nasledujúci formát:

VLOOKUP („“ Značka ”, B6: G12“, 2, NEPRAVDA)

Čo vráti „Brown“.

Čo však keby sme chceli vyhľadať 2 alebo viac podmienok, ako napríklad meno, priezvisko a vek v tabuľke vyššie? Nasledujúci UDF nám to umožňuje:

123456789101112131415161718192021222324252627282930313233343536373839 Funkcia ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant„Vyhláste premennéDim CellDim Current_Row As IntegerDim No_Of_Rows_in_Range as IntegerDim No_of_Cols_in_Range as IntegerDim Matching_Row As Integer'predvolene nastaviť odpoveď na N/AThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count„Skontrolujte, či je hodnota Col väčšia ako počet stĺpcov v rozsahuAk (Col> No_of_Cols_in_Range) PotomThreeParameterVlookup = CVErr (xlErrRef)Koniec AkIf (Col <= No_of_Cols_in_Range) ThenUrobIf ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) And _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) And _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) PotomMatching_Row = Current_RowKoniec AkCurrent_Row = Current_Row + 1Slučka do ((Current_Row = No_Of_Rows_in_Range) Alebo (Matching_Row 0))Ak Matching_Row 0 PotomThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Koniec AkKoniec AkKoncová funkcia

Má nasledujúcu syntax:

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

Kde:
• Data_Range je rozsah údajov
• Col je celé číslo pre požadovaný stĺpec
• Parameter1, Parameter2 a Parameter3 sú hodnoty z prvých troch stĺpcov

Takže:

= ThreeParameterVlookup (B6: G12,6, „Mark“, „Brown“, 7) vráti „Tolworth“, pretože ide o zhodu v položkách „Mark“, „Brown“ a 7 a odkaz na 6. stĺpec

Táto funkcia bude fungovať aj s (dynamickými) pomenovanými rozsahmi:

= ThreeParameterVlookup (pomenovaný_rozsah, 6, „Adrian“, „biely“, 7) vráti „Chessington“, kde sme nastavili pomenovaný rozsah „Named_Range“.

Ak Excel nemôže nájsť zhodu, predvolene sa vráti „N/A“. V skutočnosti táto funkcia na začiatku predpokladá hodnotu N/A a potom sa zmení iba vtedy, ak nájde presnú zhodu.

Tiež ak hodnota Col prekročí počet stĺpcov, dôjde k referenčnej chybe.

Kliknite sem, ak si chcete stiahnuť súbor .XLSM pre tento návod

wave wave wave wave wave