Заменить значения в выбранном именованном диапазоне

#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:

  1. Цикл не нужен — просто используйте Range.Replace .
  2. Реальная проблема заключается в том, что это Cells.Replace относится ко всем ячейкам в ActiveSheet , поэтому замены будут происходить вне рассматриваемого диапазона.
  3. Обратите внимание, что вы хотите 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. Возможно, задайте новый вопрос, включая код, который вы используете, и что не работает.