Del- och totalsummor i VBA


I detta tips demonstreras tekniker för att utföra beräkningar, både för del- och totalsummor, och där vi dels infogar summa-funktionen och dels utför en summering innan summan anges i cell.

Här antas att vi har en tomrad mellan värdeserierna i B-kolumnen och att en totalsummering sker nedanför uppställningen.

 

Option Explicit  

Sub Skapa_Del_Total_Summeringar()

   '© 2003 Alla rättigheter XL-Dennis

   Dim wbBok As Workbook

   Dim wsBlad As Worksheet

   Dim rnData As Range, rnSumma As Range, rnCell As Range, rnTSumma As Range

   Dim lnTSumma As Long, i As Long

 

   On Error GoTo Errorhandling

 

   Set wbBok = ThisWorkbook

   Set wsBlad = wbBok.Worksheets("Blad1")

 

   With wsBlad

      Set rnData = .Range(.Range("B2"), .Range("B65536").End(xlUp))

      'För att få med den sista delsummeringen utökas cellområdet med 1 rad.

      Set rnData = rnData.Resize(rnData.Rows.Count + 1, 1)

   End With

 

   Application.ScreenUpdating = False

 

   For i = rnData.Rows.Count To 1 Step -1

      If IsEmpty(rnData(i, 1).Value) Then

         With rnData(i, 1)

            'Här identifieras cellområdet som ska summeras.

            Set rnSumma = Range(.Offset(-1), .Offset(-1).End(xlUp))

            'Här skrivs SUMMA-formeln in med absoluta cellreferenser.

            .Formula = "=SUM(" & rnSumma.Address & ")"

            .Font.Bold = True

         End With

      End If

   Next

 

   'Här beräknas totalsumman av delsummeringarna.

   lnTSumma = Application.WorksheetFunction.Sum(Range("B2:" & Range("B65536").End(xlUp).Address). _
                      SpecialCells(xlFormulas, xlNumbers))

 

   With wsBlad

      Set rnTSumma = .Range("B65536").End(xlUp).Offset(2, 0)

   End With

 

   'Här infogas den beräknade totalsumman.

   rnTSumma.Value = lnTSumma

 

   Application.ScreenUpdating = True

   Exit Sub

 

Errorhandling:

   MsgBox "Ett oväntat fel har inträffat: " _

         & Err.Description & " " & Err.Number, vbExclamation

End Sub