Skip to main content

How to create dynamic named range in Excel?

Author: Xiaoyang Last Modified: 2013-12-09

Normally, Named Ranges are very useful for Excel users, you can define a series of values in a column, give that column a name, and then you can refer to that range by name instead of its cell references. But most time, you need to add new data to expand the data values of your referred range in future. In this case, you have to go back to Formulas > Name Manager and redefine the range to include the new value. To avoid this, you can create a dynamic named range which means you don´t need to adjust cell references every time when you add a new row or column to the list.

Create dynamic named range in Excel by creating a table

Create dynamic named range in Excel with Function

Create dynamic named range in Excel with VBA code

arrow blue right bubble Create dynamic named range in Excel by creating a table

If you are using Excel 2007 or later versions, the easiest way to create a dynamic named range is to create a named Excel table.

Let’s say, you have a range of following data which need to become dynamic named range.


1. Firstly, I will define range names for this range. Select the range A1:A6 and enter the name Date into the Name Box, then press Enter key. To define a name for range B1:B6 as Saleprice with the same way. At the same time, I create a formula =sum(Saleprice) in a blank cell, see screenshot:


2. Select the range and click Insert > Table, see screenshot:


3. In the Create Table prompt box, check My table has headers (if the range do not have headers, uncheck it), click OK button, and the range data has been converted to table. See screenshots:

doc-dynamic-range4 -2 doc-dynamic-range5

4. And when you enter new values after the data, the named range will automatically adjust and the created formula will be also changed as well. See following screenshots:

doc-dynamic-range6 -2 doc-dynamic-range7


1. Your new entering data must be adjacent to the above data, it means there is no blank rows or columns between the new data and the existing data.

2. In the table, you are able to insert data between the existing values.

arrow blue right bubble Create dynamic named range in Excel with Function

In Excel 2003 or earlier version, the first method will not be available, so here is another way for you. The following OFFSET( ) function can do this favor for you ,but it is somewhat troublesome. Supposing I have a range of data which contains the range names that I have defined, for example, A1: A6 the range name is Date, and B1:B6 range name is Saleprice, at the same time, I create a formula for the Saleprice. See screenshot:


You can change the range names to dynamic range names with following steps:

1. Go to click Formulas > Name Manager, see screenshot:


2. In the Name Manager dialog box, select the item that you want to use, and click Edit button.


3. In the popped out Edit Name dialog, enter this formula =OFFSET(Sheet1!$A$1, 0, 0, COUNTA($A:$A), 1) into the Refers to text box, see screenshot:


4. Then click OK, and then repeat the step2 and step3 to copy this formula =OFFSET(Sheet1!$B$1, 0, 0, COUNTA($B:$B), 1) into the Refers to text box for the Saleprice range name.

5. And the dynamic named ranges has been created. When you enter new values after the data, the named range will automatically adjust and the created formula will also be changed as well. See screenshots:

doc-dynamic-range6 -2 doc-dynamic-range7

Note: If there are blank cells in the middle of your range, the result of your formula will be wrong. That’s because the non-blank cells are not counted, so your range will be shorter than it should, and the last cells in the range will be left off.

Tip: explanation for this formula:

  • =OFFSET(reference,rows,cols,[height],[width])
  • -1
  • =OFFSET(Sheet1!$A$1, 0, 0, COUNTA($A:$A), 1)
  • reference corresponds to the starting cell position, in this example Sheet1!$A$1;
  • row refers to the number of rows you are going to move downwards, relative to the starting cell (or upwards, if you use a negative value.), in this example, 0 indicates the list will start from the first row down
  • column corresponds to the number of columns you will move to the right, relative to the starting cell (or to the left, using a negative value.), in the above example formula, 0 indicates expand 0 columns to the right.
  • [height] corresponds to the height (or number of rows) of the range starting at the adjusted position. $A:$A, it will count all the items entered in column A.
  • [width] corresponds to the width (or number of columns) of the range starting at the adjusted position. In the above formula, the list will be 1 column wide.

You can change these arguments to your need.

arrow blue right bubble Create dynamic named range in Excel with VBA code

If you have multiple columns, you could repeat and enter individual formula for all the remaining columns, but that would be a long, repetitive process. For making things easier, you can use a code to create the dynamic named range automatically.

1. Activate your worksheet.

2. Hold down the ALT + F11 keys, and it opens the Microsoft Visual Basic for Applications window.

3. Click Insert > Module, and paste the following code in the Module Window.

Vba code: create dynamic named range

