Get instant live expert help with Excel or Google Sheets
“My Excelchat expert helped me in less than 20 minutes, saving me what would have been 5 hours of work!”

Post your problem and you’ll get expert help in seconds.

Your message must be at least 40 characters
Our professional experts are available now. Your privacy is guaranteed.
All articles PIVOT TABLE Here is Why Your Next Pivot Table Should Have a Dynamic Range

Here is Why Your Next Pivot Table Should Have a Dynamic Range

We usually use pivot tables to help analyze and simplify massive amount of data.  However, it gets tricky when we add or remove values in our source table, and the pivot table doesn’t automatically update.  A dynamic range solves this problem. This step by step tutorial will walk through how to use a dynamic range in Pivot Tables

Setting up the Data

Here we have a table of product orders from January to February.  

Figure 1.  Data for our pivot table

Pivot Table without a Dynamic Range

First let us create a pivot table without a dynamic range, and try adding some data.  Let us see what happens to the pivot table.

Step 1. Select the range of cells that we want to analyze through a pivot table. In this case, we select cells B2:D10.  

Step 2. Click the Insert tab, then Pivot Table. This will launch the Create PivotTable dialog box.

Figure 2. Inserting a Pivot Table

Step 3. In the Create PivotTable dialog box, tick Existing Worksheet.  Click the bar for Location and then click cell F2. This will position the pivot table in the existing worksheet, at cell F2.

Figure 3. Inserting a pivot table in an existing worksheet

Step 4. In the PivotTable Field List,  tick Product and Orders, then drag Month to the Column Labels.  This will show the Sum of Orders for each product per month.  

Figure 4. Selecting the fields for values to show in a pivot table

Adding more data

Step 5. Now let’s add data for March in cells B11:D14.

Figure 5. Adding more values into our source data

Step 6. Press Ctrl + Alt + F to refresh the pivot table.  We will see that nothing happens.  Adding more data to our source table does not automatically expand our PivotTable.

Figure 6. Pivot table not updated after adding more values

Work-around:

We can change the data source to expand the data range.

Click any value in the pivot table, then click Change Data Source under the Options tab.  

Click the button beside the Table/Range bar and select cells B2:D14 to expand the data selection.   

Figure 7. Changing the data source for our pivot table

Click Yes to the Excel prompt message shown below:

Figure 8. Excel prompt message

The pivot table will then be updated, showing the March data.  

Figure 9. Updated pivot table after changing the data source

Removing Data

What happens when we remove data from our table?  Let us try and delete the March data from B11:D14 and refresh by pressing Ctrl + Alt + F.  

Figure 10. Pivot table not updated after removing some values

The resulting pivot table does not shrink with the data.  Instead, the pivot table shows blank spaces taking the place of the deleted data.  

The complications arising from adding or removing data will be addressed by using a dynamic range in our pivot table.

Creating a Dynamic Range

We will use the same starting data as the previous example.

Figure 11. Data for pivot table with dynamic range

One method to create a dynamic range is through the OFFSET formula.  

Syntax

=OFFSET(reference, rows, cols, [height], [width])

Where

  • Reference: the reference cell for our dynamic range
  • Rows: the number of rows relative to the reference cell that we want to refer to
  • Cols: the number of columns relative to the reference cell that we want to refer to
  • [height]: the number of rows for our dynamic range
  • [width]: the number of columns for our dynamic range

Step 1. Click the Formulas tab, then select Name Manager.

Figure 12. Creating a dynamic range through Name Manager

Step 2. In the Name Manager dialog box, click New.

Figure 13. Creating a new range

Step 3. Let us name the range “Data”.  In the Refers to bar,enter the formula:

=OFFSET(Sheet1!$B$2,0,0,COUNTA(Sheet1!$B:$B),COUNTA(Sheet1!$2:$2))

Figure 14. Entering the formula for dynamic range

Where

  • Our reference cell is B2
  • The offset is 0 rows and 0 columns, which means that our reference is still cell B2
  • The number of rows is determined by the COUNTA function: COUNTA(Sheet1!$B:$B) which returns the number if non-empty rows in column B
  • The number of columns is determined by the COUNTA function: COUNTA(Sheet1!$2:$2) which returns the number if non-empty columns in row 2

