Llenar Combobox y sumar datos repetidos




En el post anterior combobox incrustado en hoja de Excel se explicaba en detalle como incrustar un combobox  en la hoja de Excel y seleccionar ítems desde el mismo, en esta oportunidad la Macro realizada en VBA ejecuta un procedimiento muy similar, con la variante que en vez de estar incrustado en la hoja de Excel, el combobox está en un formulario, a lo que se agrega que se puede seleccionar el archivo donde buscar.

En este  ejemplo de macro de Excel o procedimiento de VBA para Excel, se ejemplifica como llenar un combobox insertado en un formulario o userform de VBA, seleccionado el ítems del combo box, previo hacer  una serie de verificaciones, como por ejemplo que el otro combobox del formulario no esté vacío, en ese caso sale un mensaje, y se termina el procedimiento hasta tanto no se seleccione los datos solicitados. Haciendo click en la imágen se observa una vista previa del formulario que contiene los procedimientos de VBA o macros para Excel.

Una vez seleccionado el dato correspondiente, el nombre a buscar, se debe seleccionar el archivo donde buscar, siendo importante cargar la dirección correcta en la hoja archivo, ya que de ahí toma el formulario la dirección del fichero donde buscar los datos. Una vez seleccionados los datos el código realiza un bucle con el comando For ... Next recorre las filas  desde la fila dos hasta la última fila con datos, guardada en la variable uf; para luego contar la cantidad de veces  que una persona cumplió un rol determinado, una vez seleccionado el nombre en el Combobox, se corre una macro que compara el nombre seleccionado con el nombre de la columna F, como así también el nombre de la columna G, pero que a su vez sea igual con el rol cumplido y que está indicado en la columna S1, T1 y U1.

Determinado si el dato verdadero suma en la variable correspondiente acumulando, en caso de ser falso sigue con la próxima columna y así hasta terminar con la totalidad de datos con valores. Los valores obtenidos son expuestos en caso de buscar en el archivo 1 (archivo donde está la  macro), en la fila dos desde la columna S a la T; en caso de buscar en el archivo 2 ( archivo Anexo) los datos se registran en la fila 3  también en las columnas S a la T.
 

Para ver el  ejemplo en funcionamiento se deben descargar los dos archivos tanto el que tiene la macro como el auxiliar donde busca los datos, para descargar los archivos debes hacer click en  el link,  bajar el archivo uno y aquí para bajar el archivo dos, los archivos debes guardarlos en tu PC, y en la hoja archivo del ejemplo debes guardar a partir de la celda A2 la dirección exacta que tiene en tu PC, para que la macro pueda buscar y no se produzcan errores.

Para finalizar con el presente ejemplo te  recomiendo que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá.


También te aconsejo que leas el post Llenar combobox y buscar datos, si estás interesado en saber más en detalle, ver como funciona un combobox o adaptarlo a un proyecto similar que estés desarrollando, como decía está muy relacionado con lo aquí expuesto.

 
Código que se debe insertar en el formulario :
 
 
Public nomlibro, dire, dire1, p As String
Private Sub ComboBox1_Change()
Range("r2:u3") = ClearContents
If ComboBox2 = Empty Then
MsgBox ("Debe seleccionar Nombre"), vbInformation, "AVISO"
ComboBox2.SetFocus
Exit Sub
End If
ComboBox2_Change
End Sub
Private Sub ComboBox2_Change()
On Error Resume Next
Application.ScreenUpdating = False
Dim uf, ufcat, filadir, filacat, contad, contap, contadc, contamc As Integer
Range("r2:u3") = ClearContents
If ComboBox1 = Empty Then
MsgBox ("Debe seleccionar Nombre"), vbInformation, "AVISO"
ComboBox1.SetFocus
Exit Sub
End If
dire = ComboBox2
nomlibro = ActiveWorkbook.Name
p = ActiveWorkbook.Path
dire1 = p & "\" & nomlibro

If dire = dire1 Then
        TextBox1 = Clear
        TextBox2 = Clear
        TextBox3 = Clear
        TextBox4 = Clear
       
       
        contad = 0
        contap = 0
        contadc = 0
        contamc = 0
        perfind = ComboBox1
        ufcat = Sheets("Proyectos").Range("H" & Rows.Count).End(xlUp).Row
       
        For i = 2 To ufcat
        a = Sheets("Proyectos").Cells(i, 6)
        If a = perfind Then contad = contad + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 19) Then contap = contap + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 20) Then contadc = contadc + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 21) Then contamc = contamc + 1
        Next i
       
        If nomlibro <> dire Then
        Sheets("Proyectos").Cells(2, 18) = contad
        Sheets("Proyectos").Cells(2, 19) = contap
        Sheets("Proyectos").Cells(2, 20) = contadc
        Sheets("Proyectos").Cells(2, 21) = contamc
       
        Else
       
        Sheets("Proyectos").Cells(3, 18) = contad
        Sheets("Proyectos").Cells(3, 19) = contap
        Sheets("Proyectos").Cells(3, 20) = contadc
        Sheets("Proyectos").Cells(3, 21) = contamc
        End If
       
        TextBox1 = contad
        TextBox2 = contap
        TextBox3 = contadc
        TextBox4 = contamc
Else
  Application.Workbooks.Open dire
  Sheets("Proyectos").Select
        TextBox1 = Clear
        TextBox2 = Clear
        TextBox3 = Clear
        TextBox4 = Clear
           
        contad = 0
        contap = 0
        contadc = 0
        contamc = 0
       
        perfind = ComboBox1
        ufcat = Sheets("Proyectos").Range("H" & Rows.Count).End(xlUp).Row
       
        For i = 2 To ufcat
        a = Sheets("Proyectos").Cells(i, 6)
        If a = perfind Then contad = contad + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 19) Then contap = contap + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 20) Then contadc = contadc + 1
        If Sheets("Proyectos").Cells(i, 7) = perfind And Sheets("Proyectos").Cells(i, 8) = Sheets("Proyectos").Cells(1, 21) Then contamc = contamc + 1
        Next i
       
        If dire = dire1 Then
        Sheets("Proyectos").Cells(2, 18) = contad
        Sheets("Proyectos").Cells(2, 19) = contap
        Sheets("Proyectos").Cells(2, 20) = contadc
        Sheets("Proyectos").Cells(2, 21) = contamc
       
        Else
        ActiveWorkbook.Close False
        Sheets("Proyectos").Cells(3, 18) = contad
        Sheets("Proyectos").Cells(3, 19) = contap
        Sheets("Proyectos").Cells(3, 20) = contadc
        Sheets("Proyectos").Cells(3, 21) = contamc
        End If
       
        TextBox1 = contad
        TextBox2 = contap
        TextBox3 = contadc
        TextBox4 = contamc
End If
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
ComboBox1.Clear
Sheets("Nom").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
ComboBox2.Clear
Sheets("Archivo").Select
Range("A2").Select
While ActiveCell <> Empty
ComboBox2.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Wend
Sheets("Proyectos").Select
Application.ScreenUpdating = True
End Sub

Código a insertar en un módulo

Sub cargaform()
UserForm1.Show
End Sub






Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends