A diferencia del conocido Autofiltro de Excel, que mediante un desplegable en la cabecera de las columnas nos permite filtrar las filas, pero en este ejemplo te mostrare otra forma de como filtrar filas con macros que lleva por nombre Filtro Avanzado en Excel, 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.

En mi trabajo diariamente suelo utilizar tablas, más o menos extensas, a las que necesito aplicar distintos filtros complejos de forma intensiva. Pero para eso tenemos hoy en día VBA; con un simple código verás cómo podemos solucionarlo obteniendo así un Filtro verdaderamente potente para hacer Filtros Automáticos.

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:

  1. 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.
  1. 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. Pero para que tenga una idea de este ejemplo te invito a que te descargues este ejemplo abajo te dejare el link de descarga y también el link del video para que veas el funcionamiento de este Ejemplo.


Categorías: Código VBA

4 comentarios

Lorena · noviembre 4, 2020 a las 7:17 pm

Hola, mi nombre es Lorena
Querría saber si toda la información de que disponen está en su web macroexcelvba-ag.com
Muchas gracias

Lorena Román
http://www.vitalinkpro.com

    Aguirre · noviembre 22, 2020 a las 11:56 pm

    Saludos;
    Claro que si.

Yader · febrero 27, 2019 a las 8:55 pm

Excelente material estimado me ha servido mucho el ejemplo.

Saludos desde Nicaragua

    admin · febrero 28, 2019 a las 7:31 am

    Saludos Yader, Gracias!!!!!!!!!!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

×

En que podemos Ayudarte!

Correo de Contacto Directo:

contacto@macroexcelvba-ag.com

aguirre429_16@hotmail.com

      

× ¡Saludos! En que podemos Ayudarte?