Condições múltiplas do Vlookup usando VBA
Considere a seguinte tabela de dados:
A função Vlookup padrão no Excel tem o seguinte formato:
PROCV (“” Marca ”, B6: G12”, 2, FALSO)
Que retornará “Brown”.
No entanto, se quiséssemos pesquisar 2 ou mais condições, por exemplo, o nome, o sobrenome e a idade na tabela acima? A seguinte UDF nos permite fazer isso:
123456789101112131415161718192021222324252627282930313233343536373839 | Função ThreeParameterVlookup (Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant'Declarar VariáveisDim CellDim Current_Row As IntegerDim No_Of_Rows_in_Range As IntegerDim No_of_Cols_in_Range As IntegerDim Matching_Row As Integer'definir a resposta para N / A por padrãoThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Verifique se Col é maior que o número de colunas no intervaloIf (Col> No_of_Cols_in_Range) ThenThreeParameterVlookup = CVErr (xlErrRef)Fim seIf (Col <= No_of_Cols_in_Range) ThenFazerIf ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) And _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) E _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) EntãoMatching_Row = Current_RowFim seCurrent_Row = Current_Row + 1Loop até ((Current_Row = No_Of_Rows_in_Range) Ou (Matching_Row 0))Se Matching_Row 0 ThenThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Fim seFim seFunção Final |
Possui a seguinte sintaxe:
ThreeParameterVlookup (Data_Range, Col, Parameter1, Parameter2, Parameter3)
Onde:
• Data_Range é o intervalo dos dados
• Col é um número inteiro para a coluna necessária
• Parâmetro1, Parâmetro2 e Parâmetro3 são os valores das três primeiras colunas, respectivamente
De modo a:
= ThreeParameterVlookup (B6: G12,6, ”Mark”, ”Brown”, 7) retornará ”Tolworth”, pois esta é uma correspondência em “Mark”, “Brown” e 7 e uma referência à 6ª coluna
Observe que esta função também funcionará com intervalos nomeados (dinâmicos):
= ThreeParameterVlookup (named_range, 6, ”Adrian”, ”White”, 7) retornará “Chessington” onde configuramos o intervalo nomeado “Named_Range”.
Se o Excel não conseguir localizar uma correspondência, "N / A" é retornado por padrão. Na verdade, a função assume um valor de N / A no início e só muda quando encontra uma correspondência exata.
Além disso, se o valor de Col exceder o número de colunas, ocorrerá um erro de referência.
Para baixar o arquivo .XLSM para este tutorial, clique aqui