VBA INDEX MATCH Basado en Múltiples Criterios en Excel (3 Métodos)

  • Compartir Este
Hugh West

Cuando tenemos una gran cantidad de datos, a veces es difícil extraer cualquier dato específico del conjunto de datos. Junto con la función de Excel ÍNDICE y MATCH pueden recuperar cualquier tipo de dato, incluso en un conjunto de datos enorme. Implementación de las funciones VBA es el método más eficaz, rápido y seguro para ejecutar cualquier operación en Excel. En este artículo, le mostraremos 3 métodos diferentes sobre cómo realizar INDEX MATCH basado en múltiples criterios en Excel con el botón Macro VBA .

Descargar el cuaderno de ejercicios

Puede descargar gratuitamente el libro de ejercicios de Excel desde aquí.

VBA INDEX MATCH Basado en Múltiples Criterios.xlsm

3 Métodos con VBA INDEX MATCH Basado en Múltiples Criterios en Excel

En las siguientes secciones, le mostraremos cómo realizar INDEX MATCH basado en múltiples criterios para un rango , para una selección específica y para una mesa en Excel con VBA .

Arriba tenemos el conjunto de datos que seguirá este artículo. Tenemos el Nombre del alumno , Identificación del estudiante, y Notas del examen de cada alumno del conjunto de datos. Extraeremos un determinado resultado que reside en una columna basándonos en las condiciones de las otras dos columnas.

Criteria - 1: Incrustar VBA con INDEX MATCH para Búsqueda Múltiple (Dos) Dimensiones en Excel

Consideremos la siguiente imagen. Hemos almacenado el nombre de un alumno concreto " Borde" en Célula G4 y la columna en la que buscaremos el Resultado en, Notas del examen se almacena en Célula G5 Buscaremos en el Notas del examen y almacenar la columna Marcas que " Borde" entró Célula G6 .

Los pasos para la búsqueda dan como resultado un matriz bidimensional con ÍNDICE y MATCH en Excel con VBA se indican a continuación.

Pasos:

  • Al principio, pulse Alt + F11 en su teclado o vaya a la pestaña Desarrollador -> Visual Basic para abrir Editor de Visual Basic .

  • A continuación, en la ventana de código emergente, en la barra de menús, haga clic en Insertar -> Módulo .

  • Entonces, copia el siguiente código y pegar en la ventana de código.
 Sub IndexMatchStudent() Dim iSheet As Worksheet Set iSheet = Worksheets("Dos dimensiones") iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)) End Sub 

Su código ya está listo para ejecutarse.

  • Ahora, pulse F5 en el teclado o, en la barra de menús, seleccione Run -> Run Sub/UserForm También puede hacer clic en el botón pequeño icono Ejecutar en la barra de submenú para ejecutar la macro.

Después de la ejecución del código, mira el gif de abajo para ver el resultado.

Como resultado, el Marcas que " Borde" en el examen, 67 se recupera en Célula G7 .

Explicación del código VBA

 Dim iSheet As Worksheet 

Definición de la variable de Hoja de Cálculo.

 Set iSheet = Hojas de cálculo("Dos dimensiones") 

Guarde el nombre de la hoja de cálculo. El nombre de nuestra hoja es "Dos dimensiones", debe proporcionar el nombre de acuerdo con su hoja de cálculo.

 iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)) 

Este fragmento de código selecciona el rango C5:D14 como rango de búsqueda. A continuación, busque la coincidencia almacenada en la celda G4 al alcance B5:B14 y buscar la coincidencia almacenada en la celda G5 al alcance C4:D4 y pasar el resultado a la celda G6 .

Más información: Cómo utilizar INDEX MATCH con criterios múltiples para un intervalo de fechas

Criterio - 2: Aplicar Macro para Buscar Valor MATCH por INDEX con Función Definida por el Usuario (UDF)

Puede extraer valores coincidentes de un conjunto de datos con una función función definida por el usuario (UDF) A partir de la siguiente imagen, lo que vamos a hacer es pasar el archivo Identificación del estudiante y Notas del examen de un determinado alumno y la función nos arrojará el Nombre de ese alumno en concreto.

Veamos cómo conseguirlo para Nombre del alumno "Finn" con VBA .

Pasos:

  • Como ya se ha indicado, abra Editor de Visual Basic del Desarrollador y Inserte a Módulo en la ventana de código.
  • Luego, en la ventana de código, copia el siguiente código y pegar eso.
 Function MatchByIndex(x As Double, y As Double) Const StartRow = 4 Dim EndRow As Long Dim iRow As Long With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y ThenMatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With MatchByIndex = "Datos no encontrados" End Function 

  • No corras este código, guardar eso.
  • Ahora, volver a la hoja de trabajo de interés. Elija cualquier celda que desea almacenar el resultado. En nuestro caso, es Celda F5 .
  • En esa celda, escriba el UDF que acaba de crear en el código ( MatchByIndex ) y pasar el identificador de estudiante y las notas del examen del alumno concreto dentro del paréntesis de la función.

