Solved

Cumulative subtotals in Excel

Posted on 2012-03-09
5
460 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 42

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 42

Expert Comment

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

Dave
0
 
LVL 42

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 42

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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Introduction While answering a recent question (http:/Q_27311462.html), I created an alternative function to the Excel Concatenate() function that you might find useful.  I tested several solutions and share the results in this article as well as t…
This article will guide you to convert a grid from a picture into Excel format using Microsoft OneNote and no other 3rd party application.
The viewer will learn how to create a normally distributed random variable in Excel, use a normal distribution to simulate the return on an investment over a period of years, Create a Monte Carlo simulation using a normal random variable, and calcul…
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…

820 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