Solved

Cumulative subtotals in Excel

Posted on 2012-03-09
5
453 Views
Last Modified: 2012-03-23
I have the following code to run subtotals

    Range("A3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(5, 6, 7, 8, 9, _
        13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30), Replace:=True, _
        PageBreaks:=False, SummaryBelowData:=True
    Range("A1").Select

Open in new window


I want to do the cumulative sum from Column 21 to 29

So the value in column 21 should be

(subtotal 20 + subtotal 21) = New value in column 21

The value in columns 22 should be

New value in column 21 + subtotal 22

And so on....
0
Comment
Question by:fitaliano
  • 4
5 Comments
 
LVL 41

Expert Comment

by:dlmille
ID: 37703806
There is no cumulative function in the group subtotal command, however, what happens as you probably know is when that command is executed, Excel goes in and inserts rows/columns adding the subTotal() function.

So at this point, you merely need to go through that function row/column and update it.

Do you have a brief example spreadsheet that goes with this code?  I can better/more quickly help with this conversion if you'd post one.

Thanks,

Dave
0
 

Author Comment

by:fitaliano
ID: 37703916
There you go Dave, what I am trying to do is the progressive cumulative Cash Flow from 2006 to 2015.
Subtotal-Example.xls
0
 
LVL 41

Expert Comment

by:dlmille
ID: 37703921
That's from U to AC?  I don't speak column numbers, so just confirming...

Dave
0
 
LVL 41

Expert Comment

by:dlmille
ID: 37703956
I think that's right.

Here's your code:
Option Explicit

Sub cumlSubtotals()
Dim wkb As Workbook
Dim wks As Worksheet
Dim lastRow As Long
Dim r As Range
Dim rRow As Range
Dim rng As Range

    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets("Dashboard")
    
    lastRow = wks.Range("A" & wks.Rows.Count).End(xlUp).Row
    
    Set rng = wks.Range(wks.Range("U4:AC4"), wks.Range("U" & lastRow, "AC" & lastRow))
    
    For Each rRow In rng.Rows
        For Each r In Range(rRow.Address)
            If Not r.Formula Like "=SUBTOTAL*" Then 'assume entire row to find has the subtotals, so save time skipping out if not
                Exit For
            Else 'found the subtotal row
                r.Formula = "=" & r.Offset(, -1).Address & " + " & Right(r.Formula, Len(r.Formula) - 1)
            End If
        Next r
    Next rRow
End Sub

Open in new window


See attached demonstration workbook.

Dave
Subtotal-Example-r1.xls
0
 
LVL 41

Accepted Solution

by:
dlmille earned 500 total points
ID: 37703967
Code optimized:

Sub cumlSubtotals()
Dim wkb As Workbook
Dim wks As Worksheet
Dim lastRow As Long
Dim r As Range
Dim rRow As Range
Dim rng As Range

    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets("Dashboard")
    
    lastRow = wks.Range("A" & wks.Rows.Count).End(xlUp).Row
    
    Set rng = wks.Range(wks.Range("U4:AC4"), wks.Range("U" & lastRow, "AC" & lastRow))
    
    For Each rRow In rng.Rows
        Set r = rRow.Cells(1, 1)
        If r.Formula Like "=SUBTOTAL*" Then 'assume entire row to find has the subtotal in first col
            rRow.Formula = "=" & Replace(r.Offset(, -1).Address, "$", "") & " + " & Right(r.Formula, Len(r.Formula) - 1)
        End If
    Next rRow
End Sub

Open in new window


See attached.

Cheers,

Dave
Subtotal-Example-r3.xls
0

Featured Post

Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A little background as to how I came to I design this code: Around 5 years ago I designed an add-in that formatted Excel files to a corporate standard, applying different cell colours and font type depending on whether the cells contained inputs,…
Do you use a spreadsheet like Microsoft's Excel?  Have you ever wanted to link out to a non excel file on your computer or network drive?  This is the way I found to do it!
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question