Como estamos intentando extraer el nombre " Finn" de su ID (105) y Marcas (84) por lo que para nuestro caso la fórmula se convierte en,

=MatchByIndex(105,84)

  • A continuación, pulse Entre en .

Observa la siguiente imagen.

En Celda F5 hemos recuperado con éxito el nombre " Finn" simplemente pasando su ID y Marcas dentro de la función que creamos en el VBA código.

Explicación del código VBA

 Función MatchByIndex(x Como Double, y Como Double) 

Crear una nueva función y pasar las variables dentro de ella. Se puede definir cualquier nombre a la función.

 Const InicioFila = 4 

Nuestra fila empieza en la fila número 4. Debe indicar el número de fila en el que empieza su conjunto de datos.

 Dim EndRow As Long Dim iRow As Long 

Definición de las variables.

 Con Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

En primer lugar, defina la hoja de cálculo con la que va a trabajar. El nombre de nuestra hoja es "UDF", debe proporcionar el nombre de acuerdo con su hoja de cálculo. A continuación, comience a buscar en el rango C:D desde la primera fila que hemos definido hasta la última.

 For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y Then MatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With 

Empieza a iterar desde la primera fila hasta la última. Si el primer valor que pasaremos dentro de la función cae dentro del C y si el segundo valor que pasaremos dentro de la función cae dentro de la columna D devolverá la coincidencia de la columna B En caso contrario, salga de la función, termine todas las sentencias y pase a la línea siguiente.

 MatchByIndex = "Datos no encontrados" End Function 

Si la condición anterior no se cumple durante la ejecución, se devolverá el mensaje "Datos no encontrados" y el código abandonará la función.

Más información: INDEX-MATCH con Criterios Múltiples para Texto Parcial en Excel (2 Maneras)

Criterios - 3: Implementar VBA para devolver el valor MATCH de una tabla con datos múltiples en Excel

En esta sección aprenderemos a devolver un valor coincidente por los índices de una tabla en el MsgBox en VBA Excel.

Veamos cómo extraer el Marcas de la tabla que figura en nuestro conjunto de datos ( T Nombre capaz: TableMatch ) de un determinado alumno proporcionando el Nombre y el ID dentro del código. En nuestro caso, el Nombre y el ID será Finn y 105 respectivamente.

Pasos:

  • En primer lugar, abra Editor de Visual Basic del Desarrollador y Inserte a Módulo en la ventana de código.
  • Entonces, copia el siguiente código y pegar en la ventana de código.
 Sub ReturnMatchedResultByIndex() Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable =iSheet.ListObjects("TableMatch") TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) =TargetName Then iResult = True End If End If If iResult Then Exit For Next iCount If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not found" End If End Sub 

Su código ya está listo para ejecutarse.

  • Más tarde, Ejecutar este código y mira la siguiente imagen para ver lo que ocurrió como resultado.

Como se puede ver en la imagen de arriba, hay un Microsoft Excel cuadro de mensaje emergente que le muestra el Puntuación: 84 de ID: 105 y Nombre: Finn que proporcionamos dentro del código.

Explicación del código VBA

 Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean 

Definición de las variables.

 Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch") 

Establecer el nombre de la hoja y el nombre de la tabla dentro de variables.

 TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index 

Almacenar los valores de búsqueda y las columnas de búsqueda.

 iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) = TargetName Then iResult = True End If End If iResult Then Exit For Next iCount 

Este trozo de código escanea desde el principio hasta el final del subíndice y si encuentra la coincidencia del ID definido y el Nombre en las columnas de búsqueda, entonces almacena el resultado y cierra todas las sentencias. Además, sale de la iteración y pasa a la siguiente parte del código.

 If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not found" End If 

Lanza el resultado en el MsgBox.

Más información: Buscar y Devolver Múltiples Valores Concatenados en una Celda en Excel

Conclusión

Para concluir, este artículo le ha mostrado 3 métodos diferentes sobre cómo realizar INDEX MATCH basado en múltiples criterios en Excel con el botón Macro VBA Espero que este artículo le haya resultado muy útil. No dude en plantear cualquier pregunta sobre el tema.

Hugh West es un capacitador y analista de Excel altamente experimentado con más de 10 años de experiencia en la industria. Tiene una Licenciatura en Contabilidad y Finanzas y una Maestría en Administración de Empresas. Hugh tiene una pasión por la enseñanza y ha desarrollado un enfoque de enseñanza único que es fácil de seguir y comprender. Su conocimiento experto de Excel ha ayudado a miles de estudiantes y profesionales en todo el mundo a mejorar sus habilidades y sobresalir en sus carreras. A través de su blog, Hugh comparte su conocimiento con el mundo, ofreciendo tutoriales gratuitos de Excel y capacitación en línea para ayudar a las personas y empresas a alcanzar su máximo potencial.