Como arrojar estadística al momento de buscar por un criterio en un lisbox

Ojala me pueda ayudar tengo un formulario Evaluación donde me busca por dos criterios por Apellidos y Profesión, cuando le doy click a profesión y busco en la caja de texto en este caso lo hice por Psicología me filtra 5 registros, lo que deseo es que cuando busque por este criterio me arroje todos esos datos que estan dentro del FRAME (Estadística) como la que adjunto en la imagen, si se dan cuenta allí aparece Disponibles 3, debería funcionar que cuando busque me traiga el dato de la hoja Profesión al momento de la búsqueda por profesión del formulario y disponibles significa que solo se necesitan 3 cupos para esa profesión es como un aviso, después que me muestre la nota máxima y mínima de solo los que aprobaron para esa profesión buscada, el otro cálculo es la nota desaprobada máxima y por último que me arroje la cantidad de aprobados y desaprobados. Ojala me puedan ayudar lo he intentado hacer con COUNTIF, MAX, MIN, pero no logro dar, este es el formulario de como debería quedar.

Y esta es la hoja profesión que se puede incrementar a mas profesiones que allí solo me muestra la cantidad de cuantos solo pueden ingresar y eso quiero que se compare con la hoja Registros y cuando busque por profesión me arroje un aviso de cuantos cupos se requieren para esa profesión.

Y este ultimo es el código que estoy utilizando para búsqueda por los dos criterios Apellidos y Profesión.

Sub Listar()
Dim arrayItems()
Dim VResultado As Boolean
Dim Linea, Columna, Cont, Nlineas, CantReg As Long
Dim MyList
Cont = 1
CantReg = 0
Nlineas = Sheets("Registro").Range("A20000").End(xlUp).Row
If Nlineas = 1 Then
Else
    ReDim arrayItems(1 To Nlineas, 1 To Sheets("Registro").UsedRange.Columns.Count)
    With Me.LstCarga
                .Clear
                .ColumnCount = 6
                .ColumnWidths = "23;50;150;70;20;70"
        With Sheets("Registro")
        MyList = .Range("A1:A" & Nlineas)
            For Linea = 5 To UBound(MyList)
                VResultado = True
                If Optprofesion.Value = True Then
                    VResultado = .Range("D" & Linea).Value Like "*" + TxtBuscar + "*"
                End If
                If OptApellidos.Value = True Then
                    VResultado = .Range("C" & Linea).Value Like "*" + TxtBuscar + "*"
                End If
                If VResultado Then
                    Me.LstCarga.AddItem
                    For Columna = 1 To 6
                        arrayItems(Cont, Columna) = .Cells(Linea, Columna).Value
                    Next Columna
                    Cont = Cont + 1
                End If
            Next Linea
            Me.LstCarga.List = arrayItems()
        End With
    End With
    LblRegistros = "Registros: " & CantReg
    For i = 0 To LstCarga.ListCount - 1
            If LstCarga.List(i, 2) <> Empty Then
                CantReg = CCur(CantReg) + 1
            End If
       LblRegistros = "Registros: " & CantReg
    Next i
End If
Exit Sub
End Sub

1 respuesta

Respuesta
1

No estoy muy seguro si entendí. Pero hasta donde entiendo, creo que seria mas productivo tener las profesiones en un ComboBox, el cual tendría como BoundColumn la cantidad de "disponibles". Créeme que esto te va a ahorrar algo de código, y es una mejor practica. Si me compartes el libro, te lo ajusto, así me evitas crear uno desde cero.

PD: estas declarando mal las variables, en VBA esto es un error, y una mala practica:

Dim Linea, Columna, Cont, Nlineas, CantReg As Long

De todas esas, la única de tipo Long es CantReg, el resto son Variants que terminaran siendo Empty.

Puedes comprobarlo si a una de ellas le asignas un numero entre -32,768 y 32,767, probablemente recibas un error de Overflow.

La manera correcta de declarar variables en la misma linea es la siguiente:

Dim Linea As Long, Columna As Long, Cont As Long, Nlineas As Long, CantReg As Long

Andy M.

Muchas gracias por responder experto Andy Machin y tomarte tu tiempo y por aclararme el tema de declaración de las variables y de como se debe hacer alli te adjunto al archivo que he trabajo lo que esta dentro del FRAME(Estadística) lo hice manualmente ya que eso me debe aparecer cuando busque por profesión me debe arrojar esos datos.

https://drive.google.com/file/d/1n-n-9DMfIZgc-b7w7yTsBl_9ipWZzQfb/view?usp=sharing 

Muchas gracias por responder experto Andy Machin y tomarte tu tiempo y por aclararme el tema de declaración de las variables y de como se debe hacer alli te adjunto al archivo que he trabajo lo que esta dentro del FRAME(Estadística) lo hice manualmente ya que eso me debe aparecer cuando busque por profesión me debe arrojar esos datos.

Disculpa experto Andy Machin este es el archivo original el anterior no fue se me paso por error.

https://drive.google.com/file/d/1CV70gioJqcMJX6hSqLO-1fVr9Exn0h4B/view?usp=sharing 

Te hice uno (me tome la libertad de cambiar un "poco bastante" el archivo).

Yo uso los formularios blancos, tu si quieres le cambias el color.

Descargalo aquí: Descargar libro demo

De la forma que lo tenias, solo podías filtrar por dos criterios, y uno a la vez.

De la forma que hice el mio, puedes filtrar por todos los criterios, al mismo tiempo y sin orden en especifico.

También puse una función de Agregar y Borrar (estaba aburrido)

Otro consejo:

Si ves mi libro, los códigos que no pertenecen a un control del formulario, los pongo en un Modulo independiente. De esa forma es mas organizado el proyecto.

Andy M.

 Revise el algoritmo diseñado por usted experto Andy Machin esta extraordinario  y gracias por sus aclaraciones, mis respetos para su técnica en programación, pero tengo un detalle experto por que cuando le doy buscar por profesión en este caso lo hice por Psicología filtra todo correcto en lisbox, pero en el resultado estadístico solo aparece como Disponible 3 y resto de resultados no aparecen.

Aquí te los puse:

Descarga la actualización aquí: Descargar archivo actualizado

Andy M.

Estimado Andy machin creo que se ha confundido de archivo sigue calculando solo Disponibles:2 esta vez busque por profesión Biología, y solo calculo Disponibles nomas, el resto solo es manualmente desde el VBA, o no se si ameritara otra pregunta desde la web.

Su pregunta inicial fue pidiendo que el campo "Disponibles" se pusiera automáticamente. No dijo nada sobre los otros campos. No tengo idea de donde saldrían esos números. En su archivo los números se ponen manualmente. Usted no me ha hablado nada de ellos hasta ahora, solo habló de "Disponible". Le recomiendo que relea su pregunta inicial, y verá que ha sido respondida. Si tiene otras preguntas, hágala como pregunta nueva.

Termino de responder aquí.

Salu2

¡Gracias! 

Excelente experto Andy Machín gracias por su ayuda planteare otra pregunta sobre los cálculos restantes. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas