This Excel INDIRECT tutorial explains the function's syntax, basic uses and provides a number of formula examples that demonstrate how to use INDIRECT in Excel.
A great lot of functions exist in Microsoft Excel, some being easy-to-understand, other requiring a long learning curve, and the former being used more often than the latter. And yet, Excel INDIRECT is one of the kind. This Excel function does not perform any calculations, nor does it evaluate any conditions or logical tests.
Well then, what is the INDIRECT function in Excel and what do I use it for? This is a very good question and hopefully you will get a comprehensive answer in a few minutes when you've finished reading this tutorial.
Excel INDIRECT function - syntax and basic uses
As its name suggests, Excel INDIRECT is used to indirectly reference cells, ranges, other sheets or workbooks. In other words, the INDIRECT function lets you create a dynamic cell or range reference instead of hard-coding them. As a result, you can change a reference within a formula without changing the formula itself. Moreover, these indirect references won't change when some new rows or columns are inserted in the worksheet or when you delete any existing ones.
All this may be easier to understand from an example. However, to be able to write a formula, even the simplest one, you need to know the function's arguments, right? So, let's have a quick look at Excel INDIRECT syntax first.
INDIRECT function syntax
The INDIRECT function in Excel returns a cell reference from a text string. It has two arguments, the first is required and the second is optional:
ref_text - is a cell reference, or a reference to a cell in the form of a text string, or a named range.
a1 - is a logical value that specifies what type of reference is contained in the ref_text argument:
- If TRUE or omitted, ref_text is interpreted as an A1-style cell reference.
- If FALSE, ref_text is treated as a R1C1 reference.
While the R1C1 reference type might be useful in certain situations, you'll probably want to use the familiar A1 references most of the time. Anyway, nearly all INDIRECT formulas in this tutorial will use A1 references, so we will be omitting the second argument.
Basic use of the INDIRECT function
To get into the function's insight, let's write a simple formula that demonstrates how you use INDIRECT in Excel.
Suppose, you have number 3 in cell A1, and text A1 in cell C1. Now, put the formula =INDIRECT(C1)
in any other cell and see what happens:
- The INDIRECT function refers to the value in cell C1, which is A1.
- The function is routed to cell A1 where it picks the value to return, which is number 3.
So, what the INDIRECT function actually does in this example is converting a text string into a cell reference.
If you think this still has very little practical sense, please bear with me and I will show you some more formulas that reveal the real power of the Excel INDIRECT function.
How to use INDIRECT in Excel - formula examples
As demonstrated in the above example, you can use the Excel INDIRECT function to put the address of one cell into another as a usual text string, and get the value of the 1st cell by referencing the 2nd. However, that trivial example is no more than a hint at the INDIRECT capabilities.
When working with real data, the INDIRECT function can turn any text string into a reference including very complex strings that you build using the values of other cells and results returned by other Excel formulas. But let's not put the cart before the horse, and run through several Excel Indirect formulas, one at a time.
Creating indirect references from cell values
As you remember, the Excel INDIRECT function allows for A1 and R1C1 reference styles. Usually, you cannot use both styles in a single sheet at a time, you can only switch between the two reference types via File > Options > Formulas > R1C1 check box. This is the reason why Excel users rarely consider using R1C1 as an alternative referencing approach.
In an INDIRECT formula, you can use either reference type on the same sheet if you want to. Before we move any further, you may want to know the difference between A1 and R1C1 reference styles.
A1 style is the usual reference type in Excel that refers to a column followed by a row number. For example, B2 refers to the cell at the intersection of column B and row 2.
R1C1 style is the opposite reference type - rows followed by columns, which does take some time getting used to : ) For example, R4C1 refers to cell A4 which is in row 4, column 1 in a sheet. If no number comes after the letter, then you are referring to the same row or column.
And now, let's see how the INDIRECT function handles A1 and R1C1 references:
As you see in the screenshot above, three different Indirect formulas return the same result. Have you already figured out why? I bet you have : )
- Formula in cell D1:
=INDIRECT(C1)
This is the easiest one. The formula refers to cell C1, fetches its value - text string A2, converts it into a cell reference, heads over to cell A2 and returns its value, which is 222.
- Formula in cell D3:
=INDIRECT(C3,FALSE)
FALSE in the 2nd argument indicates that the referred value (C3) should be treated like a R1C1 cell reference, i.e. a row number followed by a column number. Therefore, our INDIRECT formula interprets the value in cell C3 (R2C1) as a reference to the cell at the conjunction of row 2 and column 1, which is cell A2.
Creating indirect references from cell values and text
Similarly to how we created references from cell values, you can combine a text string and a cell reference within your INDIRECT formula, tied together with the concatenation operator (&).
In the following example, the formula: =INDIRECT("B"&C2) returns a value from cell B2 based on the following logical chain:
The INDIRECT function concatenates the elements in the ref_text argument - text B and the value in cell C2 -> the value in cell C2 is number 2, which makes a reference to cell B2 -> the formula goes to cell B2 and returns its value, which is number 10.
Using the INDIRECT function with named ranges
Apart from making references from cell and text values, you can get the Excel INDIRECT function to refer to named ranges.
Suppose, you have the following named ranges in your sheet:
- Apples - B2:B6
- Bananas - C2:C6
- Lemons - D2:D6
To create an Excel dynamic reference to any of the above named ranges, just enter its name in some cell, say G1, and refer to that cell from an Indirect formula =INDIRECT(G1)
.
And now, you can take a step further and imbed this INDIRECT formula into other Excel functions to calculate the sum and average of the values in a given named range, or find the maximum / minimum value within the rage:
=SUM(INDIRECT(G1))
=AVERAGE(INDIRECT(G1))
=MAX(INDIRECT(G1))
=MIN(INDIRECT(G1))
Now that you've got the general idea of how to use the INDIRECT function in Excel, we can experiment with more powerful formulas.
INDIRECT formula to dynamically refer to another worksheet
The usefulness of the Excel INDIRECT function is not limited to building "dynamic" cell references. You can also utilize it to refer to cells in other worksheets "on the fly", and here's how.
Suppose, you have some important data in Sheet 1, and you want to pull that data in Sheet 2. The following screenshot demonstrates how an Excel Indirect formula can handle this task:
Let's break apart the formula you see in the screenshot and understand.
As you know, the usual way to reference another sheet in Excel is writing the sheet's name followed by the exclamation mark and a cell / range reference, like SheetName!Range. Since a sheet name often contains a space(s), you'd better enclose it (the name, not a space : ) in single quotes to prevent an error, for example 'My Sheet!'$A$1.
And now, all you have to do is to enter the sheet name in one cell, the cell address in another, concatenate them in a text string, and feed that string to the INDIRECT function. Remember that in a text string, you have to enclose each element other than a cell address or number in double quotes and link all elements together using the concatenation operator (&).
Given the above, we get the following pattern:
Going back to our example, you put the sheet's name in cell A1, and type the cell addresses in column B, as demonstrated in the screenshot above. As the result, you get the following formula:
INDIRECT("'" & $A$1 & "'!" & B1)
Also, please pay attention that if you are copying the formula into multiple cells, you have to lock the reference to the sheet's name using the absolute cell references like $A$1.
Notes
- If either of the cells that contain the 2nd sheet's name and cell address (A1 and B1 in the above formula) is empty, your Indirect formula will return an error. To prevent this, you can wrap the INDIRECT function in the IF function:
IF(OR($A$1="",B1=""), "", INDIRECT("'" & $A$1 & "'!" & B1))
- For the INDIRECT formula that refers to another sheet to work correctly, the referred sheet should be open, otherwise the formula will return a #REF error. To avoid the error, you can use the IFERROR function, which will display an empty string, whatever error occurs:
IFERROR(INDIRECT("'" & $A$1 & "'!" &B1), "")
Creating an Excel dynamic reference to another workbook
The Indirect formula that refers to a different Excel workbook is based on the same approach as a reference to another spreadsheet. You just have to specify the workbook's name is addition to the sheet name and cell address.
To make things easier, let's start with making a reference to another book in the usual way (apostrophes are added in case your book and/or sheet names contain spaces):
'[Book_name.xlsx]Sheet_name'!Range
Assuming that the book name is in cell A2, the sheet name is in B2, and the cell address is in C2, we get the following formula:
=INDIRECT("'[" & $A$2 & "]" & $B$2 & "'!" & C2)
Since you don't want the cells containing the book's and sheet's names to change when copying the formula to other cells, you lock them by using absolute cell references, $A$2 and $B$2, respectively.
And now, you can easily write your own dynamic reference to another Excel workbook by using the following pattern:
Note. The workbook your formula refers to should always be open, otherwise the INDIRECT function will throw a #REF error. As usual, the IFERROR function can help you avoid it:
=IFERROR(INDIRECT("'[" & A2 & "]" & $A$1 & "'!" & B1), "")
Using Excel INDIRECT function to lock a cell reference
Normally, Microsoft Excel changes cell references when you insert new or delete existing rows or columns in a sheet. To prevent this from happening, you can use the INDIRECT function to work with cell references that should remain intact in any case.
To illustrate the difference, please do the following:
- Enter any value in any cell, say, number 20 in cell A1.
- Refer to A1 from two other cells in different ways:
=A1
and=INDIRECT("A1")
- Insert a new row above row 1.
See what happens? The cell with the equal to logical operator still returns 20, because its formula has been automatically changed to =A2. The cell with the INDIRECT formula now returns 0, because the formula was not changed when a new row was inserted and it still refers to cell A1, which is currently empty:
After this demonstration, you may be under the impression that the INDIRECT function is more a nuisance than help. Okay, let's try it another way.
Suppose, you want to sum the values in cells A2:A5, and you can easily do this using the SUM function:
=SUM(A2:A5)
However, you want the formula to remain unchanged, no matter how many rows are deleted or inserted. The most obvious solution - the use of absolute references - won't help. To make sure, enter the formula =SUM($A$2:$A$5)
in some cell, insert a new row, say at row 3, and… find the formula converted to =SUM($A$2:$A$6)
.
Of course, such courtesy of Microsoft Excel will work fine in most cases. Nevertheless, there may be scenarios when you don't want the formula to get changed automatically. The solution is to use the INDIRECT function, like this:
=SUM(INDIRECT("A2:A5"))
Since Excel perceives "A1:A5" as a mere text string rather than a range reference, it won't make any changes when you insert or delete a row(s).
Using INDIRECT with other Excel functions
Apart from SUM, INDIRECT is frequently used with other Excel functions such as ROW, COLUMN, ADDRESS, VLOOKUP, SUMIF, to name a few.
Example 1. INDIRECT and ROW functions
Quite often, the ROW function is used in Excel to return an array of values. For example, you can use the following array formula (remember it requires pressing Ctrl + Shift + Enter) to return the average of the 3 smallest numbers in the range A1:A10:
=AVERAGE(SMALL(A1:A10,ROW(1:3)))
However, if you insert a new row in your worksheet, anywhere between rows 1 and 3, the range in the ROW function will get changed to ROW(1:4) and the formula will return the average of the 4 smallest numbers instead of 3.
To prevent this from happening, nest INDIRECT in the ROW function and your array formula will always remain correct, no matter how many rows are inserted or deleted:
=AVERAGE(SMALL(A1:A10,ROW(INDIRECT("1:3"))))
Here's a couple more examples of using INDIRECT and ROW in conjunction with the LARGE function: How to sum N largest numbers in a range.
Example 2. INDIRECT and ADDRESS functions
You can use Excel INDIRECT together with the ADDRESS function to get a value in a certain cell on the fly.
As you may remember, the ADDRESS function is used in Excel to get a cell address by the row and column numbers. For example, the formula =ADDRESS(1,3)
returns the string $C$1 since C1 is the cell at the intersection of the 1st row and 3rd column.
To create an indirect cell reference, you simply embed the ADDRESS function into an INDIRECT formula like this:
=INDIRECT(ADDRESS(1,3))
Of course, this trivial formula only demonstrates the technique. And here are a few examples that may prove really useful:
- INDIRECT ADDRESS formula - how to switch rows and columns.
- VLOOKUP and INDIRECT - how to dynamically pull data from different sheets.
- INDIRECT with INDEX / MATCH - how to bring a case-sensitive VLOOKUP formula to perfection.
- Excel INDIRECT and COUNTIF - how to use the COUNTIF function on a non-contiguous range or a selection of cells.
Using INDIRECT with Data Validation in Excel
You can use the Excel INDIRECT function with Data Validation to create cascading drop down lists that display different choices depending on what value the user selected in the first dropdown.
A simple dependent drop-down list is really easy to make. All it takes is a few named ranges to store the dropdown's items and a simple =INDIRECT(A2)
formula where A2 is the cell displaying your first drop-down list.
To make more complex 3-level menus or drop-downs with multi-word entries, you will need a bit more complex INDIRECT formula with a nested SUBSTITUTE function.
For the detailed step-by-step guidance on how to use INDIRECT with Excel Data Validation, please check out this tutorial: How to make a dependent drop down list in Excel.
Excel INDIRECT function - possible errors and issues
As demonstrated in the above examples, the INDIRECT function is quite helpful when dealing with cell and range references. However, not all Excel users eagerly embrace it mostly because extensive use of INDIRECT in Excel formulas results in lack of transparency. The INDIRECT function is difficult to review since the cell it refers to is not the ultimate location of the value used in the formula, which is pretty confusing indeed, especially when working with large complex formulas.
In addition to the above said, like any other Excel function, INDIRECT may throw an error if you misuse the function's arguments. Here's a list of most typical mistakes:
Excel INDIRECT #REF! error
Most often, the INDIRECT function returns a #REF! error in three cases:
- ref_text is not a valid cell reference. If the ref_text parameter in your Indirect formula is not a valid cell reference, the formula will result in the #REF! error value. To avoid possible issues, please check the INDIRECT function's arguments.
- Range limit is exceeded. If the ref_text argument of your Indirect formula refers to a range of cells beyond the row limit of 1,048,576 or the column limit of 16,384, you will also get the #REF error in Excel 2007, 2010 and Excel 2013. Earlier Excel versions ignore the exceeded limit and do return some value, though often not the one you'd expect.
- The referred sheet or workbook is closed. If your Indirect formula refers to another Excel workbook or worksheet, that other workbook / spreadsheet must be open, otherwise INDIRECT returns the #REF! error.
Excel INDIRECT #NAME? error
This is the most obvious case, implying that there is some error in the function's name, which leads us to the next point : )
Using the INDIRECT function in non-English locales
You may be curious to know that the English name of the INDIRECT function has been translated into 14 languages, including:
|
|
If you are interested to get the full list, please check out this page.
A common problem with non-English localizations is not the INDIRECT function's name, but rather different Regional Settings for the List Separator. In the standard Windows configuration for North America and some other countries, the default List Separator is a comma. While in European countries, the comma is reserved as the Decimal Symbol and the List Separator is set to semicolon.
As a result, when copying a formula between two different Excel locales, you may get the error message "We found a problem with this formula…" because the List separator used in the formula is different from what is set on your machine. If you run into this error when copying some INDIRECT formula from this tutorial into your Excel, simply replace all commas (,) with semicolons (;) to get it fixed.
To check which List Separator and Decimal Symbol are set on your machine, open the Control Panel, and go to Region and Language > Additional Settings.
Hopefully, this tutorial has shed some light on using INDIRECT in Excel. Now that you know its strengths and limitations, it's time to give it a shot and see how the INDIRECT function can simplify your Excel tasks. Thank you for reading!
210 comments
Hey
I am trying to use the indirect function with the 'address' function. The address function worked just fine but when I add the indirect function to it, I keep geting a #ref error. This is the formula I have written '=ADDRESS(income_min_row, COLUMN()) &"-" &ADDRESS(income_max_row, COLUMN())'.
Anyone with a similar challenge? A solution will be appreciated.
Thanks
Hi! I can't check your formula because I don't have your data. income_min_row must return a number.
Hi, very good I am happy for finding this site, Tanks for this training articles
=INDEX(INDIRECT("'"&$T11&"'!$A$3:$S500"),MATCH($A11,INDIRECT("'"&$T11&"'!$A$3:$A500"),0),MATCH($W$1,INDIRECT("'"&$T11&"'!$S$3:$S500"),0))
Formula is entered into cell W11 for reference.
For the array value, I want to reference another sheet in my workbook based on the salesman's name that is listed in the same row that my formula is entered into (T11), then on that sheet I want to match the listed job number (A11) for the ROW reference, and match the column that contains the same header (W1 - Discount %). Above is the formula that I have, but I am getting an N/A error. I am not sure what is causing the error. On the referenced sheet, if the cell contains a formula for the job number, would my formula still be able to pick up the returned value? IF this is the cause of the error, suggestions on how to fix?
Hi!
Your formula does not find the correct value. I cannot check this formula as I do not have your data. Try debugging the formula following the instructions - How to evaluate and debug formulas in Excel.
Want to reference a defined data name based on the value in a cell.
I have defined data names Itemized_Deduction_Amt and Standard_Deduction_Amt. I have in cell C1 a formula the returns either the word Itemized or Standard. I want to use C1 result to construct the data name to be used. For instance,C1 & "_Deduction_Amt" where C1 = Itemized will create data name Itemized_Deduction_Amt. When C1 = Standard, data name would be Standard_Deduction_Amt.
Instead of using the following formula
If(Itemized_Deduction_Amt > Standard_Deduction_Amt,Itemized_Deduction_Amt,Standard_Deduction_Amt)
I want to just use the created data name.
I tried several ways including the following that did not work:
= Indirect(C1 & "_Deduction_Amt")
= C1 & "_Deduction_Amt"
Thank you
Hello!
This formula works for me:
=INDIRECT(C1 & "_Deduction_Amt")
Maybe there are extra spaces or other extra characters in your values.
=AND(ISNUMBER(SEARCH("-",[@[PO number]])),LEN([@[PO number]])=13)
=AND(ISNUMBER(SEARCH("-",INDIRECT("[@[PO number]]"))),(LEN(INDIRECT("[@[PO number]]")=13)))
i am doing something wrong but i have no idea what as the first one works then i turn in to data validation
Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking.
yes I am check if a number is enter in the cell is a number and has 13 characters including a -
i.e. 2000000-000000
all numbers are stored in table PO number, table name Dailyintake
if it fails ether of these checks I want to not let me enter the number
Hi!
I don't quite understand your problem, because 2000000-0000 is not a number. It is a string because it contains a "-". You can check the length of the text with the function LEN(A1)=13 If you need to enter text according to the pattern, maybe this article will be helpful: Excel Data Validation using regular expressions (Regex).
that's strange because this =AND(ISNUMBER(SEARCH("-",[@[PO number]])),LEN([@[PO number]])=13) seems to work when its in a cell refencing the table it will result in the correct true or false statement when used like that but completely brakes when i turn it in to a INDIRECT version for the use in data validation.
ill definitely have look at that as it looks like it might do what i want it to do
I know have a good understanding of Regex 200000-000000
=AND(LEN(Table1[@Data])=B11,COUNT(FIND(MID(B6,ROW(INDIRECT("1:"&LEN(B6))),1),numbersAllowed))=LEN(B6),MID(Table1[@Data],7,1)="-",(MID(A2,7,6)*numbersAllowed),LEFT(Table1[@Data],6)*numbersAllowed,MID(Table1[@Data],8,6)*numbersAllowed)
How would I turn this in to the INDIRECT is the something that i can read that cover this
I have got it fantastic
=AND(LEN(INDIRECT("Table1[@Data]"))=B11,COUNT(FIND(MID(B6,ROW(INDIRECT("1:"&LEN(B6))),1),numbersAllowed))=LEN(B6),MID(INDIRECT("Table1[@Data]"),7,1)="-",(MID(INDIRECT("Table1[@Data]"),7,6)*numbersAllowed),LEFT(INDIRECT("Table1[@Data]"),6)*numbersAllowed,MID(INDIRECT("Table1[@Data]"),8,6)*numbersAllowed)
Hi!
It is very difficult to understand a formula that contains unique references to your workbook worksheets. Hence, I cannot check its work, sorry.
yeah I broke it ill get it eventually
Table1 is the table name
Data is the headers on the tables name
200000-000000 is the cell data
=AND(LEN(INDIRECT("Table1[@Data]"))=13,COUNT(FIND(MID((INDIRECT("Table1[@Data]")),ROW(INDIRECT("1:"&LEN("-"))),13),numbersAllowed))=LEN(INDIRECT("Table1[@Data]"))="-",(MID(INDIRECT("Table1[@Data]"),7,6)*numbersAllowed),LEFT(INDIRECT("Table1[@Data]"),6)*numbersAllowed,MID(INDIRECT("Table1[@Data]"),8,6)*numbersAllowed)
I removed all the cell refences
as far as I can tell the ISNUMBER INDIRECT version always comeback as false and the Len checker doesn't work at all
I have values in A column in B1 I have text as SUM. Hence in C1 I have to get sum of values of A Column and if write AVERAGE in B1 than in C1 I have get average values of A column
Hi!
Excel cannot use your text in a formula as the function name. However, you can create a formula with conditions using the IF function.
For example,
=IF(B1="sum",SUM(A1:A100), IF(B1="average",AVERAGE(A1:A100),""))
Hello,
I am attempting to compile the sum of data from multiple different sheets under certain criteria.
Example: Summary, Sheet2, Sheet3. On Summary in A1, sum total number amounts from Sheet2 in B:B if Value in C:C = Green, then again on Summary in B1, the sum total number amounts from Sheet3 in B:B if Value in C:C = Green. I hope this makes sense.
I learned from this page how to pull individual certain cell data but not the sum of data under a specific criteria. It may combine with the Countif or Sumif function but cant figure out how to make it work. I greatly appreciate your help. Thank you.
Hello!
If I understand correctly, here is an example formula for summing by conditions. See this article for detailed instructions and examples: Excel SUMIFS and SUMIF with multiple criteria – formula examples.
=SUMIFS(Sheet3!B1:B20,Sheet3!C1:C20, "Green")
Hi
My current issue is i have to sheets lets say
Sheet1 is where the formula is so
Countif(sheet2A:A;$C$3) this formula will be in cell C5 and the C6,C7, C8
What i need is to move the auto fill series to move ranges on sheet2 to be filled as the formula on C6 to query B:B, C7 to query C:C and so on
Can you help me with the formula syntax please
Hi. Thank you for a great guide. It helped me simplify my spreadsheets a lot.
I was wondering if there is a way to make the name of the reference sheet change dynamically?
I have a spreadsheet for each week of the year. The sheet is named after the week, then a comma, then a space and then the year. E.g: "1, 2023" "2, 2023" etc.
The cells I want to access are always in the previous sheet. In other words: "'this_sheet's_weeknumber-1, 2023". Is there any way to do this so that when I copy the sheets from the week before, I don't have to change any formulas?
It's not a big deal, since I manually only have to change 1 number every time I make a new sheet, however it would be fun to make it so I don't have to manually change anything.
I like to avoid manual change as you like.
I believe you could use the function (Sheet) to solve your issue.
Hope all the best for you
Hi there,
I am using =FILTER very successfully but the "include" criteria I want to use, extend into an enormous list because of a variety of different choices I have set up to make a large number of different filters available to my users, with the result of the filter always appearing in the same space. So I want to "break down" the =FILTER formula I am using by referring to various lists of "include criteria" which I will store in different cells. I have been embedding SWITCH and INDIRECT functions into my =FILTER formula but always end up with a #VALUE! error.
Is there any way to make "include criteria" dynamic rather than having to boringly spell them out in the =FILTER formula itself?
So ... say I have ten different varieties of "include criteria" ... I have to make ten nested IF statements inside my =FILTER formula. It is really tedious.
What I am doing is giving my users up to ten different "saved filters" so they can quickly flick between one filter and another and save their favourite ones etc. Sometimes, these saved filters use "AND" and sometimes they use "OR" and they all use up to ten different columns from my huge array of data to be filtered. The data is obviously kept in a different Tab.
To save my =FILTER formula from growing into hundreds if not thousands of characters, all I want to do is to "import" "include criteria" from a series of different cells, which I can tuck away out of sight somewhere.
Any ideas?
Thank you so much if you are able to solve this one for me!!
Kind regards - Jon
Hello!
If I understand your task correctly, the following tutorial should help: Using Advanced Filter in Excel - criteria range examples with formulas.
=INDIRECT("'" & $A$1 & "'!" & B1)
this formula not working my workbook.
my workbook are many sheets but i was collect a data in one sheet..
many sheets ex. 1 2 3 4 5 6
& main sheet Sum. =INDIRECT("'" & $A$1 & "'!" & B1)
Hi!
Look carefully at the example in the article above. Cell B1 should contain the address of the cell.
Hi. I have used INDIRECT with dynamic references for years and I decided to upgrade from Excel 2013 to 2021. Now I get #REF! from all of my formulas using INDIRECT with dynamic references. I came across this article and found out why :-(
I use the dynamic references to look up values from previous years without needing to enter the new year in the formulas every year and not needing to have the previous years workbook open.
Is there a way to get values from other workbooks by using dynamic references without having to open them?
Thanks.
Roger Jacobsen
Hello!
You can get data from Excel without opening a file using a VBA macro. Here is the article that may be helpful to you: How to duplicate sheet in Excel with VBA.
Hello,
how can i use indirect for different sheet and variable row number?
thanks
Hi!
Pay attention to the following paragraph of the article above – Creating a dynamic reference to another sheet.
You can write the sheet name in a separate cell and refer to it in a formula.
Hello,
Firstly, thank you for creating such a comprehensive article! Extremely helpful to many, I'm sure. Secondly, I don't think this specific post can help with my issue, but perhaps you can point me in the right direction?
I have a template that I am creating (so formulas will need to be dynamic as rows will be added) where I'm trying to continue the row numbers while skipping headers. Here is an example of what it should be when complete:
A B C
1 data data
2 data data
3 data data
Header
4 data data
5 data data
6 data data
Header
7 data data
The issue is that the template doesn't look like the example above, as the data isn't populated yet. The template looks like this:
A B C
formula data data
Header
formula data data
Header
formula data data
How can I start numbering in A1, skipping headers and continuing numbering, without being able to tell Excel where the last number above Header 1 left off?
Hello!
Please try to enter the following formula in cell A2 and then copy it down along the column:
=MAX($A$1:A1)+1
Please check out this article to learn how to find the highest value.
This is an excellent article. My problem seems not addressed exactly with the INDIRECT and ROW syntax
Here is what I am trying to do:
I have a row of stock values in row 12 in Excel with the headings above that row, row 11. Like so:
Date Open High Low Close Adj Close* Volume
Jan 31, 2022 173.88 175.28 172.75 173.40 173.47 65,518,109
In another column to the right, I have the 12 months of the year, starting with January down to December.
In the column right next to the months, I have a formula to calculate the Net Value for that month.
Each close of the month, I insert a new cells below row 11 (the headings) containing the same data as above only with the next last day of the months values. So in the above, it will be February 28th.
I want January's Net Value to stay the same. But I want February's value to now be of off the new inserted row.
I cannot seem to get there with the INDIRECT and ROW functions. If I insert a new row, January's Net Value changes to February's.
Can you help?
Hi!
The information you provided is not enough to understand your case and give you any advice.
What formula do you use to calculate? Are you inserting a new blank row 12 and writing February data into it? In this case, the January data is moved to row 13?
It is comprised of two actions at the present time.
The first is a Macro to move down the date one row.
Sub APPL()
'
' StockUpdate Macro
' Process to update Yahoo's Data in Spreadsheet
'
' Keyboard Shortcut: Ctrl+a
'
Range("A32:H32").Select
Selection.Copy
Selection.Insert Shift:=xlDown
End Sub
The second was /is this formula in Column J.
=INDIRECT("E"&60-ROW())*500-1000
When I add new data in "A32:H32" the last day of each month, the formula in Column J calculates the net value. What I desire is Column J's previous month to stay the same, but each new month calculate the new value.
What is happening now is the new value replaces the existing values all the previous months. I want to keep that historical record so to speak.
Hi!
I'm not sure I understood your explanation. If you want the reference to point to the same value, use a relative cell reference. Then, when inserting rows, the value of the formula will not change.
Each month, at the end of the month, I obtain from Yahoo the ending Hi, Low , and close of a give stock price.
I inset that row of data in a row above last months stock information.
I take the closing price from that row and multiply it by number of shares and then subtract the original purchase price. This gives me the loss or capital gains.
This gain or loss gets copied to another column where it is place next to a column with the month of the year. The months go down.
I want that monthly value to stay the same as listed for each past month, but update for each new month.
Right now my formula as I drag down changes and so does then the previous months values.
Inputting new rows breaks the use of fixed references with $ signs.
Let change gears and see if this will work with your help. I am so close . . .
I have this code below to take a variable that changes and place it in another cell, and then as the variable changes each month (like what I am trying to do above), keep the last variable, while updating the next row with the new variable.
It works, except the VBA code works only IF the data is inputted by hand. IF the data is changed by reference to another cell or workbook i.e. A1= sheet6 C1 and C1 changes the A1 value then it does - unfortunately!!! - not work.
Is there a way to fix this problem?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
a = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row + 1
Sheets("Sheet2").Range("A" & a).Value = Sheets("Sheet1").Range("B2").Value
End If
End Sub
Many times i feel very confused with how to handle it in excel. I really need articles like yours. I felt very inconvenient, so I went to apkdownload and found something to help. Crazy, there are a few apps that can share how to or tips for excel. But I still prefer articles like yours
Hi there,
My wife asked me to help her create an excel document for her work where in two columns I need dependent drop down lists.
The main drop down (cell G3, only has single word data) and the first dependent list (H3, gives results of a couple of sentences) was easy. In a parameters sheet I grouped the specific data and gave it a name that corresponds to one of the four choices of cell G3. On the work sheet I used the =INDIRECT function in cell H3 (first dependent drop down)
Now I've been struggling for a couple of days on getting the second dependent drop down (I3) to work. If I use the same function as in H3 then it returns the same options as in H3. When I try to direct it to the correct group name it doesn't work.
The drop down options in H3 are all sentences (with spaces) and I think that's what causing the issue.
Can anyone help/advice on how to get the right drop down data in I3 based on the main drop down (G3)
I3 doesnt even need to depend on whats in the first dependent drop down list (H3) solely on whats in the main drop down list in G3.
Thank you in advance!
Rico
Hello!
Here is the article that may be helpful to you: How to make a dependent (cascading) drop-down list in Excel.
This should solve your task.
Thanks Alexander. I will give it a try.
I like how clear your explanation is, but I am trying to go in the opposite direction. I use VLOOKUP to get a cell reference to a location to some value (Current Data). I use the existing value from that cell, update the value, and then want to update the original location, making it Updated Data. I was able to use the indirect function to get the Current Data, but I can't find anything that Excel will let me do to indirectly store the data back in the original cell again. I have to do indirection, since I have many cells that have to be processed, and use a table to get the cell references to the data cells. This is basically a A = A+B problem. Any idea on how to stuff the data back into the cell again. Thanks.
Tim Ryan
Hello!
Unfortunately, I could not understand your problem. Give an example of the values and cells you are searching and updating.
Hi there, I think I understand how the behavior works for R3C. It is not referring to the same column (in your explanation above, the arrow pointed to column C), it is actually referring to the same column where the Indirect formula located (in this case, column D).
If you try to put "Test" in D2 and update the text in C5 from R3C to R2C, cell D5 will appear "Test" (Indirect formula is referring to the same column but row 2, which has a "Test" now)
Hi Shau Leong,
From all appearances, you are right. Thank you for explaining this case, I will update the example.
I was looking to do this while summing across multiple tabs. The normal formula is
=SUM('assets 1:end 2'!$F$4)
I've tried the following but it isnt working could you assist?
=SUM(INDIRECT("'"&C$75&":"&$P$7&"'!"&$C$74&4))
C$75 = assets 1
$P$7 = end 2
$C$74 = F
Hello!
Unfortunately, you cannot get a 3D reference using the INDIRECT function.
Hi,
I'm trying to sum the same cells (C9,C10....C80) from multiple sheets onto a 'totals' sheets, but the data is on-going so I want to be able to update it to include a new sheet each month.
If it were static this is what I would do:
=SUM(July:December!C9)
and it would be great.
However I want 'December' to be dynamic so that it is possible to just change one cell from 'December' to 'January', and have C9...C80 all update automatically based on a formula.
I was trying this
=SUM(JULY:INDIRECT("'"&$F$2&"'!"&G2))
where F2 is the new month, and G2 is the text "C9", however I get the error #NAME? returned, and in the formula builder it says "Volatile".
Any suggestions?
Thanks
Hello!
The 3D link cannot be created using the INDIRECT function.
If you want to sum the same cell from all sheets except the current one, just enter a formula like this:
=SUM('*'!G2)
The sign * serves as a wildcard, which is interpreted as "all sheets except this one". When you press Enter after entering this formula, Excel converts the formula to use the actual sheet names.
@Liam
It is in fact possible to do what you want, but I don 't know if you are interested after such a long time.
I would like an answer to this if you have it.
I have the following on Sheet1:
=SUMIFS(test!C3:C156,test!A3:A156,($B3))
I am trying to set the upper range of the search, 156, in cell Sheet1 A1. I tried the following:
=SUMIFS(test!C3:C&(=indirect($A1)),test!A3:A&(=indirect($A1)),($B3))
What is the correct syntax?
Hello!
In the SUMIFS function, you cannot specify a formula instead of a range.
Use the SUMPRODUCT function:
=SUMPRODUCT(INDIRECT("C3:C"&$A$1),--(INDIRECT("A3:A"&$A$1)=$B$3))
I hope I answered your question. If something is still unclear, please feel free to ask.
I was really helped out by just going through the samples on this page.
My workbook consisted of several sheets, and I was impressed of the flexibility of the INDIRECT function combining information between them, all due to your thorough details.
This made me able to dynamically update formulas in the relevant cells.
I highly recommend this page !!!
Hello, is there an alternative to indirect command to make a dynamic reference to another workbook without needing that other workbook open, likea direct reference formula does? I'm trying to make a spreadsheet that will gather data from 30 other spreadsheets, so I'd like it to work without needing 30 spreadsheets open.
Thank you!!
Hi
I have any issue that when I am using the following formula and when I insert a row if the spread sheet 2 call People (same name as H4 in the master sheet), then the reference should change from !B12 to !B13 but it did not change.
=INDIRECT("'" & H4 & "'!B12")
Could anyone able to help me out with this.
Thanks
Hello!
The link will not change from B12 to B13 as "B12" is text. Note the section above in this article: Creating an Excel dynamic reference to another worksheet.
I hope my advice will help you solve your task.
I have the same question here, and dont know if this possible.
Is there a way to make the cell name recognize as just text the B12 in Franks first formula, and be able to copy that formula down. So when i pull down the formula it would allow me to reference a different cell on the other worksheet.
I want the H4 refence to stay the same (and I have that done), but I want the cell number (the B12) to change for the referenced sheet, not looking at the current one.
Easier way to ask. Can I make the Range dynamic, to reference another cell another worksheet.
Hello!
You can make the row number change as the formula is copied down the column by replacing it with the ROW function.
=INDIRECT("'" & H4 & "'!B"&ROW(A12))
Pay attention to the following paragraph of the article above - INDIRECT with other functions (ROW, ADDRESS, VLOOKUP).
Hi! I'm trying to create a two-level drop down list for more than 500 cells and needs to use the indirect function. How can I make this happen without doing it one by one? Is there any formula I can use? Thanks! :)
Hello!
The information presented to you is not enough to give you advice.
You might find it helpful to read this tutorial on creating dependent dropdown lists.
Very very useful. It help so much, thank you!
Extremely helpful page!! Many many thanks!!
Dear Sir,
I have a problem using QUOTE function with INDIRECT function.
The QUOTE function format is =quote("146.1.JYC.ASX","Last")
I break up the function into 3 texts in 3 cells.
D1 => quote("146.1.
D2 => JYC
D3 => .ASX","Last")
CONCATENATE function: concatenate(D1, D2, D3) will looks like the quote("146.1.JYC.ASX","Last").
If I apply INDIRECT function with the CONCATENATE function, and the result is "#REF".
Can you help to solve my problem because D2 will change from time to time.
Thanks for your early reply.
Edward Wong
Hello!
I would like to learn more from you about the "QUOTE function".
You wrote: "If I apply INDIRECT function with the CONCATENATE function, and the result is“ #REF ”." What formula did you use?
What result would you like to get?
Hi Alexander,
Thank you for you interesting in this.
To make use of QUOTE function, you must have Excel QUOTES add-in (https://gaiersoftware.com/Excel/) to MS Office.
And quote("146.1.JYC.ASX","Last") will get the latest price of the stock "Joyce Corporation Ltd" from Australia stock market.
I put the formula =quote("146.1.JYC.ASX","Last") to cell F1 and get $1.15 at the moment.
So, I think you will understand what I expect by using CONCATENATE function with QUOTE function to achieve another stock latest price as D2 change.
Hi Alexander,
Thank you for you interesting in this matter.
Finally, I figure it out. It is not relate to INDIRECT function.
My solution as follow:
Put JYC in Cell D2
Put the QUOTE formula =QUOTE(CONCATENATE("146.1.",D2,".ASX"),"Last") in cell F1 hence get $1.1.05 as a result.
If you change D2 to APA and get $11.34
That is what I want to do.
Thanks you once again.
I want how to get the excel sheet 1 cells in sheet 2 what is the formula in that
I want to extract a value from a different workbook (containing multiple sheets named - state 1 , state 2) such that "state" is fixed and i will input value 1/2 each time in a cell and based on it excel should extract value from state 1 or state 2 sheet. how can i frame the indirect formula? (keeping in mind that fixed "state" string needs to be concatenated with 1/2 input cell. Also state 1 or state 2 has spaces in between)
G19=id dump 10th dec"19 H19=dump
Above are file and sheet name (dump) respectively
Index(INDIRECT("'["&G19&"]"&H19&"'!"&$E:$F)
However within index it is showing error
Thank you for the info it is very useful
I'm using the following formula to get the count of the number 150 from a worksheet without an issue,
=SUMPRODUCT(COUNTIF(INDIRECT("'My Sheet 1"&"'!A1:L300"),150))
For some reason i can not figure out the proper syntax to use across multiple worksheets to reference or example I want to count the number 150 across 3 Sheets that are not next to each other. How can i syntax it lets say they are named
My Sheet 1, My Sheet 2, My Sheet 4
When I use this formula it works for the first cell, but when I drag it down 20 rows it does not work. It will change the sheet reference (A2, A3, A4), but it populates the result from A2 (the starting point). If I manually change A3 to A3 or A4 to A4 in the dragged down formula ....then it will give me the proper result. For example:
=INDIRECT("'" & A2 & "'!B12") ....correct result is 2932
=INDIRECT("'" & A3 & "'!B12") ....correct result is 200 but excel gives me 2932. when dragged A2 changed to A3 but still get A2 result.
=INDIRECT("'" & A4 & "'!B12") ....correct result is 1500 but excel gives me 2932. when dragged A3 changed to A4 but still get A2 result.
Can someone explain what I am doing wrong?
thanks
Dee
I have this same issue; did you get it resolved?
I am also having this issue and can't seem to find an answer.
Hi
Try to change the formula to: =INDIRECT("'" & A2 & "'!B:B")
how to give dynamic range every time to get sum in excel sheet
I am trying to sum multiple spreadsheets by using the tab name to identify the start and end sheets. But I keep getting a "ref" error. Any thoughts?
=SUM(INDIRECT("'" & CONCATENATE(RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))," Start:",RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))," End'!",ADDRESS(ROW(),COLUMN()),")")))
Hey,
Is there a way to use indirect in multiple columns in the same sheet?
I have made a sheet (sheet A) listing info from other sheets (B,C,D).
If I want to add sheet E, I now have to also add a row in Sheet A which will refer to sheet E, in this new row I pull through the formulas from the row above.
I don't want to have to change the formulas in every column to fit with the correct sheetname. With the indirect formula that works, only so for one column.
I'd attach an example file, but don't see how to.
Looking forward to your reply,
Kind regards,
Ben
Some more deduced clearer info.
The cell wrongly displaying refers to a cell in which dependant validation is present.
The cell I refer to on the sheet I refer to with the indirect formula, the content is depending on the value of an other cell, I use the indirect formula to make a dependant validation. Which creates the problem.
Any tips on a workaround?
I do need the dependant validation as much as the indirect reference
Made a screenshot with some info, find it here:
https://drive.google.com/file/d/1QPSHrXqPG7dNJD6XGy9ZOG73mLaHrirH/view?usp=sharing
regards,
Ben
Best wishes; from everyone of us.
I am having an issue getting something to work properly.
I have a workbook that contains a list of Websites, and under each website are the names of the users that are considered experts with those websites. Rather than having people have to search through to find an expert they want to ask questions of, I created a new sheet that includes a drop down list of the websites.
When a user clicks on the drop down list (which is in C2), and selects a website, I am wanting to populate that list in in column F, starting at F2.
I have the basics of it working fine. The issue I am having is that each website has a different number of 'experts'. Some only have one, and some have over fifteen.
My issue is that (unless I am missing something), I needed to place the formula in all 20 cells, so that all the experts would fit. Now, when a website is selected that has less than the maximum number of experts, the remaining cells show #N/A.
I have tried using an =IFERROR to get rid of the #N/A, but am not having any luck.
Do you have any suggestions?
Here are the basics of the code:
The website drop down list is done with Data Validation, using the named range: =Websites
For the experts list, I have used: =INDIRECT($C$2)
When that came up with the extra #N/A's, I change it to: =IFERROR(INDIRECT($C$2),"")
Unfortunately, that did not get rid of the #N/A's.
The list looks similar to this:
John Smith
Fred Jones
Steve Major
Rod Hawke
#N/A
#N/A
#N/A
Please help!
Thank you,
Jason
Hi, I have a cell A4 that has another cell's address in it. So cell A4 reads $D$2, it is a dynamic value. How do I use the offset function to reference this cell? I want it to reference the dynamic cell address rather than the cell A4, which contains this information.
Thanks!
EXCELLENT - THANK YOU - works like a dream.
THANK YOU
Can you use INDIRECT fron one sheet to another sheet?
Great post, nice examples, you save me a lot of time. Thanks!
Good post, really useful. However it doesn't fix the problem for my unfortunately :(
I need a formula in which I can update the links every month easily. However, I don't get the indirect function to work :(. For example, the data that needs to be updated monthly is linkt to follow directionary for januari 2017
=('M:\SSC\Vestigingsmanagement\Mebin\2017\01 2017\Rapportages\[amsterdam totaal KER Template 2017.xlsx]Samenvatting'!$E$113)
Februari 2017 is linked to:=('M:\SSC\Vestigingsmanagement\Mebin\2017\02 2017\Rapportages\[amsterdam totaal KER Template 2017.xlsx]Samenvatting'!$E$113)
The only thing that changed is 01 to 02. So my idea to make a template, in which I can select 01/02/03 depending on what month I need, that the links automatically changed with it. Is there a way to do that? The search and change function(ctrl+F) is not an option, since it is not very accurate!
I hope somebody can help me! Thanks in advance!
Very very helpful, thank you!
Really good post! Excellent examples. Very helpful. I might use something similar even in VBA. Thank you and Merry Christmas :)
Hello
I am trying to create a dependent drop down list using the following formula =INDIRECT(SUBSTITUTE(F2," ","_"))
However, I get the #REF! error
One of your initial examples has a mistake in the description.
The formula =INDIRECT(C5,FALSE) is in cell D5. So, the formula grabs the value in C5 (R3C) and turns that into the cell reference D3, not C3, because the formula is in column D.
There is no double indirection. The blue arrow in your diagram from cell C5 should really point to cell D3, because the INDIRECT formula is in Column D.
You can easily test this by changing the value in D3. D5 changes as well.
By the way, this also explains the confusion you describe here:
In all honesty, I failed to come up with
any plausible explanation of such behavior,
maybe it's just a quirk of Excel INDIRECT.
Good morning,
I have a workbook with lots of basic formulas just like ='Cost Detail'!A1
I would like to change the 'Cost Detail'! part by an INDIRECT function.
I would like to do so by "search and replace". But the A1 part should not change inside the formula. I cannot find a way to do it without rewriting each one of my 400 formulas. Can you help me?
is it possible to combine indirect and index? or is it impossible without VBA to cell values in closed workbooks?
eg. =index('c:\temp\[filename.xlsx]sheet1'!A2,1,1) gives the value of a non open excel file..
so if i have the different part in cells
a1: C:\temp\
a2: filename.xlsx
a3:sheet1
a4: a2
the formula ="'"&A1&"["&A2&"]"&A3&"'!"&A4 gives the "correct" string.. I could copy this and parse it as value (and then edit the cell and enter)..