VBA – VLOOKUP o XLOOKUP – Buscar en otra Hoja o Libro

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on diciembre 14, 2022

Este artículo demostrará cómo utilizar las funciones VLOOKUP y XLOOPUP para buscar valores en otras hojas o libros de trabajo en VBA.

Las funciones VLOOKUP y XLOOKUP en Excel son funciones útiles que nos permiten buscar un valor coincidente en un rango y devolver un valor correspondiente de otra columna. Estas funciones se pueden utilizar directamente en una fórmula en Excel, o se pueden utilizar en la codificación VBA con el método WorksheetFunction. Podemos utilizar estas funciones para buscar valores que están contenidos en una hoja diferente de donde queremos que se produzca el resultado, o incluso en un libro de trabajo diferente.

VLOOKUP y XLOOKUP desde Otra Hoja

VLOOKUP desde Otra Hoja

Para utilizar el VLOOKUP en una hoja diferente a la de los datos de búsqueda, podemos escribir el siguiente código:

Sub BuscarPrecio()
   ActiveCell = Application.WorksheetFunction.VLookup(Range("B3"), Sheets("ListaProductos").Range("B2:C6"), 2, False)
End Sub

O

Sub BuscarPrecio()
   ActiveCell = Application.VLookup(Range("B3"), Sheets("ListaProductos").Range("B2:C6"), 2, False)
End Sub

Dando lugar a lo siguiente

Resultado Ejemplo1 Application Vlookup

 

También podríamos, para mayor facilidad, utilizar variables en nuestro código.

Sub BuscarPrecio()
   Dim ws As Worksheet
   Dim rng As Range
   Dim strProduct As String
   strProduct = Range("B3")
   Set ws = Sheets(1)
   Set rng = ws.Range("B2:C6")
   ActiveCell = Application.WorksheetFunction.VLookup(strProduct, rng, 2, False)
End Sub

Esto devolvería el mismo resultado.

Si estamos buscando un valor que no existe, es posible que deseemos utilizar la función Application.VLookup para devolver #N/D a la celda en lugar de la función Application.WorksheetFunction.VLookup que daría lugar a un error de VBA.

Resultado Vlookup Valor que No Existe

Si deseamos devolver la fórmula en lugar del valor a la celda de destino, entonces este es el código que tendríamos que introducir.

Sub BuscarPrecioR1C1()
   ActiveCell = "=VLOOKUP(RC[-1],ListaProductos!RC[-1]:R[3]C,2,FALSE)"
End Sub

La fórmula utiliza la sintaxis R1C1 (filas y columnas) en lugar de la sintaxis A1 (rango).

Esto resultaría en:

Insertar Fórmula Vlookup

 

XLOOKUP desde Otra Hoja

Usar el XLOOKUP para buscar datos en una hoja diferente es muy parecido. Recuerda que el XLOOKUP busca en múltiples rangos en lugar de en una columna específica para encontrar el valor.

Sub BuscarPrecio_XLookup()
   ActiveCell = Application.WorksheetFunction.XLookup(Range("B3"), Sheets("ListaProductos").Range("B2:B6"), Sheets("ListaProductos").Range("C2:C6"))
End Sub

o con variables:

Sub BuscarPrecio_XLookup()
    Dim ws As Worksheet
    Dim strProduct As String
    Dim rngProduct As Range
    Dim rngPrice As Range
    strProduct = Range("B3")
    Set ws = Sheets("ListaProductos")
    Set rngProduct = ws.Range("B2:B6")
    Set rngPrice = ws.Range("C2:C6")
    ActiveCell = Application.WorksheetFunction.XLookup(strProduct, rngProduct, rngPrice)
End Sub

El resultado de cualquiera de estos ejemplos sería entonces:

Resultado Xlookup

Para devolver una fórmula utilizando XLOOKUP, una vez más tendríamos que utilizar la sintaxis fila/columna (R1C1) en lugar de la sintaxis Rango (A1).

Sub InsertarFormulaXlookup()
  ActiveCell.FormulaR1C1 = "=XLOOKUP(RC[-1],ListaProductos!RC[-1]:R[3]C[-1],ListaProductos!RC:R[3]C)"
End Sub

El resultado sería:

Resultado Insertar Fórmula Xlookup

Una de las principales ventajas de utilizar XLOOKUP frente a VLOOKUP es la posibilidad de buscar un rango de columnas y devolver el valor de cada columna.

Veamos el siguiente ejemplo:

