VLOOKUP a través de múltiples hojas en Excel con ejemplos

  • Compartir Este
Michael Brown

El tutorial muestra cómo utilizar la función VLOOKUP para copiar datos de otra hoja de cálculo o libro de trabajo, Vlookup en múltiples hojas, y buscar dinámicamente para devolver valores de diferentes hojas en diferentes celdas.

A la hora de buscar información en Excel, es raro que todos los datos se encuentren en la misma hoja. Lo más habitual es tener que buscar en varias hojas o incluso en diferentes libros. La buena noticia es que Microsoft Excel ofrece más de una forma de hacerlo, y la mala es que todas las formas son un poco más complicadas que una fórmula VLOOKUP estándar. Pero con un poco de paciencia, podemoslos descubrirá :)

    Cómo hacer VLOOKUP entre dos hojas

    Para empezar, vamos a investigar el caso más sencillo: utilizar VLOOKUP para copiar datos de otra hoja de cálculo. Es muy similar a una fórmula VLOOKUP normal que busca en la misma hoja de cálculo. La diferencia es que se incluye el nombre de la hoja en el campo tabla_array para indicar a la fórmula en qué hoja de cálculo se encuentra el intervalo de consulta.

    La fórmula genérica para VLOOKUP desde otra hoja es la siguiente:

    VLOOKUP(valor_buscado, Gama Sheet , col_index_num, [range_lookup])

    Como ejemplo, extraigamos las cifras de ventas de Jan informe a Resumen Para ello, definimos los siguientes argumentos:

    • Búsqueda_valores están en la columna A del Resumen y nos referimos a la primera celda de datos, que es A2.
    • Tabla_array es el rango A2:B6 de la hoja Ene. Para referirse a él, anteponga a la referencia del rango el nombre de la hoja seguido del signo de exclamación: ¡Ene!$A$2:$B$6.

      Preste atención a que bloqueamos el rango con referencias absolutas de celda para evitar que cambie al copiar la fórmula a otras celdas.

      Col_index_num es 2 porque queremos copiar un valor de la columna B, que es la 2ª columna del array de la tabla.

    • Consulta_rango se establece en FALSE para buscar una coincidencia exacta.

    Uniendo los argumentos, obtenemos esta fórmula:

    =VLOOKUP(A2, Ene!$A$2:$B$6, 2, FALSE)

    Arrastra la fórmula por la columna y obtendrás este resultado:

    De forma similar, puede hacer un Vlookup de los datos del Febrero y Mar sábanas:

    =VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)

    =VLOOKUP(A2, ¡Mar!$A$2:$B$6, 2, FALSE)

    Consejos y notas:

    • Si el nombre de la hoja contiene espacios o caracteres no alfabéticos debe ir entre comillas simples, por ejemplo 'Ventas Enero'!$A$2:$B$6 Para más información, consulte Cómo hacer referencia a otra hoja en Excel.
    • En lugar de escribir el nombre de una hoja directamente en una fórmula, puede cambiar a la hoja de búsqueda y seleccionar allí el rango. Excel insertará automáticamente una referencia con la sintaxis correcta, evitándole la molestia de comprobar el nombre y solucionar el problema.

    Vlookup desde otro libro

    Para realizar VLOOKUP entre dos libros de trabajo, incluya el nombre del archivo entre corchetes, seguido del nombre de la hoja y el signo de exclamación.

    Por ejemplo, para buscar el valor A2 en el rango A2:B6 en Jan hoja en el Informes_de_ventas.xlsx libro de trabajo, utilice esta fórmula:

    =VLOOKUP(A2, [Informes_ventas.xlsx]Ene!$A$2:$B$6, 2, FALSE)

    Para más detalles, consulte VLOOKUP desde otro libro en Excel.

    Vlookup a través de múltiples hojas con IFERROR

    Cuando necesite buscar entre más de dos hojas, la solución más sencilla es utilizar VLOOKUP en combinación con IFERROR. La idea es anidar varias funciones IFERROR para comprobar múltiples hojas de cálculo una a una: si el primer VLOOKUP no encuentra una coincidencia en la primera hoja, busca en la siguiente, y así sucesivamente.

    IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " No se ha encontrado "))

    Para ver cómo funciona este enfoque con datos de la vida real, veamos el siguiente ejemplo. A continuación se muestra el Resumen que queremos rellenar con los nombres de los artículos y los importes buscando el número de pedido en Oeste y Este sábanas:

    En primer lugar, vamos a extraer los artículos. Para ello, ordenamos a la fórmula VLOOKUP que busque el número de pedido en A2 en el campo Este y devolver el valor de la columna B (2ª columna en tabla_array A2:C6). Si no se encuentra una coincidencia exacta, busque en los campos Oeste Si ambos Vlookups fallan, devuelve "No encontrado".

    =IFERROR(VLOOKUP(A2, Este!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, Oeste!$A$2:$C$6, 2, FALSE), "No encontrado"))

    Para devolver el importe, basta con cambiar el número de índice de la columna a 3:

    =IFERROR(VLOOKUP(A2, Este!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, Oeste!$A$2:$C$6, 3, FALSE), "No encontrado"))

    En este ejemplo, ambas hojas de consulta tienen el mismo número de filas (A2:C6), pero el tamaño de sus hojas de cálculo puede ser diferente.

    Vlookup en varios libros

    Para hacer Vlookup entre dos o más libros de trabajo, encierre el nombre del libro de trabajo entre corchetes y colóquelo antes del nombre de la hoja. Por ejemplo, así es como puede hacer Vlookup en dos archivos diferentes ( Libro1 y Libro2 ) con una única fórmula:

    =IFERROR(VLOOKUP(A2, [Libro1.xlsx]Este!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Libro2.xlsx]Oeste!$A$2:$C$6, 2, FALSE), "No encontrado"))

    Hacer dinámico el número de índice de columna para Vlookup múltiples columnas

    En situaciones en las que es necesario devolver datos de varias columnas, hacer col_index_num dinámica podría ahorrarte algo de tiempo. Hay que hacer un par de ajustes:

    • Para el col_index_num utilice la función COLUMNS que devuelve el número de columnas de una matriz especificada: COLUMNS($A$1:B$1). (La coordenada de la fila no importa realmente, puede ser cualquier fila).
    • En el buscar_valor bloquea la referencia de la columna con el signo $ ($A2), para que permanezca fija al copiar la fórmula en otras columnas.

    Como resultado, se obtiene una especie de fórmula dinámica que extrae valores coincidentes de diferentes columnas, dependiendo de la columna en la que se copie la fórmula:

    =IFERROR(VLOOKUP($A2, Este!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), IFERROR(VLOOKUP($A2, Oeste!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), "No encontrado")

    Cuando se introduce en la columna B, COLUMNS($A$1:B$1) se evalúa a 2 indicando a VLOOKUP que devuelva un valor de la 2ª columna de la matriz de la tabla.

    Cuando se copia a la columna C (es decir, has arrastrado la fórmula de B2 a C2), B$1 cambia a C$1 porque la referencia de columna es relativa. En consecuencia, COLUMNS($A$1:C$1) se evalúa a 3 forzando a VLOOKUP a devolver un valor de la 3ª columna.

    Esta fórmula funciona muy bien para 2 ó 3 hojas de consulta. Si tiene más, los IFERROR repetitivos se vuelven demasiado engorrosos. El siguiente ejemplo muestra un enfoque un poco más complicado pero mucho más elegante.

    Vlookup múltiples hojas con INDIRECTO

    Otra forma de hacer Vlookup entre varias hojas en Excel es utilizar una combinación de las funciones VLOOKUP e INDIRECT. Este método requiere un poco de preparación, pero al final, tendrás una fórmula más compacta para hacer Vlookup en cualquier número de hojas de cálculo.

    Una fórmula genérica para Vlookup a través de hojas es la siguiente:

    VLOOKUP( buscar_valor INDIRECT("'"&INDEX( Hojas_de_consulta , MATCH(1, --(COUNTIF(INDIRECT("'" & Hojas_de_consulta ¡& "'! buscar_rango "), buscar_valor ¡)>0), 0)) & "'! tabla_array "), col_index_num FALSE)

    Dónde:

    • Hojas_de_consulta - un rango con nombre formado por los nombres de las hojas de búsqueda.
    • Valor_buscado - el valor a buscar.
    • Buscar_rango - el rango de columnas en las hojas de consulta donde buscar el valor de consulta.
    • Tabla_array - el rango de datos en las hojas de consulta.
    • Col_index_num - el número de la columna de la matriz de la tabla de la que devolver un valor.

    Para que la fórmula funcione correctamente, ten en cuenta las siguientes advertencias:

    • Es una fórmula de matriz, que debe completarse pulsando a la vez las teclas Ctrl + Mayús + Intro.
    • Todas las hojas deben tener el mismo orden de columnas .
    • Como utilizamos una matriz de tablas para todas las hojas de consulta, especifique el parámetro gama más amplia si sus hojas tienen diferentes números de filas.

    Cómo utilizar la fórmula Vlookup entre hojas

    Para hacer Vlookup en varias hojas a la vez, siga estos pasos:

    1. Escriba todos los nombres de las hojas de búsqueda en algún lugar de su libro de trabajo y nombre ese rango ( Hojas_de_consulta en nuestro caso).

  • Ajusta la fórmula genérica a tus datos. En este ejemplo:
    • búsqueda del valor A2 ( buscar_valor )
    • en el intervalo A2:A6 ( buscar_rango ) en cuatro hojas de trabajo ( Este , Norte , Sur y Oeste ), y
    • extraer los valores coincidentes de la columna B, que es la columna 2 ( col_index_num ) en el intervalo de datos A2:C6 ( tabla_array ).

    Con los argumentos anteriores, la fórmula toma esta forma:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Hojas_de_busqueda, MATCH(1, --(COUNTIF(INDIRECT("'"& Hojas_de_busqueda&"'!$A$2:$A$6")), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)

    Observe que bloqueamos ambos rangos ($A$2:$A$6 y $A$2:$C$6) con referencias de celda absolutas.

  • Introduzca la fórmula en la celda superior (B2 en este ejemplo) y pulse Ctrl + Mayús + Intro para completarla.
  • Haga doble clic o arrastre el controlador de relleno para copiar la fórmula en la columna.
  • Como resultado, tenemos la fórmula para buscar el número de pedido en 4 hojas y recuperar el artículo correspondiente. Si no se encuentra un número de pedido específico, se muestra un error #N/A como en la fila 14:

    Para devolver el importe, basta con sustituir 2 por 3 en el campo col_index_num ya que los importes se encuentran en la 3ª columna de la matriz de la tabla:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Hojas_de_busqueda, MATCH(1, --(COUNTIF(INDIRECT("'" & Hojas_de_busqueda & "'!$A$2:$A$6")), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE)

    Si desea sustituir la notación de error estándar #N/A por su propio texto, envuelva la fórmula en la función IFNA:

    =IFNA(VLOOKUP($A2, INDIRECT("'"&INDEX(Hojas_de_busqueda, MATCH(1, --(COUNTIF(INDIRECT("'" & Hojas_de_busqueda & "'!$A$2:$A$6")), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE), "No encontrado")

    Vlookup múltiples hojas entre libros de trabajo

    Esta fórmula genérica (o su variación) también se puede utilizar para hacer Vlookup en varias hojas de un archivo cuaderno diferente Para ello, concatene el nombre del libro de trabajo dentro de INDIRECT como se muestra en la siguiente fórmula:

    =IFNA(VLOOKUP($A2, INDIRECT("'[Libro1.xlsx]" & INDEX(Hojas_de_busqueda, MATCH(1, --(COUNTIF(INDIRECT("'[Libro1.xlsx]" & Hojas_de_busqueda & "'!$A$2:$A$6")), $A2)>0), 0)) & "'!$A$2:$C$6"), 2, FALSE), "No encontrado")

    Vlookup entre hojas y devolver varias columnas

    Si desea extraer datos de varias columnas, puede utilizar una función fórmula de matriz multicelda puede hacerlo de una sola vez. Para crear una fórmula de este tipo, proporcione una constante de matriz para la variable col_index_num argumento.

    En este ejemplo, deseamos devolver los nombres de los artículos (columna B) y los importes (columna C), que son la 2ª y 3ª columnas de la matriz de la tabla, respectivamente. Por lo tanto, la matriz requerida es {2,3}.

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets &"'!$A$2:$C$6")), $A2)>0), 0) &"'!$A$2:$C$6"), {2,3}, FALSE)

    Para introducir correctamente la fórmula en varias celdas, esto es lo que hay que hacer:

    • En la primera fila, seleccione todas las celdas que desee rellenar (B2:C2 en nuestro ejemplo).
    • Escriba la fórmula y pulse Ctrl + Mayús + Intro . De este modo se introduce la misma fórmula en las celdas seleccionadas, lo que devolverá un valor diferente en cada columna.
    • Arrastre la fórmula hacia las filas restantes.

    Cómo funciona esta fórmula

    Para entender mejor la lógica, vamos a desglosar esta fórmula básica en las funciones individuales:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Hojas_de_busqueda, MATCH(1, --(COUNTIF(INDIRECT("'"& Hojas_de_busqueda&"'!$A$2:$A$6")), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)

    Trabajando desde dentro hacia fuera, esto es lo que hace la fórmula:

    CONJUNTO e INDIRECTO

    En pocas palabras, INDIRECT construye las referencias para todas las hojas de búsqueda, y COUNTIF cuenta las ocurrencias del valor de búsqueda (A2) en cada hoja:

    --(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)

    Con más detalle:

    En primer lugar, se concatenan el nombre del rango (Lookup_sheets) y la referencia del rango ($A$2:$A$6), añadiendo apóstrofes y el signo de exclamación en los lugares adecuados para hacer una referencia externa, y se introduce la cadena de texto resultante en la función INDIRECT para hacer referencia dinámicamente a las hojas de búsqueda:

    INDIRECT({"'Este'!$A$2:$A$6"; "'Sur'!$A$2:$A$6"; "'Norte'!$A$2:$A$6"; "'Oeste'!$A$2:$A$6"})

    COUNTIF comprueba cada celda del rango A2:A6 de cada hoja de consulta con el valor de A2 en la hoja principal y devuelve el recuento de coincidencias de cada hoja. En nuestro conjunto de datos, el número de pedido de A2 (101) se encuentra en la celda Oeste que es la 4ª en el rango nombrado, por lo que COUNTIF devuelve esta matriz:

    {0;0;0;1}

    A continuación, compara cada elemento de la matriz anterior con 0:

    --({0; 0; 0; 1}>0)

    Esto produce una matriz de valores TRUE (mayor que 0) y FALSE (igual a 0), que se convierten en 1 y 0 utilizando un doble unario (--), y se obtiene la siguiente matriz como resultado:

    {0; 0; 0; 1}

    Esta operación es una precaución extra para manejar una situación cuando una hoja de búsqueda contiene varias ocurrencias del valor de búsqueda, en cuyo caso COUNTIF devolvería un conteo mayor que 1, mientras que nosotros queremos sólo 1's y 0's en el array final (en un momento, entenderás por qué).

    Después de todas estas transformaciones, nuestra fórmula queda como sigue:

    VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)

    INDEX y MATCH

    En este punto, interviene una combinación clásica de INDEX MATCH:

    INDEX(Hojas_de_consulta, MATCH(1, {0;0;0;1}, 0))

    La función MATCH configurada para coincidencia exacta (0 en el último argumento) busca el valor 1 en la matriz {0;0;0;1} y devuelve su posición, que es 4:

    INDEX(Hojas_de_busqueda, 4)

    La función INDEX utiliza el número devuelto por MATCH como argumento de número de fila (row_num), y devuelve el 4º valor del rango nombrado Hojas_de_consulta que es Oeste .

    Así, la fórmula se reduce a:

    VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)

    VLOOKUP e INDIRECTO

    La función INDIRECTO procesa la cadena de texto que contiene:

    INDIRECT("'"& "Oeste"&"'!$A$2:$C$6")

    Y lo convierte en una referencia que va al tabla_array argumento de VLOOKUP:

    VLOOKUP($A2, 'Oeste'!$A$2:$C$6 , 2, FALSE)

    Por último, esta fórmula VLOOKUP muy estándar busca el valor A2 en la primera columna del rango A2:C6 en la columna Oeste y devuelve una coincidencia de la 2ª columna. ¡Ya está!

    VLOOKUP dinámico para devolver datos de varias hojas a diferentes celdas

    En primer lugar, definamos qué significa exactamente la palabra "dinámica" en este contexto y en qué se va a diferenciar esta fórmula de las anteriores.

    En caso de que tenga grandes cantidades de datos en el mismo formato que estén divididos en varias hojas de cálculo, es posible que desee extraer información de diferentes hojas en diferentes celdas. La imagen siguiente ilustra el concepto:

    A diferencia de las fórmulas anteriores que recuperaban un valor de una hoja específica basándose en un identificador único, esta vez buscamos extraer valores de varias hojas a la vez.

    Existen dos soluciones diferentes para esta tarea. En ambos casos, es necesario realizar un pequeño trabajo preparatorio y crear rangos con nombre para las celdas de datos en cada hoja de consulta. Para este ejemplo, hemos definido los siguientes rangos:

    • East_Sales - A2:B6 en la hoja Este
    • Ventas_del_norte - A2:B6 en la hoja Norte
    • Ventas_Sur - A2:B6 en la hoja Sur
    • West_Sales - A2:B6 en la hoja Oeste

    VLOOKUP e IFs anidados

    Si tiene un número razonable de hojas que buscar, puede utilizar funciones IF anidadas para seleccionar la hoja basándose en las palabras clave de las celdas predefinidas (celdas B1 a D1 en nuestro caso).

    Con el valor de búsqueda en A2, la fórmula es la siguiente:

    =VLOOKUP($A2, IF(B$1="este", Ventas_este, IF(B$1="norte", Ventas_norte, IF(B$1="sur", Ventas_sur, IF(B$1="oeste", Ventas_oeste)))), 2, FALSE)

    Traducido al inglés, la parte del MI dice:

    Si B1 es Este busque en el rango denominado East_Sales ; si B1 es Norte busque en el rango denominado Ventas_del_norte ; si B1 es Sur busque en el rango denominado Ventas_Sur ; y si B1 es Oeste busque en el rango denominado West_Sales .

    El intervalo devuelto por IF llega hasta tabla_array de VLOOKUP, que extrae un valor coincidente de la 2ª columna de la hoja correspondiente.

    El uso inteligente de referencias mixtas para el valor de búsqueda ($A2 - columna absoluta y fila relativa) y la prueba lógica de IF (B$1 - columna relativa y fila absoluta) permite copiar la fórmula a otras celdas sin ningún cambio - Excel ajusta las referencias automáticamente basándose en la posición relativa de una fila y columna.

    Así pues, introducimos la fórmula en B2, la copiamos hacia la derecha y hacia abajo en tantas columnas y filas como sea necesario, y obtenemos el siguiente resultado:

    BÚSQUEDA INDIRECTA

    Cuando se trabaja con muchas hojas, los múltiples niveles anidados podrían hacer que la fórmula fuera demasiado larga y difícil de leer. Una forma mucho mejor es crear una fórmula rango dinámico de vlookup con la ayuda de INDIRECTO:

    =VLOOKUP($A2, INDIRECT(B$1&"_Ventas"), 2, FALSE)

    Aquí, concatenamos la referencia a la celda que contiene una parte única del rango con nombre (B1) y la parte común (_Ventas). Esto produce una cadena de texto como "Este_Ventas", que INDIRECT convierte en el nombre de rango comprensible por Excel.

    Como resultado, se obtiene una fórmula compacta que funciona de maravilla en cualquier número de hojas:

    Así es como se hace Vlookup entre hojas y archivos en Excel. Te doy las gracias por leer y ¡espero verte en nuestro blog la semana que viene!

    Cuaderno de prácticas para descargar

    Vlookup múltiples hojas ejemplos (archivo .xlsx)

    Michael Brown es un entusiasta de la tecnología dedicado y apasionado por simplificar procesos complejos utilizando herramientas de software. Con más de una década de experiencia en la industria de la tecnología, ha perfeccionado sus habilidades en Microsoft Excel y Outlook, así como en Google Sheets y Docs. El blog de Michael está dedicado a compartir su conocimiento y experiencia con otros, brindando consejos y tutoriales fáciles de seguir para mejorar la productividad y la eficiencia. Ya sea un profesional experimentado o un principiante, el blog de Michael ofrece información valiosa y consejos prácticos para aprovechar al máximo estas herramientas de software esenciales.