INDIRECT of R[1]C[1] moves when you fill the formula across
Updated
INDIRECT(ref, FALSE) reads R1C1 text. Brackets mean offsets from the cell that contains the formula. R[1]C[1] means one row down and one column to the right of that formula, not one step from A1, and not a fixed cell you chose when you wrote the string. Fill the formula from A1 into B1 and the target moves from B2 to C2. The formula bar looks identical. The result does not.
This page is that fill. Absolute R2C2, the A1 flag, and mode numbers are ADDRESS / R1C1. A string that is not an address is INDIRECT #REF!. Keep the Google Sheets UI in English.
Recreate it on a blank sheet
Section titled “Recreate it on a blank sheet”- Open a blank spreadsheet. In B2 type
down_right. In C2 typefurther. In B3 typebelow. You wantINDIRECTin A1 to read B2, and you want to see that copy change the target.
Relative R1C1. In A1 enter =INDIRECT("R[1]C[1]",FALSE). The second argument is FALSE (R1C1). A1 is one row above and one column left of B2, so A1 shows down_right. That cell is the control for “the brackets did what I thought, once.”
Fill across. Select A1. Drag the fill handle to B1, or copy A1 and paste into B1. B1’s formula bar is the same text: =INDIRECT("R[1]C[1]",FALSE). B1 shows further, the value in C2. Relative to B1, one row down and one column right is C2, not B2. Leave B1 as that surprise.
Fill down. Copy A1 into A2. A2 shows below, because one row down and one column right of A2 is B3. Three cells, one formula text, three targets. Leave A2 in place.
Absolute R1C1 does not slide. In D1 enter =INDIRECT("R2C2",FALSE). D1 shows down_right. Copy D1 to E1. E1 still shows down_right. R2C2 is B2 no matter which cell holds the formula. No brackets. Leave E1 as the stable copy.
FALSE omitted. In D3 enter =INDIRECT("R[1]C[1]"). The default notation is A1. That string is not an A1 address. D3 is #REF!. See ADDRESS / R1C1. Leave D3 broken. Adding FALSE fixes the notation and still leaves the fill behavior in B1.
A sheet name with a space is INDIRECT sheet name. A1’s string has no sheet name.
What is actually wrong
Section titled “What is actually wrong”- The origin of
R[1]C[1]is the formula’s own cell, evaluated at calc time. Copying the formula copies the offsets, not the target address. Fill-across and fill-down both move the result. That is what “relative” means in R1C1. It is easy to miss because the formula bar does not gain a$or lose one. R2C2is absolute. Copies agree. Mixing them (R[1]C2, one row down of this cell, always column 2) is legal and will still surprise you on a vertical fill. Read each bracket separately.INDIRECTof A1-style text"B2"is also stable when copied, because the text does not contain offsets. It will not slide to C2. If you wanted a slide, you wanted a real formula=B2, which Sheets adjusts on copy.INDIRECTwill not adjust a string.- The second argument is the notation, not a lock mode.
FALSEmeans “parse as R1C1.” It does not mean “keep the target still when I fill.”
This is not ADDRESS mode 4 producing the text C2. That label is A1 notation. See ADDRESS absolute mode. D3 is #REF! because the string was read as A1. B1 is a successful read of the wrong neighbor.
Leave B1 showing further and D3 as #REF!.
Pin the cell with absolute R1C1 when the formula must be filled. In G1 enter =INDIRECT("R2C2",FALSE). Copy G1 to H1. Both show down_right. You filled the formula and the target stayed on B2.
Or use a normal reference. In G3 enter =B2. Copy G3 to H3. Sheets rewrites H3 to =C2, which is the usual fill. Use that when you want the slide. Use R2C2 when you do not. Do not use R[1]C[1] and then expect every copy to read B2.
Do not wrap B1 in IFERROR. B1 is not failing. It is reading C2. See IFERROR hides cause.
If the formula text is identical after a fill and the result moved, the brackets are offsets from each formula cell. Drop the brackets to pin R2C2, or drop INDIRECT and use a normal reference. If the cell is #REF! and the second argument is missing, add FALSE or switch the string to A1.