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 Function
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:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.