Alternatives to the INDIRECT Function

Mynda Treacy

July 15, 2025

The INDIRECT function in Excel might seem like a clever solution, turning text into live references and helping build dynamic models but beneath the surface, it can wreak havoc on your workbook.

In this post, we’ll explore why INDIRECT causes more problems than it solves and walk through better, modern alternatives that are faster, more reliable, and easier to maintain.

Watch the Alternatives to INDIRECT Video

Subscribe YouTube

Get the Excel Example File

Enter your email address below to download the free file.



By submitting your email address you agree that we can email you our Excel newsletter.

Why People Use INDIRECT

Let’s start with the basics.

INDIRECT takes a reference in text form and turns it into a usable Excel reference.

For example, in the screenshot below, in cell C10 you can see =INDIRECT(“B8”) returns the value in cell B8, ‘Elderberry’:

why use INDIRECT in Excel?

INDIRECT also works with:

  • Cell references: =INDIRECT("Sheet1!B8")
  • Named ranges: =INDIRECT("Q1Sales")
  • Combined references using concatenation: =INDIRECT("B" & C13)

This gives you the power to construct references on the fly, switch between named ranges, or dynamically pull values from various sheets.

It feels advanced, and it was, back in the day.

The Problems with INDIRECT

Despite its flexibility, INDIRECT has major downsides:

❌ Volatile: INDIRECT recalculates every time anything changes in your workbook, even if the change doesn’t affect the formula. This slows things down.

❌ Breaks easily: Rename a worksheet or a range? INDIRECT won’t update, it just breaks.

❌ No external links: INDIRECT can’t reference closed workbooks.

❌ Hard to debug: Since INDIRECT builds references invisibly, tracing errors becomes tricky.

Bottom line: it makes your workbook fragile.

Better Alternatives to INDIRECT

Let’s look at smarter, more modern options for common INDIRECT use cases.

✅ Use Power Query to Combine Data from Multiple Sheets

how to use Power Query to combine data from multiple sheets in Excel?

Instead of:

=XLOOKUP(A2, INDIRECT("'" & B2 & "'!A2:A10"), ...)

Try this:

Use Power Query to load all tables dynamically, even if they’re on separate sheets or different workbooks.

Steps (see video for step-by-step instructions):

  1. Format each sheet’s data as a table (e.g., FY2025_01, FY2025_02, etc.)
  2. In Power Query, use =Excel.CurrentWorkbook() to list all tables
  3. Filter to include only the ones you want (e.g., names starting with FY)
  4. Expand and combine them into one table
  5. Clean and reshape the data
  6. Load to a PivotTable

✅ One refresh updates everything
✅ No fragile formulas
✅ No performance issues

Want to Automate This?

If you’re ready to take your Excel skills up a notch, check out our Power Query course. You’ll learn how to:

  • Merge and clean messy data
  • Automate repetitive tasks
  • Build reports that update with a click

Thousands have used it to ditch unreliable formulas and save hours each week.

Use SWITCH Instead of Named Range Toggles

If you're toggling between named ranges like Q1Sales and Q2Sales, ditch INDIRECT:

Instead of:

=SUM(INDIRECT(G5))
how to use SWITCH function in Excel?

Use:

=SUM(SWITCH(G5,
"Q1Sales", TblSales[Q1Sales],
"Q2Sales", TblSales[Q2Sales]))

✅ No need to define extra names
✅ Easy to audit
✅ Much faster to calculate

Use FILTER and XLOOKUP for Dependent Drop-down Lists

Many people use INDIRECT to create dependent drop-downs, where the second list changes based on the first.

Instead of INDIRECT, use FILTER:

1. Structure your data as a two-column table: e.g., Country | Region

2. Format it as a table (mine is called TblRegions)

how to use FILTER instead of INDIRECT in Excel?

3. Use this formula to extract a list of countries sorted A-Z:

=TRANSPOSE(SORT(UNIQUE(TblRegions[Country])))
how to extract a list of countries from a column in Excel

4. Use this for regions based on the selected country in H4:

=FILTER(TblRegions[Region], TblRegions[Country]=H4, "")
how to use a FILTER function in Excle?

5. For dynamic data validation go to the Data tab > Data Validation > List:

  • For the Countries drop down list use this formula in the Source:
=$H$4#
how to use dynamic data validation in Excel?
  • Regions:
=XLOOKUP(B5, $H$4:$P$4, $H$5:$P$5)#
how to create country, state, city dropdowns in Excel?

Tip: the hash sign on the end of the XLOOKUP formula tells Excel to return all the results in the spilled array in row 5, not just the first result.

This approach to dependent drop-down lists is:

✅ Fully dynamic
✅ Works in Excel 365, 2021, and Excel Online
✅ No volatility

Final Thoughts: Move On from INDIRECT

If you’ve been relying on INDIRECT to build flexible models, it’s time to modernize. Excel now offers:

  • Power Query for data transformation
  • FILTER and XLOOKUP for dynamic logic
  • SWITCH for simple toggles
  • LAMBDA for creating reusable custom functions

These tools are easier to manage, less error-prone, and won’t slow down your file.

Next Step: LAMBDA

If INDIRECT felt like a cool trick, LAMBDA will blow your mind. It lets you define your own Excel functions from formulas. Check out this comprehensive LAMBDA function tutorial to get up to speed.

AUTHOR Mynda Treacy Co-Founder / Owner at My Online Training Hub

CIMA qualified Accountant with over 25 years experience in roles such as Global IT Financial Controller for investment banking firms Barclays Capital and NatWest Markets.

Mynda has been awarded Microsoft MVP status every year since 2014 for her expertise and contributions to educating people about Microsoft Excel.

Mynda teaches several courses here at MOTH including Excel Expert, Excel Dashboards, Power BI, Power Query and Power Pivot.

2 thoughts on “Alternatives to the INDIRECT Function”

  1. I have two spreadsheets that calculate KPIs, called Booked Capacity and Diary Volume. Each of these have a few calculation tabs, and then the results are calculated on a separate tab per employee.

    I now want to create a “Dashboard” spreadsheet per employee that the employee and their supervisor can access (read only). I’ve created the first few, but each is identical except for the name of the employee. To modify these, all I need to update is the tab name in the formulas. Is there a way to do this without using “indirect”?

    Example formula to bring across data: =’…[Diary volume 2025.xlsx]Melissa’!$B$54:$AN$80
    “Melissa” is all that needs to be updated per employee.

    Reply
    • Hi Viv,

      One way is to not create a separate tab per employee in the first place and instead create one dashboard that can be filtered using Slicers for the employee you want to view (I’m assuming this would be ok seeing you have all employee’s data in the one file already anyway).

      Alternatively, use Power Query to gather the data from all the sheets into one table (in a tabular layout), then you can use PivotTables with Slicers to filter the dashboard to show the relevant employee, similar to the first option.

      I hope that points you in the right direction. If you get stuck, please post your question on our Excel forum where you can also upload a sample file and we can help you further.

      Mynda

      Reply

Leave a Comment

Current ye@r *