Back to Blog

Using AppScript to Automatically Create Named Ranges From Your Dataset

May 2, 2024
4 min read
AppScript Named Ranges
If you're into Named Ranges but hate that Google doesn't let you create them automagically, then you've come to the right place.

Google Sheets is a powerful tool for data management, but one frustrating limitation is the inability to automatically generate named ranges for your datasets. Named ranges make formulas more readable and maintainable, but manually creating them for every column can be tedious and time-consuming.

Fortunately, Google Apps Script provides a solution. With a simple script, you can automatically create named ranges for all columns in your dataset with just one click.

How the Script Works

The script operates on the active sheet and creates a named range for each column. Here's what it does:

1. Header Validation

The script checks whether any headers begin with a number. If they do, the letter 'R' is prepended to maintain compliance with Google Sheets naming conventions.

2. Range Creation

For each non-empty header, the script generates a range spanning the entire column beneath that header and applies the header's name as the range identifier.

3. Implementation

Users paste the code into their Google Sheet's Apps Script editor, save it, and execute the script. A permissions dialog will appear; users must approve access to proceed.

4. Result

Upon completion, every column in the sheet receives its own named range based on the header name.

The AppScript Code

Here's the complete script. Simply copy and paste this into your Google Sheet's Apps Script editor:

function createNamedRanges() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var range;

  for (var i = 0; i < headers.length; i++) {
    var header = headers[i].toString().replace(/[^a-zA-Z0-9]/g, '_'); // Sanitize header
    if (header.match(/^\d/)) header = 'R' + header; // Prefix headers that start with a number
    if (header) { // Check if the header is not empty
      range = sheet.getRange(2, i + 1, sheet.getLastRow() - 1, 1);
      try {
        SpreadsheetApp.getActiveSpreadsheet().setNamedRange(header, range);
      } catch (e) {
        Logger.log('Failed to create named range for header: ' + headers[i] + ' with sanitized name: ' + header);
        Logger.log(e.message);
      }
    }
  }
}

How to Use This Script

Step 1: Open your Google Sheet

Step 2: Go to Extensions > Apps Script

Step 3: Delete any existing code and paste the script above

Step 4: Save the project (File > Save)

Step 5: Run the function createNamedRanges

Step 6: Authorize the script when prompted

What the Script Does Line by Line

  • Gets the active sheet: Identifies which sheet to work on
  • Reads headers: Extracts all column headers from the first row
  • Sanitizes header names: Removes special characters and replaces them with underscores
  • Handles numeric headers: Adds 'R' prefix to headers starting with numbers
  • Creates ranges: Defines a range for each column starting from row 2
  • Sets named ranges: Applies the sanitized header name to each range
  • Error handling: Logs any failures to help with troubleshooting

Why Use Named Ranges?

Named ranges offer several significant advantages:

Improved Readability

=SUM(Revenue) is much clearer than =SUM(C2:C100)

Easier Maintenance

If your data grows, named ranges adjust automatically without updating formulas

Reduced Errors

No more accidentally referencing the wrong column in complex formulas

Better Collaboration

Team members can understand formulas without hunting down cell references

Credits and Acknowledgments

This solution was inspired by Steph Smith, who highlighted this limitation during her Spreadsheet Wizardry webinar. Special thanks to Perplexity AI for assisting with the script's development.

I hope this solution simplifies your workflows and saves you hours of manual range creation!

Need Custom Automation Solutions?

We build custom scripts and automation tools that streamline your workflows and eliminate repetitive tasks, freeing you to focus on what matters most.

Get in Touch