Sub CreateNamesxx()
'Update 20131128
Dim wb As Workbook, ws As Worksheet
Dim lrow As Long, lcol As Long, i As Long
Dim myName As String, Start As String
Const Rowno = 1
Const Colno = 1
Const Offset = 1
On Error Resume Next
Set wb = ActiveWorkbook
Set ws = ActiveSheet
lcol = ws.Cells(Rowno, 1).End(xlToRight).Column
lrow = ws.Cells(Rows.Count, Colno).End(xlUp).Row
Start = Cells(Rowno, Colno).Address
wb.Names.Add Name:="lcol", RefersTo:="=COUNTA($" & Rowno & ":$" & Rowno & ")"
wb.Names.Add Name:="lrow", RefersToR1C1:="=COUNTA(C" & Colno & ")"
wb.Names.Add Name:="myData", RefersTo:="=" & Start & ":INDEX($1:$65536," & "lrow," & "Lcol)"
For i = Colno To lcol
    myName = Replace(Cells(Rowno, i).Value, " ", "_")
    If myName <> "" Then
        wb.Names.Add Name:=myName, RefersToR1C1:="=R" & Rowno + Offset & "C" & i & ":INDEX(C" & i & ",lrow)"
    End If
End Sub

4. Then press F5 key to run the code, and there will be generated some dynamic named ranges which are named with the first row values and it also creates a dynamic range called MyData which covers the whole data.

5. When you enter new values after the rows or columns, the range will be expanded as well. See screenshots:



1. With this code, the range names are not displayed in the Name Box, in order to view and use the range names conveniently, I have installed Kutools for Excel, with its Navigation Pane, the created dynamic range names are listed.

2. With this code, the whole range of the data can be expanded vertically or horizontally, but to remember there shouldn’t have blank rows or columns between the data when you enter new values.

3. When you use this code, your data range should be start at cell A1.

Related article:

How to auto update a chart after entering new data in Excel?

Best Office Productivity Tools

🤖 Kutools AI Aide: Revolutionize data analysis based on: Intelligent Execution   |  Generate Code  |  Create Custom Formulas  |  Analyze Data and Generate Charts  |  Invoke Kutools Functions
Popular Features: Find, Highlight or Identify Duplicates   |  Delete Blank Rows   |  Combine Columns or Cells without Losing Data   |   Round without Formula ...
Super Lookup: Multiple Criteria VLookup    Multiple Value VLookup  |   VLookup Across Multiple Sheets   |   Fuzzy Lookup ....
Advanced Drop-down List: Quickly Create Drop Down List   |  Dependent Drop Down List   |  Multi-select Drop Down List ....
Column Manager: Add a Specific Number of Columns  |  Move Columns  |  Toggle Visibility Status of Hidden Columns  |  Compare Ranges & Columns ...
Featured Features: Grid Focus   |  Design View   |   Big Formula Bar    Workbook & Sheet Manager   |  Resource Library (Auto Text)   |  Date Picker   |  Combine Worksheets   |  Encrypt/Decrypt Cells    Send Emails by List   |  Super Filter   |   Special Filter (filter bold/italic/strikethrough...) ...
Top 15 Toolsets12 Text Tools (Add Text, Remove Characters, ...)   |   50+ Chart Types (Gantt Chart, ...)   |   40+ Practical Formulas (Calculate age based on birthday, ...)   |   19 Insertion Tools (Insert QR Code, Insert Picture from Path, ...)   |   12 Conversion Tools (Numbers to Words, Currency Conversion, ...)   |   7 Merge & Split Tools (Advanced Combine Rows, Split Cells, ...)   |   ... and more

Supercharge Your Excel Skills with Kutools for Excel, and Experience Efficiency Like Never Before. Kutools for Excel Offers Over 300 Advanced Features to Boost Productivity and Save Time.  Click Here to Get The Feature You Need The Most...


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!
Comments (4)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
really, really not helpful
This comment was minimized by the moderator on the site
please help i am trying to create a dynamic named range on excel 2016 typing "=offset(DATAENTRY!$B$6,,,counta(DATAENTRY!$B$6:$B$13))" but still it gives me an error saying it is not a formula.
This comment was minimized by the moderator on the site
You are a very good teacher: 1) step-by-step approach; 2) you do not bore the student with obvious material or conclusions; 3) yet you include all necessary material. I look forward to more tutorials from you.
This comment was minimized by the moderator on the site
Thanks for good article
There are no comments posted here yet
Leave your comments
Posting as Guest
Rate this post:
0   Characters
Suggested Locations