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].
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.
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.
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”.
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
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.