Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Buscar Datos por Varios Criterios Mientras se Escribe en Textbox y Muestra Datos en Hoja Excel


.

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.

  
Recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

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 distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mailconectar 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);
}
}

   

Por favor considera la posibiliad de aportar para sostener el sitio, desde el link del final del post se puede descargar el ejemplo de macro, cada usuario puede adaptarlo a sus necesidades, la codificación está abierta y es de libre, se brinda en forma gratuita.

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:

Sheets(«Hoja1»).Range(«A4:H» & uf).AdvancedFilter Action:=xlFilterInPlace,    CriteriaRange:=Range(«C1:D2»), Unique:=False

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 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

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

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