Hola a todos! Hoy es la primera entrada en la nueva web de Excel Signum!. Llevaba mucho tiempo con ganas de mudarme a un nuevo host y actualizar la web y con esta temporada de la cuarentena y de recuperación por motivos de salud, me he decidido a hacerlo.

Espero que os guste. Ya os tendré informados de los cambios y actualización que voy a realizar.

En el post de hoy voy a tratar una de las nuevas funciones aparecidas en los últimos meses. No voy a deciros cómo funciona, porque hay cientos de tutoriales o, mejor aún, la ayuda oficial de Microsoft. Se trata de la función BuscarX

En el link que os he enlazado, tenéis explicaciones de cómo funciona la fórmula y en qué nos puede ayudar. Entre algunas de las ventajas frente a BuscarV, está el realizar búsquedas en columnas a la izquierda o conseguir el mismo resultado que las funciones Índice y Coincidir.

Pero vamos al objeto del post, ¿cómo programamos en VBA esta función?. Por el momento no la tenemos como una función de hoja ni como aplicación en el editor. Vamos con un ejemplo sencillo tomando el mismo ejemplo que en este post: USO COMBINADO DE LA FUNCIÓN INDICE Y COINCIDIR

Utilizando la función BuscarX vamos a obtener el mismo resultado que combinando Índice y Coincidir.

Como podéis ver, con el uso de esta función el resultado se obtiene muy fácilmente. Pero ¿y si queremos automatizarlo?

Pues bien, esto lo podremos hacer de varias formas, en este post os voy a proponer tres métodos:

En el primero invocamos la función de nuestro editor de VBA «WorksheetFunction.XLookup» y programamos la función:

Sub F_BUSCARX_1()
    Dim fin As Long, i As Long
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        'Mediante un loop for-next recorremos todos los casos.
        For i = 6 To fin + 4
        'Buscamos la función en funciones de hoja del editor
            .Cells(i, 2) = WorksheetFunction.XLookup(Cells(i, 1), .Range("E" & i & ":" & "L" & i), .Range("E3:L3"))
            Next i
        End With
    End Sub

En el segundo método componemos la función y la pasamos directamente a la hoja. Luego la tendremos que pasar a valores o quedará la fórmula en la celda.

Sub F_BUSCARX_2()
    Dim fin As Long, i As Long
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        'Mediante un loop for-next recorremos todos los casos.
        For i = 6 To fin + 4
        'Componemos la función y la pasamos a la hoja
            .Cells(i, 3) = "=XLOOKUP(" & "A" & i & "," & "E" & i & ":" & "L" & i & "," & "E3:L3" & ")"
            'Pasamos a valores
            .Cells(i, 3) = .Cells(i, 3)
            Next i
        End With
    End Sub

En el tercer método, muy parecido al segundo, utilizamos el Evaluate para evaluar la fórmula y trasladar el valor a la celda correspondiente:

Sub F_BUSCARX_3()
    Dim fin As Long, i As Long
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        'Mediante un loop for-next recorremos todos los casos.
        For i = 6 To fin + 4
        'Componemos la función y la evaluamos.
            .Cells(i, 4) = Evaluate("XLOOKUP(" & "A" & i & "," & "E" & i & ":" & "L" & i & "," & "E3:L3" & ")")
            Next i
        End With
    End Sub

En todos estos códigos nos ayudamos de un loop para realizar la búsqueda de todos los valores.

El resultado de aplicar las tres macros es el siguiente:

Os dejo un archivo de prueba, tan solo tenéis que pulsar el botón de comando «Ejecutar macro» y veréis el resultado.

Nota: Aunque es obvio, los códigos únicamente van a funcionar en versiones de Excel que tenga instalada esta función.

A continuación puedes descargar el archivo:

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post