Loop through spreadsheet and replace static subtotals with formula

pr3ach3r

New Member
Joined
Jun 8, 2010
Messages
7
YC0m2LP
Hopefully this make sense.

I have this table I would like to loop through and change the subtotals to actual formulas.

https://imgur.com/YC0m2LP

My Thought was to loop through the A column because the subtotals are placed the row after the name. I thought if I could calculate the range between the last name I could use that to create a sum(). Any ideas on calculating that range?

The spreadsheet is much larger than that image.
Code:
Sub Cleanup()

countblank  'Function to get lastrow
      Dim x As Integer
      Dim CRng
      Application.ScreenUpdating = False
      ' Set numrows = number of rows of data.
      NumRows = ctblank
      ' Select cell a1.
      Range("A2").Select
      ' Establish "For" loop to loop "numrows" number of times.
      For x = 2 To NumRows
         If (Not IsEmpty(Cells(x, 1)) And Not ActiveCell.Row = 2) Then
       
            sRegion = Range(Cells(x, 2).Offset(1, 0).Address).CurrentRegion
         
         LRow = Cells(x, 2).Address
         MsgBox LRow & "-" & Cells(x, 2).Offset(1, 0).Address
         LRow = ""
         
         
         
         'ActiveCell.Offset(1, 3).Value = "=Sum(" & sRegion & ")"
       
        
       
         End If
         
         
         ActiveCell.Offset(1, 0).Select
      Next
      Application.ScreenUpdating = True
End Sub
 
Last edited:

Excel Facts

How to total the visible cells?
From the first blank cell below a filtered data set, press Alt+=. Instead of SUM, you will get SUBTOTAL(9,)
I think I figured it out with one exception:

The last row of subtotals it does not do that row.


Code:
Sub CleanupMasReport()

countblank  'Function to get lastrow
      Dim x As Integer
      Dim CRng
      Application.ScreenUpdating = False
      ' Set numrows = number of rows of data.
      NumRows = ctblank
      ' Select cell a1.
      Range("A2").Select
      'Cleanup zeros in report
      Range("A2").Select
      Cells.Replace What:="0", Replacement:="", LookAt:=xlWhole, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      
      
      ' Establish "For" loop to loop "numrows" number of times.
      LRow = Cells(2, 3).Row
      For x = 3 To NumRows
         If (Not IsEmpty(Cells(x, 1)) And Not ActiveCell.Row = 2) Then
       
         
          ERow = Cells(x, 3).Offset(-1, 0).Row
         
           ActiveCell.Offset(2, 2).Formula = "=Sum(C" & LRow & ":" & "C" & ERow & ")"
           ActiveCell.Offset(2, 3).Formula = "=Sum(D" & LRow & ":" & "D" & ERow & ")"
           ActiveCell.Offset(2, 4).Formula = "=Sum(E" & LRow & ":" & "E" & ERow & ")"
           ActiveCell.Offset(2, 5).Formula = "=Sum(F" & LRow & ":" & "F" & ERow & ")"
           ActiveCell.Offset(2, 6).Formula = "=Sum(G" & LRow & ":" & "G" & ERow & ")"
           ActiveCell.Offset(2, 7).Formula = "=Sum(H" & LRow & ":" & "H" & ERow & ")"
           ActiveCell.Offset(2, 8).Formula = "=Sum(I" & LRow & ":" & "I" & ERow & ")"
           ActiveCell.Offset(2, 9).Formula = "=Sum(J" & LRow & ":" & "J" & ERow & ")"
           ActiveCell.Offset(2, 10).Formula = "=Sum(K" & LRow & ":" & "K" & ERow & ")"
           ActiveCell.Offset(2, 11).Formula = "=Sum(L" & LRow & ":" & "L" & ERow & ")"
           ActiveCell.Offset(2, 12).Formula = "=Sum(M" & LRow & ":" & "M" & ERow & ")"
           ActiveCell.Offset(2, 13).Formula = "=Sum(N" & LRow & ":" & "N" & ERow & ")"
           ActiveCell.Offset(2, 14).Formula = "=Sum(O" & LRow & ":" & "O" & ERow & ")"
           
            'MsgBox ActiveCell.Offset(2, 2).Address
            
          LRow = Cells(x + 1, 2).Row + 1
         
         
       
        
       
         End If
         
         
         ActiveCell.Offset(1, 0).Select
      Next
      MsgBox LRow
      Application.ScreenUpdating = True
End Sub




YC0m2LP
Hopefully this make sense.

I have this table I would like to loop through and change the subtotals to actual formulas.

https://imgur.com/YC0m2LP

My Thought was to loop through the A column because the subtotals are placed the row after the name. I thought if I could calculate the range between the last name I could use that to create a sum(). Any ideas on calculating that range?

The spreadsheet is much larger than that image.
Code:
Sub Cleanup()

countblank  'Function to get lastrow
      Dim x As Integer
      Dim CRng
      Application.ScreenUpdating = False
      ' Set numrows = number of rows of data.
      NumRows = ctblank
      ' Select cell a1.
      Range("A2").Select
      ' Establish "For" loop to loop "numrows" number of times.
      For x = 2 To NumRows
         If (Not IsEmpty(Cells(x, 1)) And Not ActiveCell.Row = 2) Then
       
            sRegion = Range(Cells(x, 2).Offset(1, 0).Address).CurrentRegion
         
         LRow = Cells(x, 2).Address
         MsgBox LRow & "-" & Cells(x, 2).Offset(1, 0).Address
         LRow = ""
         
         
         
         'ActiveCell.Offset(1, 3).Value = "=Sum(" & sRegion & ")"
       
        
       
         End If
         
         
         ActiveCell.Offset(1, 0).Select
      Next
      Application.ScreenUpdating = True
End Sub
 
Upvote 0

Forum statistics

Threads
1,224,818
Messages
6,181,152
Members
453,021
Latest member
Justyna P

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top