Filtro avanzado o búsqueda que cumpla varios criterios VBA

En este caso necesito ayuda para que de una lista larga en excel, realizar un búsqueda, que devuelva solo los registros que cumplan varias condiciones. Por ejemplo ( Los vehículos mercedes que tengan el paquete base)

Bien poniéndolas en celdas, solución menos práctica, ayudándose de un filtro avanzado en una macro.

Bien que las pregunte con un input box, separadas por comas o en varias preguntas.

Código       Gama   Potencia  Marca            Opcional1      Detalle1             Opcional2      Detalle2 

GLC320 SUV 150KW Mercedes Avantgarde Paquete lujo Llantas 5 radios aluminio

C320          Berlina  150KW     Mercedes      Classic          Paquete base    GPS             Sistema sonido gps

E220           Berlina 110KW     Mercedes      Classic          Paquete base    Clima           asientos calefact.

CLA200      Coupe   90KW      Mercedes       Sport            Paquete depor   Suspensión variable

Si además pudiéramos poner alguna opción booleana de y/o, seria estupendo.

2 Respuestas

Respuesta
1

Me auto respondo al primer método, mediante filtros avanzados y algunas lineas de software, gracias a los amigos de programar excel:

https://www.programarexcel.com/search?q=filtro+avanzado 

En este enlace lo explican bien claro, comparten el código y el fichero con la macro y datos de prueba y también hay un vídeo.

Quedo a la espera de la consulta, mediante entradas de teclado y no restringido a dos columnas.

Respuesta
1

Podrías solicitar los criterios mediante un inputbox o un pequeño formulario y luego colocar esos criterios para un filtro avanzado.

El detalle aún no aclarado es en qué columna se buscará cada uno de los criterios. El inputbox debe indicar en qué columna buscarlo salvo que se busque en toda la tabla.

Y si van a ser muchas condiciones mejor un formulario para el ingreso de los mismos.

Tendrás que subir una imagen de tu hoja para ver los encabezados. Esto es solo un ejemplo de lo que se puede interpretar de tus notas:

Hola.

Lo ideal es que busque en todas las columnas cada criterio. Porque así no se obliga a saber nada al usuario.

A falta de mayor información le puse imaginación... tendrás que seguir mi modelo para probarlo y luego adaptarlo a tu caso. El código va explicado para que lo sigas.

- Los criterios se separan con comas (se evalúan los espacios y se aceptan datos parciales, mayúsc o minúsc.

-Se marca en una col auxiliar (a continuación de la última con datos) los registros encontrados.

- Se filtra la tabla por esa col y se copia el resultado en otra hoja que ya estará creada.

La macro se coloca en un módulo. Para conocer las distintas opciones de cómo ejecutarla dejo las explicaciones en la sección Macros de mi sitio que dejo al pie.

Sub buscaCriterios()
'x Elsamatilde
criterios = InputBox("ingrese criterios separados por comas")
If criterios = "" Then Exit Sub
'se limpia col auxiliar y se le quitan posibles filtros.
'Es la primera a continuación de la tabla de datos
If ActiveSheet.AutoFilterMode = True Then Range("A1:I1").AutoFilter
Columns("I:I").Clear
'se arma una lista de criterios sin comas ni espacios
lista = Split(criterios, ",")
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
conta = 0
    For x = 0 To UBound(lista)
        dato = UCase(Trim(lista(x)))
        For y = 1 To 8
            Set busco = Cells(i, y).Find(dato, LookIn:=xlValues, lookat:=xlPart)
            If Not busco Is Nothing Then
                conta = conta + 1
                Exit For
            End If
        Next y
    Next x
    'si cumple con todos los criterios se marca la fila
    If conta = UBound(lista) + 1 Then
        Range("I" & i) = 1
    End If
Next i
'se filtra x la col auxiliar. la variable 'i' es la última fila con datos
    Range("I1") = "Resultado"
    Range("A1:I1").AutoFilter
    ActiveSheet.Range("$A$1:$I$" & i).AutoFilter Field:=9, Criteria1:="<>"
'si hay resultados se los copia en hoja3
If Range("A" & Rows.Count).End(xlUp).Row > 1 Then
    Range("A1:H" & Range("A" & Rows.Count).End(xlUp).Row).Copy _
    Destination:=Sheets("Hoja3").Range("A1")
Else
    MsgBox "No se encontraron registros con estos criterios"
End If
'se quitan los filtros de hoja1
    Range("A1:I1").AutoFilter
End Sub

Si necesitas el libro con el ejemplo dejame un correo o escribime a los que aparecen en mi sitio que dejo al pie.

Hola Elsa

Tu imaginación ha demostrado ser poderosa y has acertado en mucho mi intención.

Parece que algo no termina de funcionar, es posible que haya que poner a cero alguna variable mas?

Cuando repito el proceso me saca siempre los mismos resultados y no la búsqueda nueva

Saludos y gracias de nuevo

Atentamente

Home

Solo falta limpiar la hoja destino al inicio de la macro:

Sub buscaCriterios()
'x Elsamatilde
criterios = InputBox("ingrese criterios separados por comas")
If criterios = "" Then Exit Sub
'se limpia hoja destino, col auxiliar y se le quitan posibles filtros.
Sheets("Hoja3").Cells.ClearContents
'a partir de aquí continúa el código
'Es la primera a continuación de la tabla de datos

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas