In some situations, you might want to send someone a copy of a pivot table, but as values only, not an interactive pivot table. That would give them a summary of the data, but without access to the underlying details, which might be confidential. If you want to copy the pivot table formatting too, it requires extra effort, and the manual steps are shown below, as well as a macro which makes it easier to copy pivot table values and formatting.
Manually Copy Pivot Table Values and Formatting
If you only need to do this occasionally, this video shows how to manually copy pivot table values and formatting, by using the Clipboard. I learned this trick from John Walkenbach.
The written steps are on the Copy Pivot Table Formatting page of my Contextures website.
Macro to Copy Pivot Table Values and Formatting
If you need to copy pivot table values and formatting frequently, it will save time if you use a macro. This macro uses a different technique to complete this task.
Before you run the macro, select any cell in the pivot table that you want to copy. In the screen shot below, there are two fields in the Filters area, arranged vertically.
- First, the macro copies the body of the pivot table, and pastes that onto a new worksheet.
- Next, the macro copies the Filters area, and pastes that onto the new sheet, above the body.
NOTE: Report filter formatting will not be copied if there are multiple filter fields, horizontally arranged, like “Employee” and “Unit Cost”, shown below. The filter layout setting can be changed in the Pivot Table Options.
Macro Code
Here is the code for the macro to copy pivot table values and formatting. Select a pivot table cell before you run the macro.
Copy this macro to a regular code module in Excel. Then, select a cell in any pivot table, and run the macro.
Sub PivotCopyFormatValues() 'select pivot table cell first Dim ws As Worksheet Dim pt As PivotTable Dim rngPT As Range Dim rngPTa As Range Dim rngCopy As Range Dim rngCopy2 As Range Dim lRowTop As Long Dim lRowsPT As Long Dim lRowPage As Long Dim msgSpace As String On Error Resume Next Set pt = ActiveCell.PivotTable Set rngPTa = pt.PageRange On Error GoTo errHandler If pt Is Nothing Then MsgBox "Could not copy pivot table for active cell" GoTo exitHandler End If If pt.PageFieldOrder = xlOverThenDown Then If pt.PageFields.Count > 1 Then msgSpace = "Horizontal filters with spaces." _ & vbCrLf _ & "Could not copy Filters formatting." End If End If Set rngPT = pt.TableRange1 lRowTop = rngPT.Rows(1).Row lRowsPT = rngPT.Rows.Count Set ws = Worksheets.Add Set rngCopy = rngPT.Resize(lRowsPT - 1) Set rngCopy2 = rngPT.Rows(lRowsPT) rngCopy.Copy Destination:=ws.Cells(lRowTop, 1) rngCopy2.Copy _ Destination:=ws.Cells(lRowTop + lRowsPT - 1, 1) If Not rngPTa Is Nothing Then lRowPage = rngPTa.Rows(1).Row rngPTa.Copy Destination:=ws.Cells(lRowPage, 1) End If ws.Columns.AutoFit If msgSpace <> "" Then MsgBox msgSpace End If exitHandler: Exit Sub errHandler: MsgBox "Could not copy pivot table for active cell" Resume exitHandler End Sub
Get the Sample File
Go to my Contextures site, to get the sample file with the macro to copy pivot table values and formatting. The zipped Excel file is in xlsb format, and contains one macro, so be sure to enable macros when you open the workbook, if you want to test the macro.
______________________
Copy Pivot Table Values and Formatting
______________________