INDIRECT takes two arguments, ref_text and a1. Ref_text is the text string to evaluate as a reference. A1 indicates the reference style for the incoming text value. When a1 is TRUE (the default value), the style is “A1”. When a1 is FALSE, the style is “R1C1”. For example: The purpose of INDIRECT may at first seem baffling (i.e. Why use text when you can just provide a proper reference?) but there are many situations where the ability to create a reference from text is useful, including:

A formula that needs a variable sheet name A formula that can assemble a cell reference from bits of text A fixed reference that will not change even when rows or columns are deleted Creating numeric arrays with the ROW function in complex formulas

Note: INDIRECT is a volatile function and can cause performance problems in large or complex worksheets. Use with care.

Example #1 - Variable worksheet name

In the example shown above, INDIRECT is set up to use a variable sheet name like this: The formula in B5, copied down, concatenates the text in B5 to the string “!A1” and returns the result to INDIRECT. The INDIRECT function then evaluates the text and converts it into a proper reference. The results in C5:C9 are the values from cell A1 in 5 sheets listed in column B.  The formula is dynamic in that responds to the values in column B. In other words, if a different sheet name is entered in column B5, the value from cell A1 in the new sheet is returned. With the same approach, you could allow a user to select a sheet name with a dropdown list, then construct a reference to the selected sheet with INDIRECT. Note: sheet names that contain punctuation or space must be enclosed in single quotes (’), as explained in this example. This is not specific to the INDIRECT function; the same limitation is true in all formulas.

Example #2 - variable lookup table

In the worksheet below, VLOOKUP is used to get costs for two vendors, A and B. Using the vendor indicated in column F, VLOOKUP automatically uses the correct table:

The formula in G5 is: Read the full explanation here.

Example #3 - Fixed reference

The reference created by INDIRECT will not change even when cells, rows, or columns are inserted or deleted. For example, the formula below will always refer to the first 100 rows of column A, even if rows in that range are deleted or inserted:

Example #4 - named range

The INDIRECT function can easily be used with named ranges. In the worksheet below, there are two named ranges: Group1 (B5:B12) and Group2 (C5:C12). When “Group1” or “Group2” is entered in cell F5, the formula in cell F6 sums the appropriate range using INDIRECT like this: The value in F5 is text, but INDIRECT converts the text into a valid range.

A specific example of this approach is using named ranges to make dependent dropdown lists.

Example #5 - Generate numeric array

A more advanced use of INDIRECT is to create a numeric array with the ROW function like this: One use case is explained in this formula, which sums the bottom n values in a range. You may also run into ROW + INDIRECT idea in more complex formulas that need to assemble a numeric array “on-the-fly”. One example is this formula, designed to strip numeric characters from a string.


References created by INDIRECT are evaluated in real time and the content of the reference is displayed. When ref_text is an external reference to another workbook, the workbook must be open. a1 is optional. When omitted, a1 is TRUE = A1 style reference. When a1 is set to FALSE, INDIRECT will create an R1C1-style reference. INDIRECT is a volatile function, and can cause performance issues in large or complex worksheets.

Dave Bruns

Hi - I’m Dave Bruns, and I run Exceljet with my wife, Lisa. Our goal is to help you work faster in Excel. We create short videos, and clear examples of formulas, functions, pivot tables, conditional formatting, and charts.

Excel INDIRECT function - 91