×

Quickly Change Pivot Table Field Calculation From Count To Sum

By Chris Newman •  Updated: 08/13/14 •  6 min read
Quickly Change Pivot Table Field Calculation From Count To Sum

A Quick Demo Using The Solution

Post Gif Image

Do You Have This Pivot Table Problem?

I absolutely hate wasting time!  Any time I'm repeating something over and over again just to get the proper format, I want to gouge my eyes out! Pivot Table creation and formatting is very high on my list as it can be very manual.  Have you every created a multi-column pivot table where you wanted to sum and the pivot table defaulted to counting?  This happens to me all the time and unfortunately you can batch change a pivot field's calculation.  You have to go into each individual column and change the Summarize By calculation.  Well, in order to save my eyes from a gouging (they are kind of important for a data analyst) I decided to create a personal macro to do all this repetitive mouse clicking for me.  What I came up with was a simple and very fast way to easily toggle between summing and counting my pivot table data.  I'll go ahead and give you the code first and provide a little commentary below it for those who need some help understanding what is going on.  Enjoy!

Sub PivotToggleCountSum()
'PURPOSE: Toggles between Counting and Summing Pivot Table data columns from current cell selection
'SOURCE: www.TheSpreadsheetGuru.com
    
Dim pf As PivotField
Dim AnyPFs As Boolean
Dim cell As Range

AnyPFs = False

'Optimize Code
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual

'Cycle through first row of selected cells
  For Each cell In Selection.Rows(1).Cells
    On Error Resume Next
      Set pf = cell.PivotField
    On Error GoTo 0
    
    If Not pf Is Nothing Then
      'Toggle between Counting and Summing
        pf.Function = xlCount + xlSum - pf.Function
      
      'Format Numbers with Custom Rule
        pf.NumberFormat = "#,##0_);(#,##0);-"
      
      'No need for error message
        AnyPFs = True
      
      'Reset pf variable value
        Set pf = Nothing
    End If
  Next cell

'Did user select cells inside a Pivot Field?
  If AnyPFs = False Then MsgBox "There were no cells inside a Pivot Field selected."

'Optimize Code
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True

End Sub

Only Looking At The First Row

For Each cell In Selection.Rows(1).Cells
  'Insert Code Here.....
Next cell

To speed up this code, I used a little Pivot Table logic.  Since summarizing a Pivot Field can only be applied to an entire column, I only need to look at a single cell in each Pivot Table Field.  Instead of looping through every cell in the user selection range, I narrow the range I want to work with down to just the first row of the user's selection.

A Little Constant Logic

On Error Resume Next
  Set pf = cell.PivotField
On Error GoTo 0

'Toggle between Counting and Summing
  pf.Function = xlCount + xlSum - pf.Function

I could have used an If/Then statement to toggle between the Sum and Count functions but I wanted to show you an alternative (some may say more creative) way of toggling.  Each one of the Pivot Field Functions has a constant (a fancy computer programming word for numerical value) associated with it and guess what....we can do math with those values!  By looking in the Visual Basic Editor's Object Library (shortcut F2) we can determine that xlSum's constant value is -4157 and xlCount's constant value is -4112.  Let's assume that the xlSum is currently what the Pivot Fields are being summarized by.  If we look at our VBA code's calculation, our values would be the following:

  • xlCount = -4112
  • xlSum = -4157
  • pf.Function (current pivot field calculation)= -4157

Our calculation would be pf.Function = (4112) + (4157) - (4157)  and pf.Function = -4112.  So after the code would have run, the pivot field function would have been switched from xlSum to xlCount.  Pretty cool, huh?  Here are all the constant values for the xlConsolidationFunction collection in case you are wanting to toggle between other Pivot Field Functions.

xlConsolidationFunctionConstant
xlAverage-4106
xlCount-4112
xlcountNums-4113
xlMax-4136
xlMin-4139
xlProduct-4149
xlStDev-4155
xlStDevP-4156
xlSum-4157
xlUnknown1000
xlVar-4164
xlVarP-4165

Add In A Splash Of Formatting

'Format Numbers with Custom Rule
  pf.NumberFormat = "#,##0_);(#,##0);-"

I threw in one of my "go-to" number formats as I also like to change my number formatting to something that includes comma separators.  You can modify this line to any format you would like or take it out completely if you don't wish to change the number format.

Now You’re Ready To Format Some Pivot Fields!

Now you have the VBA code and understand what it does.  Add this snippet to your personal macros (how to create a personal macro file) and start saving time while creating all those vital Pivot Tables. Leave a comment below if you have any questions or think of any modifications that may make this code more versatile!

Download Example Excel File

If you would like to get a copy of the Excel file I used throughout this article, feel free to directly download the spreadsheet by clicking the download button below.


Keep Learning

Chris Newman

Chris Newman

Chris is a finance professional and Excel MVP recognized by Microsoft since 2016. With his expertise, he founded TheSpreadsheetGuru blog to help fellow Excel users, where he shares his vast creative solutions & expertise. In addition, he has developed over 7 widely-used Excel Add-ins that have been embraced by individuals and companies worldwide.