Xlookup Devuelve Array

 

Hemos creado la fórmula en la celda C3 donde busca los valores del rango C2:E6. Debido al hecho de que se trata de múltiples columnas, se rellenarán automáticamente las columnas D y E con los resultados encontrados. La fórmula se DERRAMA en las columnas D y E sin que tengamos que usar CTRL+MAYÚS para una fórmula de matriz – esta capacidad para que la fórmula se DERRAME es una de las nuevas incorporaciones de Excel 365. Para replicar esto con código VBA, podemos escribir lo siguiente en nuestra macro:

Sub InsertarFormulaXlookup_2()
   ActiveCell.Formula2R1C1 = "=XLOOKUP(RC[-1],ListaProductos!RC[-1]:R[3]C[-1],ListaProductos!RC:R[3]C[2])"
End Sub

Donde la fórmula está utilizando la sintaxis R1C1 (filas y columnas) en lugar de la sintaxis A1 (rango). Esto hará que las fórmulas se introduzcan en Excel como se muestra en el gráfico anterior.

No puedes buscar múltiples columnas si estás usando el método WorksheetFunction.

VLOOKUP y XLOOKUP desde Otro Libro

Trabajar con otro libro en lugar de una hoja de trabajo diferente es muy parecido.

VLOOKUP desde Otro Libro

Considere el siguiente Ejemplo:

Ejemplo Buscarv Desde Otro Libro

 

Para replicar esto con código VBA, crearíamos la siguiente macro:

Sub BuscarPrecio_EnOtroLibro()
  ActiveCell = Application.WorksheetFunction.VLookup(Range("B3"), Workbooks("Productos.xlsm").Sheets("ListaProductos").Range("B2:C6"), 2, False)
End Sub

donde el archivo Productos.xlsm tendría que estar abierto en Excel para que esta búsqueda funcione. También podríamos utilizar variables:

Sub BuscarPrecio_EnOtroLibro_2()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rng As Range
    Dim strProduct As String
    Set wb = Workbooks("Productos.xlsm")
    Set ws = wb.Sheets("ListaProductos")
    Set rng = ws.Range("B2:C6")
    strProduct = Range("B3")
    ActiveCell = Application.WorksheetFunction.VLookup(strProduct, rng, 2, False)
End Sub

El resultado de cualquiera de estos ejemplos sería:

Resultado Vlookup Desde Otro Libro

 

Si quisiéramos que la fórmula real apareciera en la celda en lugar del valor, entonces nuestro código VBA incorporaría el nombre del libro de trabajo así como el nombre o número de la hoja.

Por ejemplo:

Sub BuscarPrecio_EnOtroLibro_Formula()
  ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],[Productos.xlsm]ListaProductos!R3C2:R6C3,2,FALSE)"
End Sub

XLOOKUP desde Otro Libro

La vinculación a otro archivo utilizando el XLOOKUP en lugar del VLOOKUP sigue las mismas líneas. Para devolver el valor a Excel:

Sub BuscarPrecio_EnOtroLibro_Xlookup()
   ActiveCell = Application.WorksheetFunction.XLookup(Range("B3"), Workbooks("Productos.xlsm").Sheets("ListaProductos").Range("B2:B6"), Workbooks("Productos.xlsm").Sheets("ListaProductos").Range("C2:C6"))
End Sub

o con variables:

Sub BuscarPrecio_EnOtroLibro_Xlookup()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim strProduct As String
    Dim rngProduct As Range
    Dim rngPrice As Range
    strProduct = Range("B3")
    Set wb = Workbooks("Productos.xlsm")
    Set ws = wb.Sheets("ListaProductos")
    Set rngProduct = ws.Range("B2:B6")
    Set rngPrice = ws.Range("C2:C6")
    ActiveCell = Application.WorksheetFunction.XLookup(strProduct, rngProduct, rngPrice)
End Sub

El resultado de cualquiera de estos ejemplos sería entonces:

Resultado Xlookup Desde Otro Libro

 

Para devolver la fórmula a Excel en lugar del valor, podemos modificar nuestra macro para incluir el nombre del libro además del nombre o número de la hoja.

Sub BuscarPrecio_EnOtroLibro_Xlookup_Formula()
   ActiveCell.Formula2R1C1 = "=XLOOKUP(RC[-1],[Productos.xlsm]ProductList!RC[-1]:R[3]C[-1],[Productos.xlsm]ListaProductos!RC:R[3]C[2])"
End Sub
vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples