Filtrar varias columnas a la vez – Filtro rápido en Excel – Parte 4

Filtrar varias columnas a la vez - Filtro rápido en Excel - Parte 4

En esta cuarta parte de nuestro Proyecto Filtro rápido en Excel, toca aprender a realizar filtros en nuestro rango de prueba en base a dos columnas. En este ejercicio lo haremos con dos columnas, pero con el código que te mostraré serás capaz de realizar el filtro con más de dos columnas.

Quiero aclarar que no continuaremos con el tema de filtrar columnas numéricas, ya que eso tendría que hacerse definiendo una Casilla (CheckBox1) por cada columna a filtrar. Es perfectamente posible, pero eso ya les tocaría a ustedes implementarlo.

Segunda columna a filtrar y segundo criterio

Para realizar nuestro filtro rápido o dinámico en base a dos columnas y dos criterios, necesitaremos duplicar el Cuadro combinado (ComboBox1) donde elegíamos la columna a filtrar, así como el Cuadro de texto (TextBox1) donde ingresamos el texto a filtrar.

  • En la pestaña Programador elegimos Modo Diseño.
  • Seleccionamos y eliminamos las etiquetas (Label1) del filtro y del texto.
  • Seleccionamos el ComboBox1 y el TextBox1.
  • Simplemente copiamos con [Control] + [C] y pegamos con [Control] + [V].

Duplicamos el Cuadro combinado para elegir otra columna y el Cuadro de texto para tener otro criterio.

Figura 1. Duplicamos el Cuadro combinado para elegir otra columna y el Cuadro de texto para tener otro criterio.

Ver video Filtro rápido en Excel PARTE 4

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Mostrar los encabezados del segundo filtro

En los pasos anteriores copiamos el ComboBox1 y el TextBox1, y ahora que tenemos ambos controles duplicados, los nuevos controles toman automáticamente los nombres de ComboBox2 y TextBox2. Para mostrar también los encabezados en el ComboBox2 damos doble clic en el control (seguimos en modo diseño, verdad?). Se creará el evento ComboBox2_Change, pero ese evento no lo necesitamos para este propósito. Con el cursor sobre el evento Change, ahora elegimos el evento DropButtonClick de la lista de eventos que está en la parte superior derecha e ingresamos el código usado en el ComboBox1.

. El segundo Cuadro combinado también deberá rellenarse con los encabezados de nuestro rango.

Figura 2. El segundo Cuadro combinado también deberá rellenarse con los encabezados de nuestro rango.

Una macro para todos los controles

La manera en la que funciona el Filtro rápido es que cada vez que se escribe una letra en el Cuadro de texto, de manera dinámica se aplica el filtro, es decir, se va aplicando conforme se escribe texto. Ahora bien, el TextBox1 en su evento Change ejecuta una serie de instrucciones que permite realizar el filtro cada vez que se escribe.

Entonces, qué sucede con el TextBox2. Una opción es pegar la misma macro del TextBox1 en el TextBox2, pero esto se volvería ineficiente si ustedes desean aplicar filtros por más de dos columnas. La solución, tener una sola macro o procedimiento y que cada TextBox que añadamos la mande llamar, así no replicar el mismo código en cada control.

. Todos los Cuadros de texto en el evento Change ejecutan la macro o procedimiento AplicarFiltro.

Figura 3. Todos los Cuadros de texto en el evento Change ejecutan la macro o procedimiento AplicarFiltro.

Filtro rápido en acción

Ahora que ya tenemos la manera de aplicar un filtro en base a dos columnas y por consiguiente dos criterios, sólo será cuestión de elegir la primera columna, ingresar el texto y verás cómo se filtra el rango en base a la columna elegida. Ahora elige la segunda columna y escribe un segundo criterio y verá como se aplica el filtro mostrando las filas que coinciden con ambos criterios. En la Figura 4 vemos el siguiente filtro con ambas columnas:

  • Columna 1 Cargo, Criterio Coordinador.
  • Columa 2 Nombre, contiene el texto “y”.

Filtro rápido y dinámica en Excel en base a dos columnas.

Figura 4. Filtro rápido y dinámica en Excel en base a dos columnas.

Código VBA de la macro

Aquí el código VBA de los Cuadros combinados, Cuadros de texto y el botón para limpiar el filtro.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'
Option Explicit

'Cuadro combinado 1 que muestra los encabezados
Private Sub ComboBox1_DropButtonClick()

Hoja1.ComboBox1.List = Application.Transpose(Hoja1.Range("A9").CurrentRegion.Resize(1).Value)

End Sub

'Cuadro combinado 2 que muestra los encabezados
Private Sub ComboBox2_DropButtonClick()

Hoja1.ComboBox2.List = Application.Transpose(Hoja1.Range("A9").CurrentRegion.Resize(1).Value)

End Sub

'Cuadro texto 1 del primer criterio
Private Sub TextBox1_Change()

Call AplicarFiltro

End Sub

'Cuadro texto 2 del segundo criterio
Private Sub TextBox2_Change()

Call AplicarFiltro

End Sub

'Botón para borrar filtro
Private Sub CommandButton1_Click()

Call BorrarFiltro

End Sub

Aquí el código VBA del procedimiento AplicarFiltro que nos permitirá hacer un filtro por dos columnas y dos criterios.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'
Option Explicit

'Procedimiento que será llamado desde el Textbox1 y TextBox2 para
'filtrar por dos columnas y dos criterios
Sub AplicarFiltro()

Dim Criterio1 As String
Dim Criterio2 As String
Dim Columna1 As Integer
Dim Columna2 As Integer

On Error Resume Next

Range("A9").CurrentRegion.AutoFilter

    If Hoja1.TextBox1.Value <> "" Or Hoja1.TextBox2.Value <> "" Then
       
        If Hoja1.CheckBox1.Value = True Then
            
            Criterio1 = Hoja1.TextBox1.Value & "*"
            Criterio2 = Hoja1.TextBox2.Value & "*"
        Else
        
            Criterio1 = "*" & Hoja1.TextBox1.Value & "*"
            Criterio2 = "*" & Hoja1.TextBox2.Value & "*"
        
        End If
        
        Columna1 = Hoja1.ComboBox1.ListIndex + 1
        Columna2 = Hoja1.ComboBox2.ListIndex + 1
        
        If Hoja1.TextBox1.Value <> "" And Hoja1.TextBox2.Value <> "" Then
            Range("A9").CurrentRegion.AutoFilter Field:=Columna1, Criteria1:=Criterio1
            Range("A9").CurrentRegion.AutoFilter Field:=Columna2, Criteria1:=Criterio2
        ElseIf Hoja1.TextBox1.Value <> "" And Hoja1.TextBox2.Value = "" Then
            Range("A9").CurrentRegion.AutoFilter Field:=Columna1, Criteria1:=Criterio1
        ElseIf Hoja1.TextBox1.Value = "" And Hoja1.TextBox2.Value <> "" Then
            Range("A9").CurrentRegion.AutoFilter Field:=Columna2, Criteria1:=Criterio2
        End If
        
    Else
        
        Range("A9").CurrentRegion.AutoFilter
    
    End If

On Error GoTo 0

End Sub

'Procedimiento para limpiar filtro
Sub BorrarFiltro()

Range("A9").CurrentRegion.AutoFilter
Hoja1.TextBox1.Value = ""
Hoja1.TextBox2.Value = ""
Hoja1.CheckBox1.Value = False
Hoja1.ComboBox1.Value = ""
Hoja1.ComboBox2.Value = ""

End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Filtro rápido en hoja PARTE 4 – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

You may also like...