Búsqueda de datos con varios criterior

En un libro excel, con dos hojas ("Datos") y ("Listas"), por medio de un formulario, realizo búsquedas para contar cuántas veces se repite un determinado dato, concretamente de los que se encuentran en la columna "A", titulados "HECHO". Esto lo realizo eligiendo, de un ComboBox del formulario, el dato que quiero contar. Bien, he añaddido otros dos Combos a este formulario, dependientes entre sí, ComboBox1 y ComboBox 2, y lo que pretendo es que una vez elegido el hecho del combo (cmbHechos), se combine con los otros dos criterios que se seleccionan de los combos 1 y 2 y cuente las veces que se repite el dato cumpliendo estos 2 criterios añadidos. Espero haberme explicadbien, en cualquier caso, si fuese preciso puedo enviar un archivo de ejemplo.

1 respuesta

Respuesta
1

Envíame tu archivo y me explicas con un ejemplo, qué datos pongo en los 3 combos y cuántos deben contar, ¿y el resultado del conteo dónde lo quieres?

Mi correo [email protected]

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

Te anexo el código del formulario:

Private Sub cmbHechos_Change()
'Por.Dante Amor
    contar
End Sub
Private Sub ComboBox1_Change()
'Act.Por.Dante Amor
    Set h1 = Sheets("Listas")
    'pero antes lo limpiamos
    ComboBox2.Clear
    columna = ComboBox1.ListIndex + 1
    'ciclo en la hoja listas para cargar el combo2
    For i = 2 To h1.Cells(Rows.Count, columna).End(xlUp).Row
        ComboBox2.AddItem h1.Cells(i, columna)
    Next
    '
    contar
End Sub
Private Sub ComboBox2_Change()
'Por.Dante Amor
    contar
End Sub
Private Sub txbFechaFin_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Por.Dante Amor
    If txbFechaFin <> "" Then
        If Not IsDate(txbFechaFin) Then
            MsgBox "no es una fecha válida", vbExclamation
            Cancel = True
        End If
    End If
    contar
End Sub
Private Sub txbFechaInicio_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Por.Dante Amor
    If txbFechaInicio <> "" Then
        If Not IsDate(txbFechaInicio) Then
            MsgBox "no es una fecha válida", vbExclamation
            Cancel = True
        End If
    End If
    contar
End Sub
Sub contar()
'Por.Dante Amor
    Set h2 = Sheets("temp")
    h2.[A2] = cmbHechos
    h2.[B2] = ComboBox1
    h2.[C2] = ComboBox2
    h2.[D2] = IIf(txbFechaInicio = "", "", ">=" & txbFechaInicio)
    h2.[E2] = IIf(txbFechaFin = "", "", "<=" & txbFechaFin)
    lblCountif = h2.[J2]
End Sub
Private Sub UserForm_Activate()
'Act.Por.Dante Amor
    Set h1 = Sheets("Listas")
    j = 1
    Do While h1.Cells(1, j) <> Empty
        ComboBox1.AddItem h1.Cells(1, j)
        j = j + 1
    Loop
    '
    For Each celda In Range("Hechos")
        cmbHechos.AddItem celda.Value
    Next celda
    '
    lblCountif = ""
    cmbHechos.SetFocus
End Sub
Private Sub CommandButton1_Click()
    Unload Me
End Sub

Saludos.Dante Amor

Dos cuestiones, Dante Amor:

Una, porqué se quedan las columnas con filtro fijos.

Dos, lo de las fechas, se podría solucionar poniendo un commandbutton "ACEPTAR", ¿en vez de validarlas con un enter?

En cualquier caso, un trabajo excelente.

Saludos

Miguel A.

Los filtros se los puedes quitar, realmente la macro no filtra en la hoja "datos"

Si puedes, poner un botón, pero en cuanto presiones el botón es como si te estuvieras saliendo del textbox de fecha entonces tendrías que hacer un click en lugar de un enter, también puedes ejecutarlo con hacer click en cualquier parte del formulario, el funcionamiento es que te tienes que salir del textbox. La funcionalidad es así, porque se tiene que verificar lo que pusiste como fecha, si no es una fecha válida se tiene que cancelar el filtro, sino se valida, te estaría contando erróneamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas