Iska, Я сам пробовал так делать. Действительно, выравнивание сохраняется, но при просмотре ячейки по F2 апостроф перед числом виден. Я посчитал это некорректным.
То, что сделал я, тоже костыль нехороший: ранее содержимое было текст, а стало числом.
Правильнее, вместо предыдущего костыля такое вот решение (каюсь, надо было не лениться и мозги раньше включить):
Код:
Код: Выделить всё
.Range(RangeIn).Offset(i, 0).NumberFormat = "@"
.Range(RangeIn).Offset(i, 0) = NRepl(j + 1)
ИМХО (но это надо глубже знать задачу), лучше отформатировать весь столбец сразу как текстовый - быстрее будет выполняться.
[spoiler]Код:
[/spoiler]
Код: Выделить всё
.Columns(.Range(RangeIn).Column).NumberFormat = "@"
i = 0
Do
i = i + 1
iCell = Trim(CStr(.Range(RangeIn).Offset(i, 0)))
If Len(iCell) = 0 Then Exit Do
For j = N1 To N2 Step 2
If iCell = NRepl(j) Then
.Range(RangeIn).Offset(i, 0) = NRepl(j + 1)
Exit For
End If
Next
Loop
CStr(NRepl(j + 1)) здесь не нужно, элементы этого массива изначально записывались как литералы.
Я не проверял решение в случае, если замены надо делать не со строками, которые можно интерпретировать как число, а как голимые литералы. Подозреваю, и в этом случае скрипт будет работать.