Algunos días atrás un lector preguntaba si existía alguna forma de conocer qué filtros había aplicados en un listado de datos con el Autofiltro aplicado. Obviamente no le servía la visualización directa mediante la etiqueta informativa del Autofiltro, por lo que para obtener dicho dato se hace necesario aplicar algo de código VBA.
En particular trabajaremos con la propiedad Autofilters.Filters.
Partiremos del siguiente listado de datos, con la herramienta Autofiltro ya aplicada:
Aplicaremos sobre nuestros dos campos algunos criterios de filtro, por ejemplo sobre el Campo1 mostraremos el elemento 'aa' o el 'cc' y en el Campo2 los valores mayores a 250.
Recordemos, como se ve en la imagen, que pasando el cursor por encima del desplegable del campo filtrado, aparece una etiqueta informando del filtro aplicado:
Sin embargo queremos algo menos 'temporal', algo que se pueda ver en todo momento y sobre todos los campos filtrados al tiempo. Por ello construiremos una función personalizada en VBA (UDF).
Por tanto accederemos al Editor de VBA (alt+F11) e insertaremos un Módulo, y dentro de él el siguiente código:
Observamos su funcionamiento introduciendo en las celdas B14 y C14 nuestra función. En B14:
=MuestraCriterio(B1)
y en C14
=MuestraCriterio(C1)
Haciendo referencia a las celdas de la cabecera o rótulo de nuestro listado de datos sobre el que hemos aplicado el Autofiltro.
Notemos como la función sólo admite un máximo de dos criterios por campo filtrado, puesto que esta es la limitación de la herramienta Autofiltro.
Vemos en la imagen el resultado:
En particular trabajaremos con la propiedad Autofilters.Filters.
Partiremos del siguiente listado de datos, con la herramienta Autofiltro ya aplicada:
Aplicaremos sobre nuestros dos campos algunos criterios de filtro, por ejemplo sobre el Campo1 mostraremos el elemento 'aa' o el 'cc' y en el Campo2 los valores mayores a 250.
Recordemos, como se ve en la imagen, que pasando el cursor por encima del desplegable del campo filtrado, aparece una etiqueta informando del filtro aplicado:
Sin embargo queremos algo menos 'temporal', algo que se pueda ver en todo momento y sobre todos los campos filtrados al tiempo. Por ello construiremos una función personalizada en VBA (UDF).
Por tanto accederemos al Editor de VBA (alt+F11) e insertaremos un Módulo, y dentro de él el siguiente código:
Function MuestraCriterio(Campo As Range) As String
Dim criterio1 As String
Dim criterio2 As String
'actualizamos la función para cada cambio en la hoja
Application.Volatile
With Campo.Parent.AutoFilter
'Analizamos el filtro en la columna filtrada
With .Filters(Campo.Column - .Range.Column + 1)
'si el campo no tiene filtro, salimos de la función
If Not .On Then Exit Function
'si tiene filtro, asignamos el criterio (criteria1) a nuestra variable
criterio1 = .Criteria1
'si el operador es AND(Y) entonces componemos una cadena de texto
If .Operator = xlAnd Then
criterio2 = " AND(Y) " & .Criteria2
'si el operador es OR(O) entonces componemos una cadena de texto
ElseIf .Operator = xlOr Then
criterio2 = " OR(O) " & .Criteria2
End If
End With
End With
'finalizamos uniendo los criterios obtenidos...
MuestraCriterio = Campo & ": " & criterio1 & criterio2
End FunctionObservamos su funcionamiento introduciendo en las celdas B14 y C14 nuestra función. En B14:
=MuestraCriterio(B1)
y en C14
=MuestraCriterio(C1)
Haciendo referencia a las celdas de la cabecera o rótulo de nuestro listado de datos sobre el que hemos aplicado el Autofiltro.
Notemos como la función sólo admite un máximo de dos criterios por campo filtrado, puesto que esta es la limitación de la herramienta Autofiltro.
Vemos en la imagen el resultado:





No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.