How to create dynamic named range in Excel?
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.
- Reuse Anything: Add the most used or complex formulas, charts and anything else to your favorites, and quickly reuse them in the future.
- More than 20 text features: Extract Number from Text String; Extract or Remove Part of Texts; Convert Numbers and Currencies to English Words.
- Merge Tools: Multiple Workbooks and Sheets into One; Merge Multiple Cells/Rows/Columns Without Losing Data; Merge Duplicate Rows and Sum.
- Split Tools: Split Data into Multiple Sheets Based on Value; One Workbook to Multiple Excel, PDF or CSV Files; One Column to Multiple Columns.
- Paste Skipping Hidden/Filtered Rows; Count And Sum by Background Color; Send Personalized Emails to Multiple Recipients in Bulk.
- Super Filter: Create advanced filter schemes and apply to any sheets; Sort by week, day, frequency and more; Filter by bold, formulas, comment...
- More than 300 powerful features; Works with Office 2007-2019 and 365; Supports all languages; Easy deploying in your enterprise or organization.
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:
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:
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.
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:
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(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.
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 Next 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.