Código VBA, sumar y contar notas por alumnos y asignaturas dependiendo del colegio.
Al seleccionar un nombre de un alumno en el combobox, me debe reportar todas las HORAS de clases sumados por CURSOS (columnas) según las clases programados y no programados por separado
La data se seguirá registrando hacia abajo y se va tener bastante datos.
1 Respuesta
H0la Felipe:
Supongamos lo siguiente:
- Tu botón se llama cmdBuscar
- La hoja en la que están los datos se llama Alumnos
- La lista en donde se selecciona el nombre del estudiante se llama lstEstudiante
- Los cuadros de texto tienen por nombre txt+4InicialesAsignatura+P para los que guardan los datos de las clases programadas y txt+4InicialesAsignatura+NP para los textboxs que almacenan datos de las clases no programadas.
Bajos estos supuestos, el siguiente código debiera hacer lo que solicitas.
Private Sub cmdBuscar_Click() Dim h As Worksheet Dim lngUltFila As Long Set h = ThisWorkbook.Sheets("Alumnos") lngUltFila = h.Range("A" & h.Rows.Count).End(xlUp).Row Application.ScreenUpdating = False If Me.lstEstudiante.ListIndex >= 0 Then With h.Range("A3:N" & lngUltFila) 'Filtrar por el estudiante' .AutoFilter Field:=1, Criteria1:=Me.lstEstudiante.Text 'Filtrar por PROGRAMADO' .AutoFilter Field:=7, Criteria1:="PROGRAMADO" Me.txtMateP.Text = WorksheetFunction.Subtotal(9, h.Range("H4:H" & lngUltFila)) Me.txtLengP.Text = WorksheetFunction.Subtotal(9, h.Range("I4:I" & lngUltFila)) Me.txtHistP.Text = WorksheetFunction.Subtotal(9, h.Range("J4:J" & lngUltFila)) Me.txtReliP.Text = WorksheetFunction.Subtotal(9, h.Range("K4:K" & lngUltFila)) Me.txtCienP.Text = WorksheetFunction.Subtotal(9, h.Range("L4:L" & lngUltFila)) Me.txtArteP.Text = WorksheetFunction.Subtotal(9, h.Range("M4:M" & lngUltFila)) Me.txtFisiP.Text = WorksheetFunction.Subtotal(9, h.Range("N4:N" & lngUltFila)) 'Filtrar por NO PROGRAMADO' .AutoFilter Field:=7, Criteria1:="NO PROGRAMADO" Me.txtMateNP.Text = WorksheetFunction.Subtotal(9, h.Range("H4:H" & lngUltFila)) Me.txtLengNP.Text = WorksheetFunction.Subtotal(9, h.Range("I4:I" & lngUltFila)) Me.txtHistNP.Text = WorksheetFunction.Subtotal(9, h.Range("J4:J" & lngUltFila)) Me.txtReliNP.Text = WorksheetFunction.Subtotal(9, h.Range("K4:K" & lngUltFila)) Me.txtCienNP.Text = WorksheetFunction.Subtotal(9, h.Range("L4:L" & lngUltFila)) Me.txtArteNP.Text = WorksheetFunction.Subtotal(9, h.Range("M4:M" & lngUltFila)) Me.txtFisiNP.Text = WorksheetFunction.Subtotal(9, h.Range("N4:N" & lngUltFila)) .AutoFilter End With End If Application.ScreenUpdating = True End Sub
Me comentas cómo te va con la implementación.
S@lu2
Isaac Reyes
Primero, gracias por su atención, su conocimiento y su gran apoyo desinteresado.
Un amigo me pidió que le apoye en un registro, es profesor y quiere tener datos de sus cursos que esta impartiendo, yo le apoyare con este proyecto, el único fin es aprender las macros.
Tenia un proyecto anterior lo que estaba realizando de capacitaciones a operadores gracias a este foro de expertos, la idea es hacer este proyecto enfocado a las horas capacitados y después adaptar al proyecto de los cursos dictados, me parece seria mas fácil, porque me peleo mucho con los códigos ahora mismo también.
Disculpe por cambiar ligeramente la pregunta, adjunto el archivo...
Archivo
H0la Felipe:
No hay problemas en ayudar simpre que se pueda hacer.
Si te sirvió la respuesta anterior, cierra la pregunta y puedes formular una nueva si el requerimiento es distinto al que ya fue respondido.
Si la nueva inquietud forma parte de la misma pregunta, pues, revisé el archivo que subiste, pero no logro entender el requerimiento.
S@lu2
Hola, Isaac Reyes,
El archivo forma parte de la misma pregunta.
En el formulario puedo guardar datos de la Page 1 en las celdas hasta ahí estoy bien, cuando busco un APELLIDO Y NOMBRE y hago click en el botón BUSCAR me sale el DNI y el CARGO lo que necesito es que tambien a la vez me sale datos en la Page 2 de las horas de capacitación (tu código que me enviaste adaptarlo en la Page2).
Espero haberme explicado bien.
H0la Felipe:
En la primera consulta el formulario tenía un criterio por el que buecar, que era el alumno.
En el formulario actual, no hay un criterio por el que se deba buscar.
¿Debo asumir que lo que deseas es la suma total para programados y no programados de cada caso?
S@lu2.
Hola, Isaac, buen día.
El criterio de búsqueda es:
Una vez que le hago clik en Buscar me debe salir en la Page 2, la suma total de capacitaciones programados y no programados realizados (de la hoja DATA_BASE) por sus respectivos temas del Nombre Buscado.
Al final me debe sumar el total de las capacitaciones Programados y o programados del Nombre Buscado.
Gracias,
H0la Felipe:
Puedes reeplazar la macro por esta
Private Sub subCargar() Dim h As Worksheet Dim lngUltFila As Long Set h = ThisWorkbook.Sheets("DATA_BASE") lngUltFila = h.Range("A" & h.Rows.Count).End(xlUp).Row Application.ScreenUpdating = False Sheets("DATA_BASE").Unprotect "felix" If Me.ComboBox6.ListIndex >= 0 Then With h.Range("A4:S" & lngUltFila) 'Filtrar por el estudiante' .AutoFilter Field:=6, Criteria1:=Me.ComboBox6.Text 'Filtrar por PROGRAMADO' .AutoFilter Field:=9, Criteria1:="PROGRAMADO" Me.txtTotalP.Text = WorksheetFunction.Subtotal(9, h.Range("J5:S" & lngUltFila)) Me.txt001P.Text = WorksheetFunction.Subtotal(9, h.Range("J5:J" & lngUltFila)) Me.txt002P.Text = WorksheetFunction.Subtotal(9, h.Range("K5:K" & lngUltFila)) Me.txt003P.Text = WorksheetFunction.Subtotal(9, h.Range("L5:L" & lngUltFila)) Me.txt004P.Text = WorksheetFunction.Subtotal(9, h.Range("M5:M" & lngUltFila)) Me.txt005P.Text = WorksheetFunction.Subtotal(9, h.Range("N5:N" & lngUltFila)) Me.txt006P.Text = WorksheetFunction.Subtotal(9, h.Range("O5:O" & lngUltFila)) Me.txt007P.Text = WorksheetFunction.Subtotal(9, h.Range("P5:P" & lngUltFila)) Me.txt008P.Text = WorksheetFunction.Subtotal(9, h.Range("Q5:Q" & lngUltFila)) Me.txt009P.Text = WorksheetFunction.Subtotal(9, h.Range("R5:R" & lngUltFila)) Me.txt010P.Text = WorksheetFunction.Subtotal(9, h.Range("S5:S" & lngUltFila)) 'Filtrar por NO PROGRAMADO' .AutoFilter Field:=9, Criteria1:="NO PROGRAMADO" Me.txtTotalNP.Text = WorksheetFunction.Subtotal(9, h.Range("J5:S" & lngUltFila)) Me.txt001NP.Text = WorksheetFunction.Subtotal(9, h.Range("J5:J" & lngUltFila)) Me.txt002NP.Text = WorksheetFunction.Subtotal(9, h.Range("K5:K" & lngUltFila)) Me.txt003NP.Text = WorksheetFunction.Subtotal(9, h.Range("L5:L" & lngUltFila)) Me.txt004NP.Text = WorksheetFunction.Subtotal(9, h.Range("M5:M" & lngUltFila)) Me.txt005NP.Text = WorksheetFunction.Subtotal(9, h.Range("N5:N" & lngUltFila)) Me.txt006NP.Text = WorksheetFunction.Subtotal(9, h.Range("O5:O" & lngUltFila)) Me.txt007NP.Text = WorksheetFunction.Subtotal(9, h.Range("P5:P" & lngUltFila)) Me.txt008NP.Text = WorksheetFunction.Subtotal(9, h.Range("Q5:Q" & lngUltFila)) Me.txt009NP.Text = WorksheetFunction.Subtotal(9, h.Range("R5:R" & lngUltFila)) Me.txt010NP.Text = WorksheetFunction.Subtotal(9, h.Range("S5:S" & lngUltFila)) .AutoFilter End With End If Sheets("DATA_BASE").Protect "felix" Application.ScreenUpdating = True End Sub
Y la podrías llamar desde el botón buscar con la siguiente línea
SubCargar
S@lu2
- Compartir respuesta