If you can it makes sense to calculate the positions in the sub routine and load as constants into the formula
However, if you need the formula to persist in a dynamic sense forever more then use INDEX (ADDRESS warrants Volatile INDIRECT wrapper)
On that basis:
=IF(ISBLANK($A3),"",IF(LEN($A3)=13,RIGHT($A3,11),$A3)&IF(INDEX(3:3,MATCH("Title 1",$1:$1,0))<>"","-"&INDEX(3:3,MATCH("Title 1",$1:$1,0)),""))
In VBA R1C1 form
.FormulaR1C1 = "=IF(ISBLANK(RC1),"""",IF(LEN(RC1)=13,RIGHT(RC1,11),RC1)&IF(INDEX(R,MATCH(""Title 1"",R1,0))<>"""",""-""&INDEX(R,MATCH(""Title 1"",R1,0)),""""))"
Bookmarks