У меня есть альтернативный метод, который может подойти.
Я создал рабочий лист с 26 000 значений: строки, числа, даты, числа со встроенными запятыми и формулами.
Я запустил циклна приведенном выше листе, внутренний код которого был:
ValueCell = .Cells(RowCrnt, ColCrnt).Formula
If IsNumeric(Replace(ValueCell, ",", "")) Then
.Cells(RowCrnt, ColCrnt).Formula = Replace(ValueCell, ",", "|")
End If
.Cells(RowCrnt, ColCrnt).Formula
, дает формулу, если ячейка содержит единицу, или значение, если ее нет.Если значение или формула с удаленными запятыми является числовым, я заменяю любые запятые трубами.
С 26 000 ячеек это заняло 59 секунд.Сравнивается ли это с вашими дополнительными 45 секундами на 500 строк?
Любые значения, например "1,2,3,15,654", теперь будут "1 | 2 | 3 | 15 | 654", но я предполагаю, что этоне проблема.Если у вас есть вложенные строки, такие как «ab, cd, ef», они все равно будут содержать запятые.Возможно, будет возможно проверить ведущий «=» для исключения формул и автоматически заменить запятые во всем остальном.
Следующий код занял 78 секунд для работы с 26 000 ячеек.
ValueCell = .Cells(RowCrnt, ColCrnt).Formula
If Left(ValueCell, 1) <> "=" Then
.Cells(RowCrnt, ColCrnt).Formula = Replace(ValueCell, ",", "|")
End If
Надеюсь, это поможет, если только даст вам новые идеи.