How to filter Pivot table based on a specific cell value in Excel?

Normally, we are filtering data in a Pivot Table by checking values from the drop-down list as the left screenshot shown. If you want to make a Pivot Table more dynamic by filtering, you can try to filter it based on value in a specific cell. The VBA method in this article will help you solving the problem.

Normally, we are filtering data in a Pivot Table by checking values from the drop-down list as the left screenshot shown. If you want to make a Pivot Table more dynamic by filtering, you can try to filter it based on value in a specific cell. The VBA method in this article will help you solving the problem.

Filter Pivot Table based on a specific cell value with VBA code


Filter Pivot Table based on a specific cell value with VBA code

The following VBA code can help you filtering a Pivot Table based on a specific cell value in Excel. Please do as follows.

1. Please enter a value you will filter Pivot Table based on into a cell in advance (here I select cell H6).

2. Open the worksheet contains the Pivot Table you will filter by cell value. Then right click the sheet tab and select View Code from the context menu. See screenshot:

3. In the opening Microsoft Visual Basic for Applications window, copy below VBA code into the Code window.

VBA code: Filter Pivot Table based on cell value

Private Sub Worksheet_Change(ByVal Target As Range)
'Update by Extendoffice 20180702
    Dim xPTable As PivotTable
    Dim xPFile As PivotField
    Dim xStr As String
    On Error Resume Next
    If Intersect(Target, Range("H6:H7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
    Set xPFile = xPTable.PivotFields("Category")
    xStr = Target.Text
    xPFile.ClearAllFilters
    xPFile.CurrentPage = xStr
    Application.ScreenUpdating = True
End Sub

Notes: In the code,

1) “Sheet1” is the name of the worksheet.
2) “PivotTable2” is the name of the Pivot Table.
3) The filtering field in the pivot table is called "Category".
4) The value you want to filter the pivot table is placed in cell H6.
You can change the above variable values as you need.

4. Press the Alt + Q keys to close the Microsoft Visual Basic for Applications window.

Then the Pivot Table is filtering based on the value in cell H6 as below screenshot shown:

You can change the cell value to others as you need.

Note: Values you type in cell H6 should exactly match the values in the Category drop down list of Pivot Table.


Related articles:


The Best Office Productivity Tools

Kutools for Excel Solves Most of Your Problems, and Increases Your Productivity by 80%

  • Reuse: Quickly insert complex formulas, charts and anything that you have used before; Encrypt Cells with password; Create Mailing List and send emails...
  • Super Formula Bar (easily edit multiple lines of text and formula); Reading Layout (easily read and edit large numbers of cells); Paste to Filtered Range...
  • Merge Cells/Rows/Columns without losing Data; Split Cells Content; Combine Duplicate Rows/Columns... Prevent Duplicate Cells; Compare Ranges...
  • Select Duplicate or Unique Rows; Select Blank Rows (all cells are empty); Super Find and Fuzzy Find in Many Workbooks; Random Select...
  • Exact Copy Multiple Cells without changing formula reference; Auto Create References to Multiple Sheets; Insert Bullets, Check Boxes and more...
  • Extract Text, Add Text, Remove by Position, Remove Space; Create and Print Paging Subtotals; Convert Between Cells Content and Comments...
  • Super Filter (save and apply filter schemes to other sheets); Advanced Sort by month/week/day, frequency and more; Special Filter by bold, italic...
  • Combine Workbooks and WorkSheets; Merge Tables based on key columns; Split Data into Multiple Sheets; Batch Convert xls, xlsx and PDF...
  • More than 300 powerful features. Supports Office/Excel 2007-2019 and 365. Supports all languages. Easy deploying in your enterprise or organization. Full features 30-day free trial. 60-day money back guarantee.
kte tab 201905

Office Tab Brings Tabbed interface to Office, and Make Your Work Much Easier

  • Enable tabbed editing and reading in Word, Excel, PowerPoint, Publisher, Access, Visio and Project.
  • Open and create multiple documents in new tabs of the same window, rather than in new windows.
  • Increases your productivity by 50%, and reduces hundreds of mouse clicks for you every day!
officetab bottom
Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Heather · 28 days ago
    Hi, I can't seem to get this to work. The cell I want to refer to is pulled in through from a formula - would this be why the filter can't find it as it is looking at the formula rather than the value that the formula returns?
    Thanks in advance
    Heather McDonagh
  • To post as a guest, your comment is unpublished.
    Aravind · 2 months ago
    Hello for some reason, this macro after entering into the visual basic page, does not show up at all. I am unable to enable/run this macro, i have checked all the trust center setting, but nothing happens, please help me
  • To post as a guest, your comment is unpublished.
    Ignacia · 9 months ago
    Hey! Thanks for your macro.

    I was trying to use it for more than one pivot table in the same page, but it does not work. I wrote it like this:

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xPTable1 As PivotTable
    Dim xPFile1 As PivotField
    Dim xStr1 As String
    On Error Resume Next
    If Intersect(Target, Range("D7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable1 = Worksheets("BUSCADOR").PivotTables("PV_ETAPA1")
    Set xPFile1 = xPTable1.PivotFields("ETAPA1")
    xStr1 = Target.Text
    xPFile1.ClearAllFilters
    xPFile1.CurrentPage = xStr1
    Application.ScreenUpdating = True

    Dim xPTable2 As PivotTable
    Dim xPFile2 As PivotField
    Dim xStr2 As String
    On Error Resume Next
    If Intersect(Target, Range("G7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable2 = Worksheets("BUSCADOR").PivotTables("PV_ETAPA2")
    Set xPFile2 = xPTable2.PivotFields("ETAPA2")
    xStr2 = Target.Text
    xPFile2.ClearAllFilters
    xPFile2.CurrentPage = xStr2
    Application.ScreenUpdating = True

    End Sub

    Maybe you can help me out!

    Thanks in advance!
    • To post as a guest, your comment is unpublished.
      michael · 3 months ago
      Hi


      thanks for the Macro


      I am Trying the same thing but cannot get it to work on 2 tables. they are both looking at the same cell just 2 different pivot tables


      thanks
  • To post as a guest, your comment is unpublished.
    Justin · 1 years ago
    How would you do this with a report filter that has a hierarchy?

  • To post as a guest, your comment is unpublished.
    Daniel · 1 years ago
    Using this code (updated for my variables of course), when changing the field, the filter changes momentarily to the correct one, and then clears itself almost immediately. Trying to figure out why it's doing this (wondering if it has something to do with the ClearAllFilters at the end of the sub?)