Macro para insertar filas y sumar valores excel Vba

Para Dante Amor

Necesito una macro que ordene la hoja PAGO por padre y luego que inserte una fila debajo del rango de cada Padre y me sume las cantidades de la columna Pago.

Probé esta macro pero funciona cuando la hoja está ordenado y además inserta fila al titulo.

Sub InsertarTotales()
'Por.Dante Amor
    Application.ScreenUpdating = False
    c1 = "B"    'columna de nombres
    c2 = "E"    'columna de importes
    u = Range(c1 & Rows.Count).End(xlUp).Row
    fin = u
    ant = Cells(u, c1)
    tot = 0
    For i = u To 1 Step -1
        If Cells(i, c1) <> ant Then
            Rows(fin + 1 & ":" & fin + 2).Insert
            Cells(fin + 1, c2) = tot
            tot = 0
            fin = i
        End If
        tot = tot + Val(Cells(i, c2))
        ant = Cells(i, c1)
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

1 respuesta

Respuesta
1

Te anexo la macro para que te genere la hoja en un nuevo libro con los totales por padre

Sub InsertarTotales()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("Pagos")
    h1.Copy
    Set l2 = ActiveWorkbook
    Set h2 = l2.Sheets(1)
    '
    u = h2.Range("A" & Rows.Count).End(xlUp).Row
    With h2.Sort
        .SortFields.Clear
        .SortFields.Add Key:=h2.Range("C4:C" & u), SortOn:=xlSortOnValues, _
            Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange h2.Range("A3:F" & u)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    '
    c1 = "B"    'columna de nombres
    c2 = "E"    'columna de importes
    u = h2.Range(c1 & Rows.Count).End(xlUp).Row
    fin = u
    ant = h2.Cells(u, c1)
    tot = 0
    For i = u To 3 Step -1
        If h2.Cells(i, c1) <> ant Then
            h2.Rows(fin + 1 & ":" & fin + 2).Insert
            h2.Cells(fin + 1, c2) = tot
            tot = 0
            fin = i
        End If
        tot = tot + Val(h2.Cells(i, c2))
        ant = h2.Cells(i, c1)
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas