How to create a summary table from multiple PivotTables using VBA?

Creating a summary table from multiple PivotTables using VBA involves automating Excel to combine the data from several PivotTables into one consolidated table. Here’s a step-by-step guide to help you accomplish this:

Step 1: Prepare Your Environment

Before writing your VBA code, ensure that:

  • All PivotTables you want to summarize are created and named appropriately.
  • You identify their location in terms of worksheet names and cell references.

Step 2: Write VBA Code to Consolidate Data

  • Open the VBA Editor:
    • Press `ALT + F11` in Excel.
  • Insert a New Module:
    • Right-click on any of the items listed under your workbook in the “VBAProject” pane.
    • Select `Insert` > `Module`.
  • Write the VBA Code:

Here’s an example of VBA code to consolidate data from multiple PivotTables:

   Sub CreateSummaryFromPivotTables()
       Dim wsSummary As Worksheet
       Dim ws As Worksheet
       Dim pvt As PivotTable
       Dim rngSource As Range
       Dim rngTarget As Range
       Dim lastRow As Long
       Dim lastCol As Long
       Dim summaryStartCell As Range
       
       ' Create or clear a summary worksheet
       On Error Resume Next
       Set wsSummary = ThisWorkbook.Worksheets("Summary")
       If wsSummary Is Nothing Then
           Set wsSummary = ThisWorkbook.Worksheets.Add
           wsSummary.Name = "Summary"
       End If
       wsSummary.Cells.Clear
       On Error GoTo 0
       
       ' Set the starting cell for the summary table
       Set summaryStartCell = wsSummary.Range("A1")
       
       ' Loop through each worksheet
       For Each ws In ThisWorkbook.Worksheets
           ' Loop through all PivotTables in the worksheet
           For Each pvt In ws.PivotTables
               ' Identify the data range of the PivotTable
               With pvt.TableRange1
                   lastRow = .Rows.Count
                   lastCol = .Columns.Count
                   Set rngSource = .Resize(lastRow, lastCol)
               End With
               
               ' Find the next available row in the summary sheet
               If IsEmpty(summaryStartCell) Then
                   Set rngTarget = summaryStartCell
               Else
                   Set rngTarget = wsSummary.Cells(wsSummary.Rows.Count, "A").End(xlUp).Offset(1, 0)
               End If
               
               ' Copy the PivotTable data to the summary sheet
               rngSource.Copy rngTarget
               
               ' Optional: Add a separator row for readability
               Application.CutCopyMode = False
               rngTarget.Offset(lastRow).EntireRow.Insert
           Next pvt
       Next ws
       
       MsgBox "Summary table has been created successfully!", vbInformation
   End Sub

Step 3: Run the VBA Code

  • Save your workbook as a macro-enabled workbook (*.xlsm).
  • In the VBA editor, with the module containing your code open, press `F5` or go to `Run` > `Run Sub/UserForm` to execute the code.

Step 4: Final Adjustments

  • After running the code, check the “Summary” sheet. Make adjustments such as formatting if necessary.
  • Ensure that the data aligns as expected, particularly if there are headers in each PivotTable.

Tips:

  • This code assumes that each PivotTable has consistent column headers for proper consolidation.
  • Consider adding checks to handle situations where PivotTable structures vary.
  • Customize the separator row or other stylistic elements to suit your reporting needs.

With this setup, you should be able to consolidate data from multiple PivotTables into a single comprehensive summary table in Excel using VBA.

Unlock Your Potential

Excel

Basic - Advanced

Access

Access Basic - Advanced

Power BI

Power BI Basic - Advanced

Help us grow the project