Ich habe einen schnellen Code geschrieben, der tun soll, was Sie wollen.
Ich gehe davon aus, dass überprüft wird, ob eine Zelle eine Formel enthält, und in diesem Fall alle Instanzen ersetzt werden, in denen diese Zelle mit dieser Formel referenziert wird.
Sobald es das Blatt durchgegangen ist, wenn es irgendwelche Ersetzungen gefunden hat, wird es erneut durchlaufen (nicht wirklich sicher, ob es dies benötigt, aber einfacher einzulegen war). Ich habe auch keine Ahnung, wie schnell dies auf komplexen Arbeitsblättern abläuft.
Beachten Sie, dass $ A $ 1, $ A1, A $ 1 und A1 genauso behandelt werden, wie es ohnehin nicht der Fall ist, wenn festgestellt werden soll, ob die Referenz eingefrorene Zellen enthält.
Sub replace_formulas()
Dim cell_count As Long, flag As Boolean
Do
flag = False
For Each c In ActiveSheet.UsedRange
If c.HasFormula Then
'count number of replacements
cell_count = Application.WorksheetFunction.CountIf(Cells, c.Address) + _
Application.WorksheetFunction.CountIf(Cells, Replace(c.Address, "$", "")) + _
Application.WorksheetFunction.CountIf(Cells, Replace(c.Address, "$", "", 1, 1)) + _
Application.WorksheetFunction.CountIf(Cells, "$" & Replace(c.Address, "$", ""))
'If there is at least one replacement loop through all the cells after this one
If cell_count > 0 Then flag = True
'Replace cell references with and without $ ($A$1,$A1,A$1,A1)
Cells.Replace What:=c.Address, Replacement:="c.formula", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=Replace(c.Address, "$", ""), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:=Replace(c.Address, "$", "", 1, 1), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Cells.Replace What:="$" & Replace(c.Address, "$", ""), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End If
Next
Loop While flag = True
End Sub