Hola a todos!!

¿Qué tal estáis?, espero que bien y que hayáis descansado en vuestras vacaciones. Hoy retomo las publicaciones de la web y estoy seguro que la de hoy os va a resultar muy interesante.

Hace unas semanas se publicó en todos las redes la aparición de una nueva función de búsqueda: «BUSCARX«. Esta función viene a dar solución a muchas de las carencias que tenía la fórmula BUSCARV y también ampliar funcionalidades. Esta nueva fórmula no estará disponible para todos hasta el año que viene y eso es lo que me ha hecho reflexionar sobre las carencias actuales de BUSCARV y todo lo que podemos hacer nosotros, como usuarios de VBA para encontrar soluciones.

Por lo tanto, he creado una nueva función que he denominado BUSCARZ y en la que podremos hacer lo siguiente:

  • Buscar valores a la izquierda de la matriz.
  • Mostrar el primer valor encontrado desde «arriba hacia abajo» (descendente).
  • Mostrar el primer valor encontrado desde «abajo hacia arriba» (ascendente).
  • Mostrar todas las coincidencias en una búsqueda.

Os presento el código de la función:

Option Explicit
Function BUSCARZ(ByVal DATO_BUSCADO As Variant, RANGO_BUSQUEDA As Range, COLUMNA As String, TIPO_BUSQUEDA As Integer)
'Declaramos variables
    Dim nCOLUMN As String, nCELDA As String, CELDA As Variant
    Dim VALOR_INICIAL As String, VALOR_FINAL As String
    Dim VALOR_TOTAL As String, TODOS As String, HOJA As String
    'capturamos hoja en la que se buscan datos
    HOJA = RANGO_BUSQUEDA.Parent.Name
    If IsNumeric(COLUMNA) Then COLUMNA = Split(Sheets(HOJA).Cells(1, CInt(COLUMNA)).Address, "$")(1)
    'Indicamos letra de la columna
    nCOLUMN = COLUMNA
    'nCOLUMN = Replace(Split(COLUMNA.Address, "$")(1), ":", "")
    'Por cada celda en el rango seleccionado de búsqueda
    For Each CELDA In RANGO_BUSQUEDA
        'Si la celda no igual al dato seleccionado entonces indicamos #N/A
        If UCase(CELDA) <> UCase(DATO_BUSCADO) Then BUSCARZ = "#N/A"
        'Si la celda es igual al dato seleccionado entonces
        If UCase(CELDA) Like UCase(DATO_BUSCADO) Then
        'Obtenemos numero de la celda en el que estamos
            nCELDA = Split(CELDA.Address, "$")(2)
            'Si el tipo de busqueda no es 2 o 3, entonces obtenemos el primer valor encontrado
            'buscando de forma descendente
            If TIPO_BUSQUEDA > 3 Or TIPO_BUSQUEDA <= 1 Then
                VALOR_INICIAL = Sheets(HOJA).Range(nCOLUMN & nCELDA)
                'Pasamos el valor a la función
                BUSCARZ = VALOR_INICIAL
                Exit For
            End If
            'Obtenemos el valor final
            VALOR_FINAL = Sheets(HOJA).Range(nCOLUMN & nCELDA)
            'obtenemos string con todos los valores encontrados
            TODOS = Trim(TODOS & "|" & VALOR_FINAL)
            VALOR_TOTAL = Mid(TODOS, 2, Len(TODOS))
        End If
        'Pasamos los valores a la función
        If TIPO_BUSQUEDA = 2 Then
            BUSCARZ = IIf(VALOR_FINAL = "", "#N/A", VALOR_FINAL)
        ElseIf TIPO_BUSQUEDA = 3 Then
            BUSCARZ = IIf(VALOR_TOTAL = "", "#N/A", VALOR_TOTAL)
        End If
        Next CELDA
    End Function

La sintaxis de la función es la siguiente:

  • DATO_BUSCADO: Es el valor que vamos a buscar. Podemos hacer referencia o indicar el valor entre comillas dobles » «.
  • RANGO_BUSQUEDA: Es el rango sobre el que buscamos los datos.
  • COLUMNA: Determina la columna sobre la que vamos a extraer la información.
  • TIPO_BUSQUEDA: a elegir sobre tres tipos:
    • 1 – Mostrar el primer valor encontrado desde «arriba hacia abajo» (descendente).
    • 2 – Mostrar el primer valor encontrado desde «abajo hacia arriba» (ascendente).
    • 3 – Mostrar todas las coincidencias en una búsqueda. Entre cada resultado se añade una barra vertical.

Llegados a este punto, creo que lo interesante será hacer un ejemplo. Empezaremos con una búsqueda de tipo 1 y de datos a la izquierda, traemos información de la columna «A».

UDF BUSCARZ. REALIZAR BUSQUEDAS A LA DERECHA Y ENCONTRAR TODAS LAS COINCIDENCIAS. PARTE I

Búsqueda de tipo 2 y de datos a la izquierda, traemos información de la columna «A».

UDF BUSCARZ. REALIZAR BUSQUEDAS A LA DERECHA Y ENCONTRAR TODAS LAS COINCIDENCIAS. PARTE I_1

Búsqueda de tipo 3 y de datos a la izquierda, traemos información agrupada de la columna «A».

UDF BUSCARZ. REALIZAR BUSQUEDAS A LA DERECHA Y ENCONTRAR TODAS LAS COINCIDENCIAS. PARTE I_2

La función también permite buscar en otras páginas y otros libros.

Nota: esta función la he programado en unas pocas horas. Si notáis que algo no funciona correctamente, por favor, pasadme feed.

Aunque son algunas mejoras interesantes, tengo pensado añadir y ampliar nuevas funcionalidades, así que iré actualizando el post en distintas publicaciones.

Ahora os dejo el archivo de prueba como siempre.

Descarga el archivo de ejemplo pulsando en: 

Donate Button with Credit Cards

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



¡¡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