Я думаю, что вы застряли с обходным приемом, который вы упомянули при редактировании.
Я бы начал с преобразования каждой формулы на листе в текст, примерно такой:
Dim r As Range
For Each r In Worksheets("Sheet1").UsedRange
If (Left$(r.Formula, 1) = "=") Then
r.Formula = "'ZZZ" & r.Formula
End If
Next r
, где 'ZZZ
использует '
для обозначения текстового значения, а ZZZ
- как значение, которое мы можем искать, когда хотим преобразовать текст обратно в формулу. Очевидно, что если любая из ваших ячеек фактически начинается с текста ZZZ
, тогда измените значение ZZZ
в макросе VBA на что-то другое
Когда перестановка будет завершена, я тогда преобразую текст обратно в формулу, подобную этой:
For Each r In Worksheets("Sheet1").UsedRange
If (Left$(r.Formula, 3) = "ZZZ") Then
r.Formula = Mid$(r.Formula, 4)
End If
Next r
Один реальный недостаток этого метода в том, что вы не можете видеть результаты какой-либо формулы, пока вы реорганизуете. Вы можете обнаружить, что при обратном преобразовании текста в формулу у вас есть, например, множество ошибок #REF
.
Возможно, было бы полезно поработать над этим поэтапно и время от времени возвращаться к формулам, чтобы убедиться, что никаких катастроф не произошло