Pivot Table Having a Dynamic Range

Now that we have created a dynamic range, let’s see how it improves our pivot table.

Step 1.  Click the Insert tab and select PivotTable.

Step 2. In the Table/Range: bar, enter the name of our dynamic range “Data”.  

Step 3.  Tick Existing Worksheet

Step 4. Click the bar for Location bar, then click cell F3.  

Figure 15. Inserting a pivot table with dynamic range

Note:

We do not want to position our pivot table in row 2 to avoid complicating our dynamic range. Note that in our dynamic range formula, we set the number of columns by counting the non-empty cells in row 2.

Step 5.  Create our pivot table by clicking Product and Orders, then dragging Month into the column labels.

Figure 16. Creating our pivot table

Step 6. Now we add more rows into our source table.  Add the March data as shown below. Then press  Ctrl + Alt + F to refresh the  pivot table.

Figure 17. Pivot table automatically expands with more data

The pivot table expands with the data.

Step 7. Now let’s try and remove some values in our source table.

Delete the column “Month” then  press Ctrl + Alt + F to refresh.  

The pivot table automatically shrinks with our data, showing only the Sum of Orders.  .

Figure 18. Pivot table automatically shrinks with less data

With a dynamic range, working with pivot tables becomes easier and more manageable.  We can shrink and expand our pivot table effortlessly with any changes in our data.

Most of the time, the problem you will need to solve will be more complex than a simple application of a formula or function. If you want to save hours of research and frustration, try our live Excelchat service! Our Excel Experts are available 24/7 to answer any Excel question you may have. We guarantee a connection within 30 seconds and a customized solution within 20 minutes.

Did this post not answer your question? Get a solution from connecting with the expert.

Another blog reader asked this question today on Excelchat:
Solution examples
I need help fixing a Formula on Sheet 2, starting in Column G Row 22. In short, the formula should average the last six dollar amounts unless one of the last 6 dollar amounts is blank or 0. G56 on the same sheet works with the same logic but for only 3 months.
Solved by B. L. in 41 mins
Hello! There is a column with a certain number of rows in it. I need to calculate two averages: the average of every second row starting from the 1st one (aka the average of every odd-th cell) and the average of every second row starting from the 2nd one (aka the average of every even-th cell). I got tangled up with =OFFSET... Thanks!
Solved by C. J. in 37 mins
I have a Heading Title at the top of each column and keep my tally (formula) of that column in the second row. However, ever time I sort/filter my worksheet the second row also gets sorted and I lost my tally - which I use for analysis in the second sheet. I have tried freeze and split and neither works. Please help !
Solved by F. Q. in 40 mins
I'm trying to use offset in a match function. My table is pulling data from a different tab called "operator runs". I want my first row to look at data in B1:B104 for "sample-A" and match "BA" from C1:C104 to pull data from column D. My second row, I want to look up text from F1:F104 and match "BA" from G1:G104 and pull data from column H and so on, offset by 4 columns to the right each time. This is my current function. I don't know how to implement the offset function in this complicated function. =MATCH(1,('Operator runs'!$B$1:$B$104="Sample-A")*('Operator runs'!$C$1:$C$104="BA"),0)
Solved by O. L. in 40 mins
I'm looking to offset from =today(), for example: If cell A13=today(), display cell A20. If cell B13=today(), display cell B20. If cell C13=today(), display cell C20. I want to do this for 365 rows. Is there a simpler way of doing this than a huge nested IF statement?
Solved by K. H. in 34 mins

Leave a Comment

avatar

Subscribe to Excelchat.co

Get updates on helpful Excel topics

Subscribe to Excelchat.co

Did this post not answer your question?
Get a solution from connecting with the expert

Another blog reader asked this question today on Excelchat:

Post your problem and you’ll get expert help in seconds.

Your message must be at least 40 characters
Our professional experts are available now. Your privacy is guaranteed.
Trusted by people who work at
Amazon.com, Inc
Facebook, Inc
Accenture PLC
Siemens AG
Macy's
The Allstate Corporation
United Parcel Service
Dell Inc