Finance

Charts

Statistics

Macros

Search

Create Dynamic Range Creativity with Excel VBA

This example demonstrates how to create a dynamic named range that expands or contracts based on the number of rows and columns in a dataset. I will provide a thorough explanation after the code.

Sub CreateDynamicRange()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim lastCol As Long
    Dim rngName As String
    Dim dynamicRange As String   
    ' Set the worksheet where the data is located
    Set ws = ThisWorkbook.Sheets("Sheet1")   
    ' Find the last used row in column A (assuming column A has the main data)
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row   
    ' Find the last used column in row 1 (assuming row 1 contains headers)
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column   
    ' Define the name of the dynamic range
    rngName = "DynamicDataRange"   
    ' Construct the range reference using R1C1 notation
    dynamicRange = ws.Name & "!" & ws.Cells(1, 1).Address(False, False) & ":" & ws.Cells(lastRow, lastCol).Address(False, False)   
    ' Delete the existing named range if it exists
    On Error Resume Next
    ThisWorkbook.Names(rngName).Delete
    On Error GoTo 0   
    ' Create a new named range
    ThisWorkbook.Names.Add Name:=rngName, RefersTo:="=" & dynamicRange   
    ' Notify the user
    MsgBox "Dynamic named range '" & rngName & "' has been created successfully!", vbInformation, "Success"  
End Sub

Detailed Explanation of the Code

  1. Setting Up the Worksheet

Set ws = ThisWorkbook.Sheets(« Sheet1 »)

  • This line assigns the worksheet named « Sheet1 » to the variable ws. You can change « Sheet1 » to the actual sheet name where your data is located.
  1. Finding the Last Row

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

  • This line finds the last occupied row in Column A by using End(xlUp).
  • It simulates pressing Ctrl + Up Arrow from the bottom of the column to locate the last non-empty cell.
  1. Finding the Last Column

lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

  • This line finds the last used column in Row 1 by using End(xlToLeft), which simulates pressing Ctrl + Left Arrow from the last column.
  1. Defining the Named Range

rngName = « DynamicDataRange »

  • This sets the name of the range as « DynamicDataRange ». You can rename this as needed.

dynamicRange = ws.Name & « ! » & ws.Cells(1, 1).Address(False, False) & « : » & ws.Cells(lastRow, lastCol).Address(False, False)

  • This constructs the dynamic range reference using R1C1-style addressing.
  • ws.Cells(1,1).Address(False, False) returns A1.
  • ws.Cells(lastRow, lastCol).Address(False, False) returns the last used cell (e.g., D10 if data ends at row 10, column 4).
  1. Deleting the Existing Named Range (if applicable)

On Error Resume Next

ThisWorkbook.Names(rngName).Delete

On Error GoTo 0

  • On Error Resume Next prevents the macro from stopping if the named range doesn’t exist.
  • ThisWorkbook.Names(rngName).Delete deletes the named range if it exists.
  • On Error GoTo 0 re-enables error handling.
  1. Creating the Named Range

ThisWorkbook.Names.Add Name:=rngName, RefersTo:= »= » & dynamicRange

  • This creates a new named range in the workbook that refers to the dynamic range.
  1. Confirmation Message

MsgBox « Dynamic named range ‘ » & rngName & « ‘ has been created successfully! », vbInformation, « Success »

  • Displays a message box to inform the user that the named range has been successfully created.

How to Use This Macro

  1. Open Excel and press ALT + F11 to open the VBA Editor.
  2. Insert a new module (Insert > Module).
  3. Copy and paste the VBA code into the module.
  4. Modify « Sheet1 » if your data is in a different sheet.
  5. Run the macro by pressing F5 or executing CreateDynamicRange in the macro window.

Dynamic Behavior

  • If you add or remove rows/columns, you need to rerun the macro to update the named range.
  • You can use DynamicDataRange in formulas like:
  • =SUM(DynamicDataRange)
  • If used in a chart, it will automatically update when you rerun the macro.
0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Online comments
Show all comments
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
We’d love to hear your thoughts — please leave a commentx