#excel #vba #replace
#excel #vba #заменить
Вопрос:
Ячейка A1 в ячейку A7 была названа Токио. Значение ячейки A1, A2, A6, A10 равно «[ABC]». При выполнении кода значения в ячейках A1, A2, A6 должны быть заменены на «15 Migration», а значение ячейки A10 должно оставаться как «[ABC]», поскольку оно находится за пределами именованного диапазона.
Я попробовал следующее, но оно также заменяет значения за пределами именованного диапазона:
For Each cell In Range("Tokyo")
Cells.Replace What:="[*]", Replacement:="[15 Migration]", LookAt:=Part, SearchOrder:=ByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next cell
Комментарии:
1. Можете ли вы поделиться некоторыми примерами данных, чтобы мы могли воспроизвести возникшую у вас проблему?
2. Ячейка A1 в ячейку A7 была названа Токио. Значение ячейки A1, A2, A6, A10 в настоящее время равно «[ABC]». При выполнении кода vba значения в ячейках A1, A2, A6 должны быть заменены на «15 Migration», а значение ячейки A10 должно оставаться как «[ABC]», поскольку оно находится за пределами именованного диапазона Tokyo.
Ответ №1:
- Цикл не нужен — просто используйте
Range.Replace
. - Реальная проблема заключается в том, что это
Cells.Replace
относится ко всем ячейкам вActiveSheet
, поэтому замены будут происходить вне рассматриваемого диапазона. - Обратите внимание, что вы хотите
xlPart
иxlByRows
, а неPart
иByRows
. СмотритеRange.Replace
документацию для получения более подробной информации.
Range("Tokyo").Replace What:="[*]", Replacement:="[15 Migration]", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Комментарии:
1. спасибо BigBen. У меня есть еще один вопрос. В предложенном вами приведенном выше коде можем ли мы сделать что-то вроде Replacement:= sheet2!A3, если я хочу, чтобы значение замены выводилось из ячейки A3 в sheet2. В приведенном выше примере «[15 Миграция]» — это жестко закодированное значение.
2. Конечно, что-то вроде
Replacement:= ThisWorkbook.Sheets("sheet2").Range("A3").Value
.3. Спасибо Big Ben. Я попробовал это, и теперь часть кода работает. Однако я еще не получил окончательный результат, который искал. Итак, вот сценарий: на листе 1 значение ячейки A1 равно [ABCD], включая скобки. При выполнении кода значение внутри скобки должно измениться на контакты выбранной ячейки на листе 2. Например, если я выберу ячейку A2 на листе 2, содержимое ячейки A1 на листе 1 должно измениться с [ABCD] на [содержимое ячейки A2 на листе 2]. Если я выберу ячейку A5 в seet2, содержимое ячейки A1 на листе 1 должно измениться с [ABCD] на [содержимое ячейки A5 на листе 2].
4. Возможно, задайте новый вопрос, включая код, который вы используете, и что не работает.