Calcular columna según registros filtrados en listbox Excel vba

Tengo un formulario el cual me filtra un registro por código ; lo que requiero es que me calcule la séptima columna de el saldo de el listbox según los datos filtrados y al cargar dichos registros.

Anexo enlace de el archivo para su mejor comprensión.

https://drive.google.com/file/d/1tU_kjwwlCBY0J8V5leEsMu66CpHjJ_fo/view?usp=sharing 

Respuesta
3

Revisa los siguientes vídeos para cargar datos en un listbox:

Excel. Cargar datos en un ListBox con formato. - YouTube

Macro Cargar Listbox con Matriz - YouTube

Te invito a suscribirte a mi canal de youtube, para que recibas las notificaciones de los nuevos vídeos.

1 respuesta más de otro experto

Respuesta
4

Te dejo la instrucción que falta, utilizo una variable 'x'.

Private Sub ComboBox1_Change()
Dim CFilas, I, Y As Long
Dim Item As String
Dim x As Byte
    CFilas = Hoja1.Range("E" & Rows.Count).End(xlUp).Row
    ListBox1.Clear
    x = 10                  'para recorrer la tablita de saldos
    For I = 10 To CFilas
        If LCase(Hoja1.Range("F" & I).Value) Like "*" & LCase(Me.ComboBox1.Value) & "*" Then
            Me.ListBox1.AddItem Hoja1.Range("D" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Hoja1.Range("E" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Hoja1.Range("F" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Hoja1.Range("G" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = FormatCurrency((Hoja1.Range("H" & I).Value), 0)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = FormatCurrency((Hoja1.Range("I" & I).Value), 0)
            ListBox1.List(ListBox1.ListCount - 1, 6) = FormatCurrency((Hoja1.Range("M" & x).Value), 0)
            x = x + 1
    ' calcular la septima columna de acuerdo a el dato filtrado
        Else 
        End If
    Next I
End Sub

Fijate que no utilizo la palabra Me. porque habiendo un solo formulario se sobreentiende que los controles pertenecen a ese UF.

Te invito a mirar el video N° 11 de mi canal. Allí comento los detalles a tener en cuenta al copiar/pegar códigos de la web ;)

mil gracias por tu tiempo y conocimiento.

la segunda tabla era a manera de ejemplo de como debía quedar calculada la séptima columna al filtrar un registro .

yo me refería era a que me tomara los datos y me los fuera calculando en la séptima columna de el listbox de acuerdo a las entradas o salidas correspondientes a cada registro filtrado por el combobox1.

Te dejo el código ajustado:

Private Sub ComboBox1_Change()
Dim CFilas, I, Y As Long
Dim Item As String
    CFilas = Hoja1.Range("E" & Rows.Count).End(xlUp).Row
    ListBox1.Clear
    For I = 10 To CFilas
        If LCase(Hoja1.Range("F" & I).Value) Like "*" & LCase(Me.ComboBox1.Value) & "*" Then
            Me.ListBox1.AddItem Hoja1.Range("D" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Hoja1.Range("E" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Hoja1.Range("F" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Hoja1.Range("G" & I).Value
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = FormatCurrency((Hoja1.Range("H" & I).Value), 0)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = FormatCurrency((Hoja1.Range("I" & I).Value), 0)
            'si se trata del primer registro resta salidas de entradas solamente
            If ListBox1.ListCount = 1 Then
                ListBox1.List(ListBox1.ListCount - 1, 6) = _
                    FormatCurrency((Hoja1.Range("H" & I).Value - Hoja1.Range("I" & I).Value), 0)
            Else   'acumula el importe de fila anterior en la lista
                ListBox1.List(ListBox1.ListCount - 1, 6) = _
                    FormatCurrency((Hoja1.Range("H" & I).Value - Hoja1.Range("I" & I).Value) + ListBox1.List(ListBox1.ListCount - 2, 6), 0)
            End If
        Else    ' si no se ejecutará nada en caso contrario, quitar esta línea
        End If
    Next I
End Sub

¡Gracias!

Muy agradecido por tu pronta respuesta y tu colaboración,

Y una vez más a todo expertos por ser un medio efectivo para proporcionar soluciones a las dudas de muchos que no tenemos tanto conocimiento.

Bendiciones...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas