Como filtrar datos con Userform

Llevo un tiempo trabajando con una lista de datos en Excel, aproximadamente 200 líneas con datos como:

Nombre y apellidos

Sexo (Botón de Opción o Textbox en userform)

Edad (Textbox en userform)

Cinturón (casillas de Verificación en userform)Club

Peso (Textbox en userform)

Kata (casillas de Verificación en userform)

Combate (casillas de Verificación en userform)

Con estos datos tengo que hacer clasificaciones, principalmente usandon las condiciones: edad, cinturón y peso.

Hasta el momento, he usado el propio filtro de Excel, que la verdad va bien, pero me gustaría ir más allá.

Por este motivo he estado leyendo foros, viendo tutoriales, etc, pero no acabo de encontrar lo que busco, que es lo siguiente:

He creado un userform como este o parecido.

Bueno, en realidad tengo éste pero cambiando en COMPETICIÓN los botones de opción por casillas de verificación, y también el MASCULINO/FEMENINO mediante Textbox.

A partir de aquí es donde me he atascado completamente.

La idea es que salte el formulario, rellenar los datos necesarios y que al pulsar el botón BUSCAR DATOS, aparezcan los competidores que cumplan todos los requisitos en otra hoja excel.

¿Es posible esto?

1 Respuesta

Respuesta
1

H o l a : Envíame tu archivo con datos de ejemplo, el formulario y te preparo una propuesta para realizar el filtro.

El filtro lo puedes hacer, directamente en el userform con el control ListBox, también lo puedes hacer en una hoja, incluso, puedes hacerlo en ambos.

Lo recomendable, es que utilices ComboBox, en lugar de textbox o de casillas de verificación.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “nakha foro” y el título de esta pregunta.

¡Gracias!  Ya te he enviado el email.

Te anexo el código para filtrar

Dim h1, h2, h3
'
Private Sub ComboBox1_Change()
    Call Filtrar
End Sub
Private Sub ComboBox2_Change()
    Call Filtrar
End Sub
Private Sub ComboBox3_Change()
    Call Filtrar
End Sub
Private Sub ComboBox4_Change()
    Call Filtrar
End Sub
Private Sub ComboBox5_Change()
    Call Filtrar
End Sub
Private Sub ComboBox6_Change()
    Call Filtrar
End Sub
Private Sub ComboBox7_Change()
    Call Filtrar
End Sub
Private Sub ListBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call Filtrar
End Sub
'
Sub Filtrar()
'Por.Dante Amor
    h2.Range("A:K").ClearContents
    h2.Range("AA2:AL2") = ""
    ListBox1.RowSource = ""
    '
    h2.Range("AA2") = IIf(ComboBox1 <> "", ComboBox1, "")
    h2.Range("AB2") = IIf(ComboBox2 <> "", "="">=" & ComboBox2 & """", "")
    h2.Range("AC2") = IIf(ComboBox3 <> "", "=""<=" & ComboBox3 & """", "")
    h2.Range("AD2") = IIf(ComboBox4 <> "", ComboBox4, "")
    h2.Range("AE2") = IIf(ComboBox5 <> "", "="">=" & ComboBox5 & """", "")
    h2.Range("AF2") = IIf(ComboBox6 <> "", "=""<=" & ComboBox6 & """", "")
    h2.Range("AG2") = IIf(ComboBox7 <> "", ComboBox7, "")
    '
    If ListBox2.Selected(0) Then h2.Range("AH2") = "SI"
    If ListBox2.Selected(1) Then h2.Range("AI2") = "SI"
    If ListBox2.Selected(2) Then h2.Range("AJ2") = "SI"
    If ListBox2.Selected(3) Then h2.Range("AK2") = "SI"
    If ListBox2.Selected(4) Then h2.Range("AL2") = "SI"
    '
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range("A1:K" & u).AdvancedFilter xlFilterCopy, h2.[AA1:AL2], h2.[A1]
    u = h2.Range("A" & Rows.Count).End(xlUp).Row
    If u = 1 Then u = 2
    ListBox1.RowSource = h2.Name & "!A2:K" & u
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h1 = Sheets("RESUMEN")
    Set h2 = Sheets("Filtro")
    Set h3 = Sheets("Catalogos")
    '
    'Carga sexo
    For i = 2 To h3.Range("A" & Rows.Count).End(xlUp).Row
        ComboBox1.AddItem h3.Cells(i, "A")
    Next
    'carga edades y pesos
    For i = 1 To 99
        ComboBox2. AddItem i
        ComboBox3.AddItem i
        ComboBox5.AddItem i
        ComboBox6.AddItem i
    Next
    'carga cinturón
    For i = 2 To h3.Range("B" & Rows.Count).End(xlUp).Row
        ComboBox4.AddItem h3.Cells(i, "B")
    Next
    'carga club
    For i = 2 To h3.Range("C" & Rows.Count).End(xlUp).Row
        ComboBox7.AddItem h3.Cells(i, "C")
    Next
    'carga competición
    For i = 2 To h3.Range("D" & Rows.Count).End(xlUp).Row
        ListBox2.AddItem h3.Cells(i, "D")
    Next
End Sub

R ecuerda cambiar la valoración a la respuesta.

¡Gracias!

Hola Dante.

Gracias, Gracias y Gracias.

Excelente trabajo... es justo lo que iba buscando.

Tan solo hacerte una ultima pregunta. Para el apartado CINTURÓN, ¿has usado un ComboBox... seria muy difícil cambiarlo por una ListBox?

La idea es poder marcar todos los cinturones que se desee, como has puesto en el apartado COMPETICIÓN para poder seleccionar Kata, Kobudo, etc... todo lo que se quiera...

Gracias de nuevo.

Salud.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas