Filtros Avanzados con Macros
¿Para qué sirve? Nos permite filtrar utilizando los criterios indicados en un determinado rango de celdas. Esto puede ser muy interesante y, si no lo has utilizado todavía o no conoces su funcionamiento pues aquí te explicaremos detalladamente, no dejes de visitar esta página porque siempre estamos compartiendo temas muy interesantes sobre Excel y VBA, donde de forma clara y sencilla te explicaremos.
Como puedes ver en el siguiente Ejemplo, parto de una Base de Datos de Clientes donde haremos filtros con varios criterios, donde tengo en una hoja, una tabla con el nombre “BasedeClientes”. En la parte superior de la tabla he insertado 2 líneas para poner ahí el rango donde modificaremos los criterios; la primera fila con las mismas cabeceras que en la tabla “BasedeClientes”, y la siguiente fila es para hacer los filtros por columna.
El código es el siguiente, teniendo en cuenta 2 cosas:
- El código debes colocarlo en la misma hoja donde se encuentren las tablas de datos y criterios ya que responderá al evento Worksheet_Change.
- Al principio del código, se encuentran las constantes con los nombres de las tablas de datos (“BasedeClientes”); y el nombre de la tabla con los criterios (“CamposdeCriterios”). Aquí debes poner los nombres de las tablas que tú utilices.
Código de Filtro Avanzado:
Private Sub Worksheet_Change(ByVal Target As Range)
Declaramos las Constantes para hacer referencia a las tablas de los criterios y la base de datos.
Const Tabla_Datos = “BasedeClientes”
Const Tabla_Criterios = “CamposdeCriterios”
Declaramos las siguientes variables para hacer referencia a los rangos de la Base de Datos y el Rango de los Criterios.
Dim Rango_Datos As Range
Dim Rango_Criterios As Range
Set Rango_Datos = Range(Tabla_Datos & “[#All]”)
Set Rango_Criterios = Range(Tabla_Criterios & “[#All]”)
Si se modifica alguna celda dentro del rango de criterios, se ejecuta el Filtro Avanzado.
If Not Intersect(Target, Rango_Criterios) Is Nothing Then
El filtro avanzado necesita saber cuántos criterios utilizamos para un mismo campo, es por ello que rastreamos desde la última fila a la primera del rango de criterios (Fila a Fila); En la primera que aparezca algún criterio determinará el rango con criterios.
Filas_Inicio = Rango_Criterios.Cells(1, 1).Row
Columnas_Inicio = Rango_Criterios.Cells(1, 1).Column
Columnas_Final = Rango_Criterios.Columns.Count
For NumeroCriterios = Rango_Criterios.Rows.Count To Filas_Inicio + 1 Step -1
If WorksheetFunction.CountA(Range(Cells(NumeroCriterios, Columnas_Inicio), Cells(NumeroCriterios, Columnas_Final))) Then
Exit For
End If
Next NumeroCriterios
Aplicamos el filtro según los Criterios.
Rango_Datos.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(Cells(Filas_Inicio, Columnas_Inicio), Cells(NumeroCriterios, Columnas_Final)), Unique:=False
End If
End Sub
Tu código te quedara de esta forma, observa la siguiente imagen:
Dar Formato de Tabla a rango de celdas en Excel;
Para hacer uso de este filtro tienes que dar formato Tabla a tus datos y darles nombres, así será más fácil identificar a cuales rangos de celdas te estas refiriendo para hacer la filtros. En este ejemplo tú puedes seguir agregando más filas y más columnas siempre y cuando sea en la misma tabla esto dependerá si tú quieres agregar más campos de criterios a buscar.
No hay comentarios:
Publicar un comentario