Criterios múltiples de Vlookup con VBA UDF - Ejemplos de código VBA

Vlookup Múltiples condiciones usando VBA

Considere la siguiente tabla de datos:

La función estándar de Vlookup dentro de Excel tiene el siguiente formato:

BUSCARV (“” Marca ”, B6: G12”, 2, FALSO)

Que devolverá "Marrón".

Sin embargo, ¿qué pasa si quisiéramos buscar 2 o más condiciones, por ejemplo, el nombre, el apellido y la edad en la tabla anterior? La siguiente UDF nos permite hacer esto:

123456789101112131415161718192021222324252627282930313233343536373839 Función ThreeParameterVlookup (Data_Range como rango, Col como entero, parámetro1 como variante, parámetro2 como variante, parámetro3 como variante) como variante'Declarar variablesDim CellAtenuar Current_Row como enteroDim No_Of_Rows_in_Range como enteroDim No_of_Cols_in_Range como enteroDim Matching_Row como entero'establecer respuesta a N / A por defectoThreeParameterVlookup = CVErr (xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Compruebe si Col es mayor que el número de columnas en el rangoSi (Col> No_of_Cols_in_Range) EntoncesThreeParameterVlookup = CVErr (xlErrRef)Terminara siSi (Col <= No_of_Cols_in_Range) EntoncesHacerIf ((Data_Range.Cells (Current_Row, 1) .Value = Parameter1) And _(Data_Range.Cells (Current_Row, 2) .Value = Parameter2) Y _(Data_Range.Cells (Current_Row, 3) .Value = Parameter3)) EntoncesMatching_Row = Current_RowTerminara siCurrent_Row = Current_Row + 1Bucle hasta ((Current_Row = No_Of_Rows_in_Range) o (Matching_Row 0))Si Matching_Row 0 entoncesThreeParameterVlookup = Data_Range.Cells (Matching_Row, Col)Terminara siTerminara siFunción final

Tiene la siguiente sintaxis:

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

Dónde:
• Data_Range es el rango de los datos
• Col es un número entero para la columna requerida
• Parameter1, Parameter2 y Parameter3 son los valores de las tres primeras columnas respectivamente

Así que eso:

= ThreeParameterVlookup (B6: G12,6, "Mark", "Brown", 7) devolverá "Tolworth", ya que esto es una coincidencia en "Mark", "Brown" y 7 y una referencia a la sexta columna

Tenga en cuenta que esta función también funcionará con rangos con nombre (dinámicos) también:

= ThreeParameterVlookup (named_range, 6, "Adrian", "White", 7) devolverá "Chessington" donde hemos configurado el rango con nombre "Named_Range".

Si Excel no puede encontrar una coincidencia, se devuelve "N / A" de forma predeterminada. De hecho, la función asume un valor de N / A al principio y luego solo cambia cuando encuentra una coincidencia exacta.

Además, si el valor de Col excede el número de columnas, se produce un error de referencia.

Para descargar el archivo .XLSM para este tutorial, haga clic aquí

wave wave wave wave wave