.
Un suscriptor de nuestro canal de YouTube solicita saber como hacer el filtrado de datos que se muestra en el ejemplo como filtrar en Excel a medida que se escribe en textbox, pero requiere se filtre por dos criterios a la vez y no separados, es decir aplicado un filtro volver a filtrar sobre esos datos ya filtrados, en base a ello este ejemplo muestra una macro que permite filtrar por varios criterios a la vez que se escribe en textbox mostrando datos en la hoja de Excel.
El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintas, buscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, conectar Excel con Access y muchos ejemplos más.
if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}
Al descargar el ejemplo se puede observar una base de datos y en las primeras filas dos textbox donde se podrán ingresar los datos a filtrar, en este ejemplo filtra por Detalle y por Marca, al escribir en el textbox1 filtra la columna «Detalle» se observará que a medida que se escribe en el textbox simultáneamente se van filtrando los datos dependiendo de lo escrito.
De igual modo si se escribe en el textbox2 se filtran simultáneamente los datos de la columna «Marca», es decir filtra por marca del producto.
Ahora bien lo que muestra el ejemplo denominado «buscar datos por varios criterios mientras se escribe en textbox y muestra datos en hoja Excel«, lo que hace es: si se escribe datos en el textbox1 filtra los datos en base a lo escrito en dicho textbox1, pero si se deja escrito en ese textbox1 el criterio por el que se requiere filtrar y se escribe en el textbox2, que filtra por «Marca» del producto, la macro vuelve a aplicar un filtro sobre los datos ya filtrados.
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también
Buscar datos mientras se escribe en textbox y mostrar en hojas en hojas de Excel
Como acelerar busqueda en Listbox en Excel mientras se escribe en textbox
Como pasar varios datos datos con Enter de un Listbox multiselect a hojas de Excel
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Supongamos que se tiene la base de datos que se muestra en la hoja1, del ejemplo de macro que busca mientras se escribe, requiriendo filtrar por un cierto producto, la macro ira filtrando a medida que se escribe en el textbox1 todos los productos cuyo nombre vayan coincidiendo con lo que se está escribiendo en simultaneo, filtrando todos los productos coincidentes.
Supongamos que se requieren filtrar los productos ya filtrados, pero solamente de una cierta marca, es decir se requiere aplicar un filtro sobre el filtro ya realizado, para ello se puede escribir en el textbox2 el segundo criterio de búsqueda, en este caso la «marca del producto» y la macro filtrará los productos ya filtrados, pero filtrando nuevamente los productos que solo coincidan con la marca deseada y que se escribió en el textbox2.
Con el siguiente código se determina si existe un criterio de búsqueda o dos, dependiendo de ello aplica una o otra macro, si solo se busca por un criterio ejecuta la macro:
Call Searching
Si por el contrario se requiere volver a filtrar sobre datos ya filtrados se llama a la macro:
Call Searching11
If Sheets(«Hoja1»).Cells(2, 4) = Empty Then
Sheets(«Hoja1»).Range(«C2»).Value = IIf(TextBox1.Text = «», «», «*») & TextBox1.Text & IIf(TextBox1.Text = «», «», «*»)
Call Searching
Else
Sheets(«Hoja1»).Range(«C2»).Value = IIf(TextBox1.Text = «», «», «*») & TextBox1.Text & IIf(TextBox1.Text = «», «», «*»)
Call Searching11
La macro utilizando códigos aplica un filtro avanzado, para ello escribe en el rango C1:D2 y luego determina este rango como criterio de filtrado, procediendo a realizar un filtro avanzado en la misma hoja, para ellos se utiliza la siguiente codificación:
A continuación se muestra la codificación completa que contiene el ejemplo, no obstante se recomienda descargarlo y observar como se comporta la macro al realizar distintas búsquedas, el ejemplo se puede adaptar a las necesidades de cada lector, su uso es libre y se proporciona en forma gratuita.
Código que se inserta en la codificación de la hoja Excel o WorkSheet
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).Cells(2, 4) = Empty Then
Sheets(«Hoja1»).Range(«C2»).Value = IIf(TextBox1.Text = «», «», «*») & TextBox1.Text & IIf(TextBox1.Text = «», «», «*»)
Call Searching
Else
Sheets(«Hoja1»).Range(«C2»).Value = IIf(TextBox1.Text = «», «», «*») & TextBox1.Text & IIf(TextBox1.Text = «», «», «*»)
Call Searching11End If
‘Application.DisplayAlerts = True
‘Application.ScreenUpdating = True
End Sub
Private Sub Searching()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).FilterMode = True Then Sheets(«Hoja1»).ShowAllData
uf = Sheets(«Hoja1»).Range(«A» & Cells.Rows.Count).End(xlUp).Row
Sheets(«Hoja1»).Range(«C4:C» & uf).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(«C1:C2»), Unique:=False
‘Application.DisplayAlerts = True
‘Application.ScreenUpdating = True
End Sub
Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).Cells(2, 3) = Empty Then
Sheets(«Hoja1»).Range(«D2»).Value = IIf(TextBox2.Text = «», «», «*») & TextBox2.Text & IIf(TextBox2.Text = «», «», «*»)
Call Searching1
Else
Sheets(«Hoja1»).Range(«D2»).Value = IIf(TextBox2.Text = «», «», «*») & TextBox2.Text & IIf(TextBox2.Text = «», «», «*»)
Call Searching11
End If
‘Application.DisplayAlerts = True
‘Application.ScreenUpdating = True
End Sub
Private Sub Searching1()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).FilterMode = True Then Sheets(«Hoja1»).ShowAllData
uf = Sheets(«Hoja1»).Range(«A» & Cells.Rows.Count).End(xlUp).Row
Sheets(«Hoja1»).Range(«D4:D» & uf).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(«D1:D2»), Unique:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub Searching11()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).FilterMode = True Then Sheets(«Hoja1»).ShowAllData
uf = Sheets(«Hoja1»).Range(«A» & Cells.Rows.Count).End(xlUp).Row
Sheets(«Hoja1»).Range(«A4:H» & uf).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(«C1:D2»), Unique:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).Cells(2, 4) = Empty Then
Sheets(«Hoja1»).Range(«C2»).Value = IIf(TextBox1.Text = «», «», «*») & TextBox1.Text & IIf(TextBox1.Text = «», «», «*»)
Call Searching
Else
Sheets(«Hoja1»).Range(«C2»).Value = IIf(TextBox1.Text = «», «», «*») & TextBox1.Text & IIf(TextBox1.Text = «», «», «*»)
Call Searching11
End If
‘Application.DisplayAlerts = True
‘Application.ScreenUpdating = True
End Sub
Private Sub Searching()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).FilterMode = True Then Sheets(«Hoja1»).ShowAllData
uf = Sheets(«Hoja1»).Range(«A» & Cells.Rows.Count).End(xlUp).Row
Sheets(«Hoja1»).Range(«C4:C» & uf).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(«C1:C2»), Unique:=False
‘Application.DisplayAlerts = True
‘Application.ScreenUpdating = True
End Sub
Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).Cells(2, 3) = Empty Then
Sheets(«Hoja1»).Range(«D2»).Value = IIf(TextBox2.Text = «», «», «*») & TextBox2.Text & IIf(TextBox2.Text = «», «», «*»)
Call Searching1
Else
Sheets(«Hoja1»).Range(«D2»).Value = IIf(TextBox2.Text = «», «», «*») & TextBox2.Text & IIf(TextBox2.Text = «», «», «*»)
Call Searching11
End If
‘Application.DisplayAlerts = True
‘Application.ScreenUpdating = True
End Sub
Private Sub Searching1()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).FilterMode = True Then Sheets(«Hoja1»).ShowAllData
uf = Sheets(«Hoja1»).Range(«A» & Cells.Rows.Count).End(xlUp).Row
Sheets(«Hoja1»).Range(«D4:D» & uf).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(«D1:D2»), Unique:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub Searching11()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Sheets(«Hoja1»).FilterMode = True Then Sheets(«Hoja1»).ShowAllData
uf = Sheets(«Hoja1»).Range(«A» & Cells.Rows.Count).End(xlUp).Row
Sheets(«Hoja1»).Range(«A4:H» & uf).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(«C1:D2»), Unique:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
.
If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.
Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends