If you have a big Excel file, with lots of pivot tables, you might want to document everything that’s in the workbook. Maybe you inherited the workbook, and you’re not sure what’s in it. Or perhaps it’s a file that you only use occasionally, and it’s hard to remember what it contains. To get the details quickly, use the code shown below. This Excel macro lists all pivot tables and pivot fields in the active workbook.
List of Pivot Table and Pivot Fields
The macro (shown below) adds a new sheet to the active workbook. On that sheet, the macro creates a list of all the pivot fields, in all the pivot tables, on all sheets, in the active workbook.
Pivot Fields by Location
The visible pivot fields for each pivot table are listed by their location within the pivot table:
- Rows
- Columns
- Filters
- Values
Within each location, the fields are listed in order of their position.
Pivot Field Details
Each pivot field is listed in a separate row in the table, with the following details about the pivot field, and the pivot table that it’s in.
- sheet name
- pivot table name
- pivot table address
- pivot field’s caption
- field heading cell location
- source name
- location type (row, column, filter or value)
- position at that location
- sample data*
- formula (calculated fields)
- OLAP-Based (e.g. Data Model)
*Sample data and formulas are NOT shown for value fields, or OLAP-based pivot tables
Macro Code
Here is the code for the Excel macro that lists all pivot tables and pivot fields. Copy this macro code to a regular code module in your workbook, and run it when you need to create a list.
Sub LocList_ALL_PTs_PFs() 'contextures.com 'lists all pivot tables in ' active workbook 'use the Notes column to ' add comments about fields Dim lRow As Long Dim ws As Worksheet Dim wsList As Worksheet Dim pt As PivotTable Dim pf As PivotField Dim df As PivotField Dim pi As PivotItem Dim lLoc As Long Dim lPos As Long Dim pfCount As Long Dim myList As ListObject Dim bOLAP As Boolean Application.DisplayAlerts = False On Error GoTo errHandler Set wsList = Sheets.Add lRow = 2 With wsList .Cells(1, 1).Value = "Sheet" .Cells(1, 2).Value = "PT Name" .Cells(1, 3).Value = "PT Address" .Cells(1, 4).Value = "Caption" .Cells(1, 5).Value = "Heading" .Cells(1, 6).Value = "Source Name" .Cells(1, 7).Value = "Location" .Cells(1, 8).Value = "Position" .Cells(1, 9).Value = "Sample Item" .Cells(1, 10).Value = "Formula" .Cells(1, 11).Value = "OLAP" .Rows(1).Font.Bold = True For Each ws In ActiveWorkbook.Worksheets For Each pt In ws.PivotTables bOLAP = pt.PivotCache.OLAP For pfCount = 1 To pt.RowFields.Count Set pf = pt.RowFields(pfCount) lLoc = pf.Orientation If pf.Caption <> "Values" Then .Cells(lRow, 1).Value = ws.Name .Cells(lRow, 2).Value = pt.Name .Cells(lRow, 3).Value = pt.TableRange2.Address .Cells(lRow, 4).Value = pf.Caption .Cells(lRow, 5).Value = pf.LabelRange.Address .Cells(lRow, 6).Value = pf.SourceName .Cells(lRow, 7).Value = lLoc & " - Row" .Cells(lRow, 8).Value = pfCount On Error Resume Next If pf.PivotItems.Count > 0 _ And bOLAP = False Then .Cells(lRow, 9).Value _ = pf.PivotItems(1).Value End If On Error GoTo errHandler .Cells(lRow, 11).Value = bOLAP lRow = lRow + 1 lLoc = 0 End If Next pfCount For pfCount = 1 To pt.ColumnFields.Count Set pf = pt.ColumnFields(pfCount) lLoc = pf.Orientation If pf.Caption <> "Values" Then .Cells(lRow, 1).Value = ws.Name .Cells(lRow, 2).Value = pt.Name .Cells(lRow, 3).Value = pt.TableRange2.Address .Cells(lRow, 4).Value = pf.Caption .Cells(lRow, 5).Value = pf.LabelRange.Address .Cells(lRow, 6).Value = pf.SourceName .Cells(lRow, 7).Value = lLoc & " - Column" .Cells(lRow, 8).Value = pfCount On Error Resume Next If pf.PivotItems.Count > 0 _ And bOLAP = False Then .Cells(lRow, 9).Value _ = pf.PivotItems(1).Value End If On Error GoTo errHandler .Cells(lRow, 11).Value = bOLAP lRow = lRow + 1 lLoc = 0 End If Next pfCount For pfCount = 1 To pt.PageFields.Count Set pf = pt.PageFields(pfCount) lLoc = pf.Orientation .Cells(lRow, 1).Value = ws.Name .Cells(lRow, 2).Value = pt.Name .Cells(lRow, 3).Value = pt.TableRange2.Address .Cells(lRow, 4).Value = pf.Caption .Cells(lRow, 5).Value = pf.LabelRange.Address .Cells(lRow, 6).Value = pf.SourceName .Cells(lRow, 7).Value = lLoc & " - Filter" .Cells(lRow, 8).Value = pfCount On Error Resume Next If pf.PivotItems.Count > 0 _ And bOLAP = False Then .Cells(lRow, 9).Value _ = pf.PivotItems(1).Value End If On Error GoTo errHandler .Cells(lRow, 11).Value = bOLAP lRow = lRow + 1 lLoc = 0 Next pfCount For pfCount = 1 To pt.DataFields.Count Set pf = pt.DataFields(pfCount) lLoc = pf.Orientation Set df = pt.PivotFields(pf.SourceName) .Cells(lRow, 1).Value = ws.Name .Cells(lRow, 2).Value = pt.Name .Cells(lRow, 3).Value = pt.TableRange2.Address .Cells(lRow, 4).Value = df.Caption .Cells(lRow, 5).Value = _ pf.LabelRange.Cells(1).Address .Cells(lRow, 6).Value = df.SourceName .Cells(lRow, 7).Value = lLoc & " - Data" .Cells(lRow, 8).Value = pfCount 'sample data not shown for value fields On Error Resume Next 'print formula for calculated fields '.Cells(lRow, 6).Value = " " & pf.Formula If df.IsCalculated = True Then .Cells(lRow, 10).Value = _ Right(df.Formula, Len(df.Formula) - 1) End If On Error GoTo errHandler .Cells(lRow, 11).Value = bOLAP lRow = lRow + 1 lLoc = 0 Set df = Nothing Next pfCount Next pt Next ws .Columns("A:K").EntireColumn.AutoFit Set myList = .ListObjects.Add(xlSrcRange, _ Range("A1").CurrentRegion) End With MsgBox "Done" exitHandler: Application.DisplayAlerts = True Exit Sub errHandler: MsgBox "Could not create list" Resume exitHandler End Sub
Get the Sample File
To get the Excel workbook with this macro, and the sample data and pivot table, go to the Macro Lists Pivot Fields page, on my Contextures website.
There are other macros on that page too, which list the pivot fields for a specific pivot table.
____________
Excel Macro Lists All Pivot Tables and Pivot Fields
____________
Cool, is this built into Pivot Power Free or Pivot Power Premium? If not would be a good addition instead of having to have a separate macos. This along with the Pivot Table Sorting Macros would also be nice in Pivot Power.
Kim
Thanks, Kim, and it’s not in the PPP now, but I’ll add it for the next version
Awesome excel commands very good thanks