Мне нужно заменить большое количество чисел словами в электронной таблице Excel. Например:

1 = hello
12 = goodbye
4 = cat

и т. д. Я могу сделать это с помощью стандартного поиска и замены, но у меня есть большой список для работы (около 240 комбинаций цифр / слов), поэтому я решил использовать макрос.

У меня есть это:

Sub findreplacer()
For Each mycell In Range("A1:A1000")
mycell.Replace What:="1", Replacement:="hello"
mycell.Replace What:="12", Replacement:="goodbye"
mycell.Replace What:="4", Replacement:="cat"
Next

End Sub

Но он заменяет 1 в 12, поэтому ячейка читает hello2 вместо прощания. Как я могу сделать так, чтобы это влияло только на ячейки, которые содержат только определенное число, как работает метод «соответствовать содержимому всей ячейки»?

Любая помощь приветствуется.

2 ответа2

5

Смена порядка - это нормально, пока каждое значение в листе будет заменено. Если ваш лист содержал 11, хотя он не подлежал замене, то изменение порядка все равно заменит его на hello1.
Для использования соответствия всей ячейке укажите

,LookAt:=xlWhole

в качестве другого параметра для метода замены. Replace является допустимым методом для диапазона, поэтому цикл For не требуется. Вы можете вместо этого указать

Range("A1:A1000").Replace What:="12", Replacement:="goodbye", LookAt:=xlWhole  
Range("A1:A1000").Replace What:="4", Replacement:="cat", LookAt:=xlWhole
1

Я не уверен, что есть лучшее решение, но то, что я думаю, говорит об обратном порядке. Например:

Sub findreplacer()
For Each mycell In Range("A1:A1000")
mycell.Replace What:="12", Replacement:="goodbye"
mycell.Replace What:="4", Replacement:="cat"
mycell.Replace What:="1", Replacement:="hello"
Next

End Sub

В этом случае 12 будет сначала заменено на "до свидания", и когда появится строка, которая заменяет 1 на "привет", она уже изменилась бы.

Опять же, возможно, есть лучшее решение, но я думаю, что это поможет быстро исправить параметры, которые вы описали.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .