Макросы в excel найти заменить

Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода Range.Replace из кода VBA Excel.

Range.Replace – это метод, который находит по шаблону подстроку в содержимом ячеек указанного диапазона, заменяет ее на другую подстроку и возвращает значение типа Boolean.

Метод имеет некоторые особенности, которые заключаются в следующем:

  • при присвоении булева значения, возвращаемого методом Range.Replace, переменной, необходимо список параметров (аргументов) метода заключать в круглые скобки;
  • если метод используется без присвоения возвращаемого значения переменной, параметры должны быть указаны без заключения их в круглые скобки.

Синтаксис и параметры метода

Синтаксис

Синтаксис при замене подстроки и присвоении переменной возвращаемого значения типа Boolean:

variable = expression.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])

Синтаксис при замене подстроки без присвоения переменной возвращаемого значения:

expression.Replace What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]

  • variable – переменная (тип данных — Boolean);
  • expression – выражение, возвращающее объект Range.

Параметры

Параметр Описание
What Искомая подстрока или шаблон*, по которому ищется подстрока в диапазоне ячеек. Обязательный параметр.
Replacement Подстрока, заменяющая искомую подстроку. Обязательный параметр.
LookAt Указывает правило поиска по полному или частичному вхождению искомой подстроки в текст ячейки:
1 (xlWhole) – поиск полного вхождения искомого текста;
2 (xlPart) – поиск частичного вхождения искомого текста.
Необязательный параметр.
SearchOrder Задает построчный или постолбцовый поиск:
1 (xlByRows) – построчный поиск;
2 (xlByColumns) – постолбцовый поиск.
Необязательный параметр.
MatchCase Поиск с учетом или без учета регистра:
0 (False) – поиск без учета регистра;
1 (True) – поиск с учетом регистра.
Необязательный параметр.
MatchByte Способы сравнения двухбайтовых символов:
0 (False) – двухбайтовые символы сопоставляются с однобайтовыми эквивалентами;
1 (True) – двухбайтовые символы сопоставляются только с двухбайтовым символами.
Необязательный параметр.
SearchFormat Формат поиска. Необязательный параметр.
ReplaceFormat Формат замены. Необязательный параметр.

* Смотрите знаки подстановки для шаблонов, которые можно использовать в параметре What.

Работа метода в VBA Excel

Исходная таблица для всех примеров:

Пример 1

Примеры записи строк кода с методом Range.Replace и поиском по частичному совпадению подстроки с содержимым ячейки:

Sub Primer1()

‘Запись 1:

Range(«A1:C6»).Replace «Лиса», «Рысь», 2

‘Запись 2:

Range(«A1:C6»).Replace What:=«Лиса», Replacement:=«Рысь», LookAt:=2

‘Запись 3:

If Range(«A1:C6»).Replace(«Лиса», «Рысь», 2) Then

End If

‘Запись 4:

Dim a

a = Range(«A1:C6»).Replace(«Лиса», «Рысь», 2)

End Sub

Результат выполнения любого из вариантов кода примера 1:

Пример 2

Поиск по шаблону с использованием знаков подстановки и по полному совпадению подстроки с содержимым ячейки:

Sub Primer2()

Range(«A1:C6»).Replace «Ли??», «Рысь», 1

End Sub

Обратите внимание, что слово «Лиса» заменено словом «Рысь» не во всех ячейках. Это произошло из-за того, что мы использовали параметр LookAt:=1 – поиск полного вхождения искомого текста в содержимое ячейки.

Содержание

  1. VBA Excel. Функция Replace (замена подстроки)
  2. Определение функции Replace
  3. Синтаксис и параметры
  4. Параметр compare
  5. Примеры кода VBA Excel
  6. Пример 1
  7. VBA найти и заменить — Как найти и заменить слова в Excel VBA?
  8. Excel VBA Найти и заменить
  9. Как найти и заменить слова в Excel VBA?
  10. VBA Find and Replace — пример № 1
  11. VBA Find and Replace — пример № 2
  12. Плюсы Excel VBA Найти и заменить
  13. То, что нужно запомнить
  14. Рекомендуемые статьи
  15. VBA Excel. Метод Range.Replace (замена текста в ячейках)
  16. Определение метода Range.Replace
  17. Синтаксис и параметры метода
  18. Синтаксис
  19. Параметры
  20. Replace — функции обработки строки (функции VBA)
  21. Определение функции Replace, описание
  22. Синтаксис функции Replace и параметры
  23. Параметр compare
  24. Возвращаемое значение
  25. Пример №1
  26. Пример №2
  27. Пример №3
  28. Выводы

VBA Excel. Функция Replace (замена подстроки)

Замена части строкового выражения в VBA Excel по указанному шаблону поиска и замены и возврат преобразованной строки с помощью функции Replace.

Определение функции Replace

Если замену подстроки необходимо осуществить в диапазоне ячеек, функцию Replace следует применить к значению каждой ячейки заданного диапазона. Проще замену в диапазоне ячеек произвести с помощью метода Range.Replace.

Синтаксис и параметры

Replace(expression, find, replace, [start], [count], [compare])

  • expression – исходное строковое выражение, содержащее подстроку, которую необходимо заменить;
  • find – искомая подстрока, подлежащая замене;
  • replace – подстрока, заменяющая искомую подстроку;
  • start – порядковый номер символа исходной строки, с которого необходимо начать поиск, часть строки до этого номера обрезается, по умолчанию равен 1 (необязательный параметр);
  • count – количество замен подстроки, по умолчанию выполняется замена всех обнаруженных вхождений (необязательный параметр);
  • compare – числовое значение, указывающее вид сравнения (необязательный параметр).

Сокращенный синтаксис функции Replace с необязательными параметрами по умолчанию:

Replace(expression, find, replace)

Параметр compare

Константа Значение Описание
vbUseCompareOption -1 используется параметр, заданный оператором Option Compare
vbBinaryCompare 0 выполняется двоичное сравнение
vbTextCompare 1 применяется текстовое сравнение

По умолчанию используется двоичное (бинарное) сравнение. При таком сравнении буквенные символы в нижнем и верхнем регистрах различаются. Если необходимо провести замену подстроки независимо от регистра букв, используйте значение параметра compare – vbTextCompare (1).

Примеры кода VBA Excel

Пример 1

Замена единственного вхождения искомой подстроки в строковое выражение:

Источник

VBA найти и заменить — Как найти и заменить слова в Excel VBA?

Excel VBA Найти и заменить

Вы когда-нибудь задумывались об автоматизации функции поиска и замены в Excel. В VBA мы можем создать макрос, который можно использовать для поиска и замены всего, что мы обычно делаем в Excel, путем нажатия сочетаний клавиш Ctrl + H. С помощью VBA Find and Replace мы можем автоматизировать поиск любого слова и заменить его другим замещением. Это помогает, когда нам нужно выполнить одно и то же действие несколько раз.

Как найти и заменить слова в Excel VBA?

Ниже приведены различные примеры, чтобы найти и заменить слова в Excel, используя код VBA.

Вы можете скачать этот шаблон VBA для поиска и замены Excel здесь — VBA для поиска и замены шаблона Excel

VBA Find and Replace — пример № 1

В очень простом примере у нас есть набор данных, который состоит из некоторого имени. И некоторые имена повторяются, как показано ниже.

Теперь мы создадим код, по которому мы найдем любое повторяющееся имя и заменим его чем-то другим. Для этого выполните следующие шаги.

Шаг 1: Перейдите в меню « Вставка» в VBA и выберите « Модуль», как показано ниже.

Шаг 2: Как только мы это сделаем, мы откроем новый модуль. В этом модуле напишите подкатегорию от имени VBA Find and Replace, или вы можете выбрать любое имя этой подкатегории.

Код:

Шаг 3: Поскольку у нас есть данные в столбце B от ячейки B2 до B10, мы сначала выберем этот диапазон из B2: B10.

Код:

Шаг 4: Теперь, чтобы заменить что-то, нам нужно искать это слово. Здесь также мы сначала выберем функцию Replace, чтобы посмотреть, что нам нужно заменить.

Код:

Согласно синтаксису функции Replace, мы найдем то, что нам нужно заменить.

Шаг 5: Давайте выберем имя из списка « Бен » как то, что нам нужно заменить.

Код:

Шаг 6: Теперь выберите слово для замены, которым мы должны заменить выбранное слово. Здесь мы решили заменить имя Бен на Сэма, который упоминается как Замена, как показано ниже.

Код:

Шаг 7: Теперь скомпилируйте код и запустите его, нажав на кнопку Play или нажав клавишу F5, как показано ниже.

Мы увидим, что все ячейки, содержащие имя Бена, теперь заменены именем Сэм . И это также выделено желтым цветом.

VBA Find and Replace — пример № 2

Мы все, возможно, столкнулись с ситуацией, когда мы пытались найти и заменить некоторые слова буквами с учетом регистра. Предположим, в списке, если мы хотим заменить только то слово, которое имеет несколько строчных или прописных букв. И если мы используем процесс, который мы видели в примере 1, то мы в конечном итоге заменим все подобные слова в этом списке вместе с требуемым. Этот процесс не может быть выполнен с помощью функции поиска и замены (Ctrl + H) в Excel. Для этого у нас есть положение в VBA.

Давайте рассмотрим ниже данные для этого. Как мы видим, мы специально добавили слово BEN в верхнем регистре в ячейку B2.

Выполните следующие шаги, чтобы найти и заменить слово BEN.

Шаг 1: Запустите подкатегорию VBA Find and Replace там, как показано ниже.

Код:

Шаг 2: Выберите список как Диапазон от B2 до B10.

Код:

Шаг 3: Теперь выберите точное слово, которое мы хотим заменить. Здесь мы выбрали BEN, который находится в ячейке B2.

Код:

Шаг 4: Опять же, мы выбрали то же слово, которое мы видели в примере 1, в качестве замены BEN, чем Сэм .

Код:

Шаг 5: Теперь для замены точного слова BEN нам нужно использовать MatchCase, если оно становится TRUE, как показано ниже.

Код:

MatchCase поможет нам определить то слово, которое мы хотим заменить точным соответствием. Здесь слово, которое мы выбрали, это BEN в верхнем регистре, а в списке есть и другие подобные слова, но в правильном.

Шаг 6: Теперь запустите код, нажав на кнопку Play или нажав клавишу F5.

Мы увидим, что слово BEN, которое было в ячейке B2, теперь заменено словом « Sam », выделенным желтым цветом. И подобные слова Бен, которые расположены в ячейках B5 и B8 соответственно, все еще остаются неизменными.

Вот как работает точное совпадение.

Шаг 7: Теперь мы удалим добавленный MatchCase из приведенного выше кода и посмотрим, как это будет работать.

Код:

Шаг 8: Снова скомпилируйте и запустите код.

Мы увидим, что код заменил все ячейки, содержащие слово Ben, как показано выше. Это означает, что после удаления MatchCase код будет работать, как мы видели в примере 1.

Плюсы Excel VBA Найти и заменить

  • Основное обучение заключается в том, что мы можем заменить регистрозависимые слова и содержимое ячеек с помощью VBA Find and Replace, как показано в примере-2.
  • Если действие повторяется вручную и несколько раз, то автоматизация будет преимуществом в экономии времени и усилий.
  • Даже если у нас есть огромный набор данных, в котором мы хотим заменить определенные слова, это можно сделать, не нарушая Excel в громоздких файлах.

То, что нужно запомнить

  • Мы можем создать макрос функции Find and Replace с помощью опции Record Macro на вкладке Developer. Это самый простой способ создать макрос, если вы новичок в кодировании.
  • Сохранение файла в формате Macro Enable Excel позволит в будущем использовать код.
  • Мы можем заменить любой вид текста, слова, числа или символа VBA Find and Replace.

Рекомендуемые статьи

Это руководство по VBA Find and Replace. Здесь мы обсудим, как найти и заменить слова в Excel с помощью VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. VBA Break для Loop
  2. ЗАМЕНА Формулы в Excel
  3. Полное руководство VBA Find
  4. НАЙТИ функцию в Excel

Источник

VBA Excel. Метод Range.Replace (замена текста в ячейках)

Замена подстроки, содержащейся в текстовых значениях ячеек указанного диапазона, другой подстрокой с помощью метода Range.Replace из кода VBA Excel.

Определение метода Range.Replace

Метод имеет некоторые особенности, которые заключаются в следующем:

  • при присвоении булева значения, возвращаемого методом Range.Replace, переменной, необходимо список параметров (аргументов) метода заключать в круглые скобки;
  • если метод используется без присвоения возвращаемого значения переменной, параметры должны быть указаны без заключения их в круглые скобки.

Синтаксис и параметры метода

Синтаксис

Синтаксис при замене подстроки и присвоении переменной возвращаемого значения типа Boolean:

variable = expression.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])

Синтаксис при замене подстроки без присвоения переменной возвращаемого значения:

expression.Replace What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat]

  • variable – переменная (тип данных — Boolean);
  • expression – выражение, возвращающее объект Range.

Параметры

Параметр Описание
What Искомая подстрока или шаблон*, по которому ищется подстрока в диапазоне ячеек. Обязательный параметр.
Replacement Подстрока, заменяющая искомую подстроку. Обязательный параметр.
LookAt Указывает правило поиска по полному или частичному вхождению искомой подстроки в текст ячейки:
1 (xlWhole) – поиск полного вхождения искомого текста;
2 (xlPart) – поиск частичного вхождения искомого текста.
Необязательный параметр.
SearchOrder Задает построчный или постолбцовый поиск:
1 (xlByRows) – построчный поиск;
2 (xlByColumns) – постолбцовый поиск.
Необязательный параметр.
MatchCase Поиск с учетом или без учета регистра:
0 (False) – поиск без учета регистра;
1 (True) – поиск с учетом регистра.
Необязательный параметр.
MatchByte Способы сравнения двухбайтовых символов:
0 (False) – двухбайтовые символы сопоставляются с однобайтовыми эквивалентами;
1 (True) – двухбайтовые символы сопоставляются только с двухбайтовым символами.
Необязательный параметр.
SearchFormat Формат поиска. Необязательный параметр.
ReplaceFormat Формат замены. Необязательный параметр.

* Смотрите знаки подстановки для шаблонов, которые можно использовать в параметре What.

Источник

Replace — функции обработки строки (функции VBA)

Если постоянно приходится выполнять одно и то же действие или появляется потребность автоматизировать некоторые движения, то в Excel есть специальная функция – макросы. Это маленькие (или не очень) скрипты, позволяющие выполнять ряд действий за пользователя. Если правильно использовать макросы, то можно выполнять почти любое действие, даже то, которое не предусмотрено стандартным функционалом.

Самые простые макросы могут быть записаны с помощью специальной кнопки. Достаточно ее нажать и выполнить определенные действия. Но для более продвинутого уровня все же придется изучать язык программирования. Но на самом деле, это не так сложно. Главное – иметь в голове хорошую идею, как можно макрос применить.

Программирование макросов осуществляется с помощью языка VBA. И в нем есть одна из часто используемых функций – Replace.

Определение функции Replace, описание

С помощью функции Replace можно заменить всю строку или отдельную подстроку, используя в качестве ориентира определенный шаблон. Как результат, эта функция возвращает получившуюся строку. Причем замена может осуществляться определенное количество раз, и функция автоматически вносит необходимые коррективы.

С помощью этой функции можно осуществить автоматически сразу несколько действий:

  1. Найти определенную строку и подстроку, замена которой требуется.
  2. Заменить текст на тот, который был указан пользователем или был возвращен формулой.
  3. Найти следующий аналогичный фрагмент. И снова его заменить. И так такое количество раз, сколько нужно. Если конкретно, это количество записывается в параметре Count, который записывается далее.

Если необходимо осуществить замену внутри определенного диапазона, то нужно использовать функцию Replace применительно к каждой ячейке. Но если использовать объект Range, то можно значительно упростить процесс.

Если выражаться более просто, эта функция является заменой окна «Найти и заменить» . Она позволяет автоматизировать этот процесс, например, основываясь на результатах вычислений или действиях, совершенных ранее. Например, можно запрограммировать макрос на то, чтобы он автоматически подгружал оценки учеников, и если новая оценка выше предыдущей, то вместо текста «учится плохо» писать строку «учится лучше». Таким образом, можно значительно превысить те возможности. которые используются в стандартной функции «Условное форматирование», поскольку такое сравнение реализовать стандартными средствами Эксель не так удобно, как макросами (хотя если заморочиться, то можно). Но есть и более сложные задачи, реализовать которые можно исключительно с помощью макросов.

Функцию «Найти и заменить» знают почти все пользователи Эксель. Она позволяет осуществить замену искомой строки один и более раз. Перед тем, как мы начнем рассматривать, как автоматизировать процесс, необходимо сперва разобраться в стандартном алгоритме действий пользователя, если он хочет заменить один текст на другой. Все потому, что нельзя рассматривать более продвинутые инструменты, не разобравшись толком в простых.

Итак, чтобы заменить определенный текст на какую-то строку без макроса, необходимо на вкладке «Главная» найти пункт «Редактирование». Там в группе «Редактирование» нужно найти такую кнопку. После этого откроется небольшое меню, в котором нужно будет выбрать пункт «Заменить».

1

Можно же значительно упростить себе жизнь, один раз запомнив комбинацию клавиш Ctrl + H.

После этого появится такое окно.

2

В нем мы видим две строки. В первой нужно указывать ту строку, которую программа должна найти. Во второй записывается тот текст, на который должна описанная выше строка замениться первая строка. Окно предусматривает также возможность настроить формат, если нажать на кнопку «Параметры».

3

Если необходимо осуществить замену во всех аналогичных местах, то это можно сделать с помощью кнопки «Заменить все». Если же нажимать просто кнопку «Заменить», то можно выбирать, какой фрагмент заменять, а какой – нет. Чтобы пропустить какое-то вхождение, нужно нажать кнопку «Найти далее», и делать это до тех пор, пока не будет найден тот вариант, который требует замены. После этого пользователь нажимает кнопку «Заменить».

Приятный бонус: с помощью комбинации клавиш Ctrl + Enter можно сделать искусственный разрыв строк, чтобы написать несколько строк в рамках одной ячейки.

4

При чем это к нашей теме? А отношение самое прямое. Как правило, чтобы удалить эти разрывы, пользователь вручную убирает соответствующие непечатаемые символы. Но это можно сделать проще, с помощью окна «Найти/Заменить». После этого в поле «Найти» указывается символ разрыва строки. Его можно ввести нажатием комбинации клавиши Ctrl + J. В соответствующем месте появится точка, которая обозначает этот непечатный символ.

После этого нам остается ввести символ, на который будет осуществляться замена. Поскольку перед нами стоит цель убрать все переносы строк, то логично их заменить на пробелы. Если этого не сделать, то символы могут просто слиться в одно большое слово, что нам не надо.

5

Видим, что после того, как мы нажали «ОК», три строки были слиты в одну, и при этом после каждого слова стоит пробел.

Если посмотреть на окно поиска и замены еще раз, то будет видно. что после нажатия на кнопку «Параметры» появляется еще некоторое количество параметров, дающих возможность выбрать область поиска, особенности просмотра и где осуществлять поиск нужных значений.

Также можно настроить отображение значений с учетом регистра (то есть, больших и маленьких букв), а также поставить флажок возле пункта «Ячейка целиком». Что касается формата, то он будет отображаться в специальном поле возле кнопки настройки.

Синтаксис функции Replace и параметры

В целом, синтаксис этой функции выглядит следующим образом.

Replace(expression, find, replace, [start], [count], [compare])

Давайте разберем аргументы этой функции более детально:

  1. Expression. Это изначальная строка, замена которой требуется.
  2. Find – это подстрока, входящая в состав строки верхнего уровня, в которой нужно осуществлять замену значения.
  3. Replace – это подстрока, которая заменяет ту подстроку, которая описана в предыдущем аргументе. Проще говоря, тот текст, на который требуется заменить.
  4. Start. Этот параметр необязательный. Характеризует порядковый номер символа строки, с которого макрос будет осуществлять поиск. Та часть строки, которая располагается до этого номера, просто не учитывается при замене.
  5. Count. Это количество итераций, в ходе которых будет осуществляться замена. Этот параметр также является необязательным.
  6. Compare. Это значение в числовом формате, которое используется для указания вида сравнения. Данный параметр также указывать необязательно.

Если опустить все необязательные аргументы, то синтаксис функции Replace будет выглядеть менее устрашающе.

Replace(expression, find, replace)

У многих людей возникает вопрос: чем отличается параметр от аргумента. Несмотря на то, что эти термины часто используют в качестве синонимов, это не совсем правильно. Аргумент функции – это фактически переменная, которая используется при вычислении. Параметр же – это значение, которое находится в переменной.

Параметр compare

Использование параметра compare имеет свои особенности. Нужно указывать не текстовое значение, а числовое, которое служит константой, обозначающей тип сравнения. Давайте рассмотрим их более подробно.

  1. -1. В этом случае в качестве аргумента используется то значение, которое определяется оператором Option Compare.
  2. 0. Это двоичное сравнение.
  3. 1 – текстовое сравнение.

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

Бинарное сравнение используется по умолчанию. Следовательно, если не указывать этого аргумента в функции, то регистры будут учитываться. Если же нужно сделать так, чтобы программа их в учет не брала, то обязательно в качестве последнего параметра нужно указать единицу.

Возвращаемое значение

В программировании есть такое понятие, как тип данных. Поскольку таблицы Excel тоже являются программируемыми, то даже незнакомый с макросами человек понимает, что это такое. В языке VBA существует несколько основных типов данных. В нашем случае возвращается тип String.

Если значение аргумента Expression нулевое, то и строка вернется нулевая. Если же было в качестве значения Expression значение Null, то формула выдаст ошибку. Нужно учитывать еще некоторые моменты при использовании этой функции:

  1. Если в качестве аргумента Find вводится строка, длина которой нулевая, то функция вернет то же значение, которое введено в качестве параметра Expression. Технически это означает, что нет особой подстроки, которую нужно искать в рамках строки, которая передается аргументу Expression.
  2. Если длина параметра Replace нулевая, то тогда возвращается строка, соответствующая первому параметру с удаленной частью второго параметра. Технически это означает, что строка текста была заменена на пустое значение.
  3. Если в качестве параметра Start было передано число, превышающее длину искомой строки, то вернется пустая строка. Если же этому аргументу передать число 0, то поиск будет осуществляться после нулевого символа, то есть сразу. Поэтому возвращаться будет то значение, которое указано в качестве параметра Expression.

На эти моменты нужно обратить особое внимание и запомнить их перед тем, как использовать функцию Replace. Это здорово поможет в отладке написанных макросов, если знать эти особенности.

Пример №1

В этом примере имеется единственное вхождение искомой подстроки. И его нужно заменить.

Sub Primer1()

Dim a

a = «Сливочное масло»

a = Replace(a, «Сливочное», «Рыжиковое»)

MsgBox a

‘Результат: «Рыжиковое масло»

End Sub

Пример №2

Данный пример осуществляет замену нескольких вхождений подстроки.

Sub Primer2()

Dim a

a = «Идёт медведь, идёт лиса, идёт грач»

‘с параметром compare по умолчанию

a = Replace(a, «идёт», «бежит»)

MsgBox a

‘Результат:

‘Идёт медведь, бежит лиса, бежит грач

a = «Идёт медведь, идёт лиса, идёт грач»

‘с параметром compare=1(vbTextCompare)

a = Replace(a, «идёт», «бежит», , , 1)

MsgBox a

‘Результат:

‘бежит медведь, бежит лиса, бежит грач

End Sub

Пример №3

В этом случае осуществляется замена одной подстроки, на поиск начинается только с пятнадцатого символа.

Sub Primer3()

Dim a

a = «Идёт медведь, идёт лиса, идёт грач»

a = Replace(a, «идёт», «бежит», 15, 1)

MsgBox a

‘Результат:

‘бежит лиса, идёт грач

End Sub

Выводы

Видим, что функция Replace достаточно удобна в использовании. С ее помощью можно добиться максимальной гибкости, которая безусловно важна в работе с электронными таблицами. Она является тем кирпичиком, который превращает Excel из программы для составления больших баз данных в полноценный инструмент, который может все.

Функция «Найти и заменить» активно используется и дает возможность при правильном применении сэкономить огромное количество времени. И это если она используется сама по себе. Если же написать скрипт, то нужно один раз вложить время, чтобы потом его экономить.

Существует еще огромное количество функций, которые позволяют автоматизировать работу с текстом в Excel. Причем есть такие причудливые, например, как функция Space(), которая дает возможность получить строку, основываясь на количестве пробелов. Каждая функция может сочетаться с другими, что дает почти неограниченный простор возможностей.

При этом мы видим, что эта функция VBA не заменяет полностью всех возможностей Excel по замене строк. Так, не поддерживается настройка формата и ряд других возможностей. Тем не менее, это можно сделать с помощью других функций, поэтому нет необходимости такое большое количество аргументов использовать в рамках одной простой процедуры.

Источник

 

argyman

Пользователь

Сообщений: 45
Регистрация: 20.04.2015

Добрый день!

Прошу Вашей помощи!
В примере есть лист 1 — Specification, в первом столбце(его положение может меняться, поэтому лучше использовать выделенный диапазон) слова с ошибками, в них нужно исправить ошибки с помощью замены, из листа 2 — ReplaceList, в нём два столбца, в первом слова с ошибками, во втором правильный, он будет постоянно дополняться.

Нужен макрос, который бы находил и заменял текст в выделенном диапазоне ячеек согласно списку, объем достаточно большой от 2 500 до 10 000 ячеек.

Буду очень благодарен за помощь!

Спасибо!

 

tolstak

Пользователь

Сообщений: 471
Регистрация: 01.08.2017

#2

24.08.2018 14:22:50

argyman, вот вариант:

Код
Sub replaceByList()
    Dim replaceRn As Range, inputRn As Range, replacementsRn As Range
    ' Определяем диапазон со значениями для замен
    With ThisWorkbook.Sheets("ReplaceList")
        Set replacementsRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1))
    End With
    With ThisWorkbook.Sheets("Specification")
        ' Устанавливаем стартовый диапазон
        Set replaceRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
        ' Выделяем стартовый диапазон
        replaceRn.Parent.Activate
        replaceRn.Select
        ' Выведем запрос на изменение диапазона
        On Error Resume Next
        Set inputRn = Application.InputBox( _
                        Prompt:="Адрес для массовой замены", _
                        Title:="Замена по списку", _
                        Default:=replaceRn.Address(True, True, xlA1, True), _
                        Type:=8)
        Err.Clear
        On Error goto 0
        ' Если пользователь отменил выделение - выйдем из макроса с предупреждением
        If Not inputRn Is Nothing Then
            Set replaceRn = inputRn
        Else
            MsgBox "Диапазон не выбран", vbCritical
            Exit Sub
        End If
    End With
    
    ' Для каждой пары заменяемых значений сделаем замену
    For Each rrow In replacementsRn.Rows
        replaceRn.Replace What:=rrow.Cells(1, 1).Value, Replacement:=rrow.Cells(1, 2).Value
    Next rrow
    
    ' Выведем сообщение о завершении работы (можно убрать)
    MsgBox "Done!", vbInformation
End Sub

Прикрепленные файлы

  • ReplaceMacros.xlsm (18.35 КБ)

Изменено: tolstak24.08.2018 14:24:14

In GoTo we trust

 

Nordheim

Пользователь

Сообщений: 3154
Регистрация: 18.04.2017

#3

24.08.2018 14:39:30

Еще вариант:

Код
Option Explicit

Sub test()
    Dim dic As Object, txt$
    Dim i&, arr()
    Set dic = CreateObject("Scripting.Dictionary")
    arr = Worksheets("ReplaceList").UsedRange.Value
    For i = 1 To UBound(arr)
        txt = arr(i, 1)
        dic.Item(txt) = arr(i, 2)
    Next i
    arr = Worksheets("Specification").UsedRange.Value
    For i = 1 To UBound(arr)
        txt = arr(i, 1)
        If dic.exists(txt) Then arr(i, 1) = dic.Item(txt)
    Next i
    Worksheets("Specification").[a1].Resize(UBound(arr), UBound(arr, 2)).Value = arr
End Sub

«Все гениальное просто, а все простое гениально!!!»

 

argyman

Пользователь

Сообщений: 45
Регистрация: 20.04.2015

tolstak, огромное Вам спасибо!
Отличное решение!
Именно то, что я и хотел!

 

Nordheim

Пользователь

Сообщений: 3154
Регистрация: 18.04.2017

#5

24.08.2018 15:08:17

Пример с выбором диапазона:

Код
Sub test()
'   ---------------------------------------------
    Dim dic As Object, i&, txt$
    Dim allrange As Range, rng As Range
'   ---------------------------------------------
    Application.ScreenUpdating = False
    Set dic = CreateObject("Scripting.Dictionary")
    Set allrange = Application.InputBox("Выберите диапазон", Type:=8)
    arr = Worksheets("ReplaceList").UsedRange.Value
    For i = 1 To UBound(arr)
        txt = arr(i, 1)
        dic.Item(txt) = arr(i, 2)
    Next i
    For Each rng In allrange
        txt = rng.Value
        If dic.exists(txt) Then rng.Value = dic.Item(txt)
    Next rng
    Application.ScreenUpdating = True
End Sub

«Все гениальное просто, а все простое гениально!!!»

 

argyman

Пользователь

Сообщений: 45
Регистрация: 20.04.2015

Nordheim, круто! спасибо большое!

 

AngSem

Пользователь

Сообщений: 1
Регистрация: 03.06.2019

А как можно дополнить данный код, чтобы рядом с таблицей значений на замену была таблица со значениями, при встрече которых строка бы удалялась полностью?

 

tolstak

Пользователь

Сообщений: 471
Регистрация: 01.08.2017

#8

10.06.2019 14:08:05

AngSem, можно вот так:

Код
Sub replaceByList()
    Dim replaceRn As Range, inputRn As Range, replacementsRn As Range
    Dim deletionRn As Range, delRn As Range
    
    ' Определяем диапазон со значениями для удаления и замен
    With ThisWorkbook.Sheets("ReplaceList")
        ' Значения для удаления
        Set deletionRn = Range(.Cells(2, 5), .Cells(.Rows.Count, 5).End(xlUp).Offset(0, 1))
        
        ' Значения для замены
        Set replacementsRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1))
    End With
    
    With ThisWorkbook.Sheets("Specification")
        ' Устанавливаем стартовый диапазон
        Set replaceRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
        ' Выделяем стартовый диапазон
        replaceRn.Parent.Activate
        replaceRn.Select
        ' Выведем запрос на изменение диапазона
        On Error Resume Next
        Set inputRn = Application.InputBox( _
                        Prompt:="Адрес для массовой замены", _
                        Title:="Замена по списку", _
                        Default:=replaceRn.Address(True, True, xlA1, True), _
                        Type:=8)
        Err.Clear
        On Error GoTo 0
        ' Если пользователь отменил выделение - выйдем из макроса с предупреждением
        If Not inputRn Is Nothing Then
            Set replaceRn = inputRn
        Else
            MsgBox "Диапазон не выбран", vbCritical
            Exit Sub
        End If
    End With
    
' Поиск строк для УДАЛЕНИЯ
' Если удаление не требуется, кусок можно закомментировать
    ' Для каждой строки в анализируемых данных
    For Each ccell In inputRn.Cells
        ' Если ВПР(текущее значение;список_на_удаление;1;0) находит что-то, то
        If Not IsError(Application.VLookup(ccell.Cells(1).Value, deletionRn, 1, 0)) Then
            ' Добавим текущую строку к диапазону на удаление
            If delRn Is Nothing Then
                Set delRn = ccell.EntireRow
            ' Если в диапазоне на удаление уже что-то есть - допишем в него текущую строку
            Else
                Set delRn = Union(delRn, ccell.EntireRow)
            End If
        End If
    Next ccell
    ' Удалим диапазон, если он не пустой
    If Not delRn Is Nothing Then delRn.Delete
''
    
    
' Поиск строк для ЗАМЕНЫ
' Если удаление не требуется, кусок можно закомментировать
    
    ' Для каждой пары заменяемых значений сделаем замену
    For Each rrow In replacementsRn.Rows
        replaceRn.Replace What:=rrow.Cells(1, 1).Value, Replacement:=rrow.Cells(1, 2).Value
    Next rrow
''
    
    ' Выведем сообщение о завершении работы (можно убрать)
    MsgBox "Done!", vbInformation
End Sub


Прикрепленные файлы

  • ReplaceMacros.xlsm (21.07 КБ)

In GoTo we trust

 

Andrey K

Пользователь

Сообщений: 2
Регистрация: 12.06.2020

Вопрос к tolstak,  а как в первом варианте сделать так чтобы значения в ячейках которые проверяются были жестко зафиксированы.
то есть в файле спецификации есть и aakrp и aakr  и aakr45

при нынешней обработке получается что  aakrp и  aakr45 преобразовываются в значение которое подставляется по синтаксису aakr  с концом от значения в виде P и 45
как залочить значения? что если в ячейке aakr45 то оно и будет менятся на то чему равно в спецификации.

Изменено: Andrey K12.06.2020 18:52:13

 

tolstak

Пользователь

Сообщений: 471
Регистрация: 01.08.2017

#10

12.06.2020 18:57:53

Andrey K, по идее, вот так:

Код
    ' Для каждой пары заменяемых значений сделаем замену
    For Each rrow In replacementsRn.Rows
        replaceRn.Replace What:=rrow.Cells(1, 1).Value, Replacement:=rrow.Cells(1, 2).Value, LookAt:=xlWhole
    Next rrow
    

Прикрепленные файлы

  • ReplaceMacros.xlsm (18.85 КБ)

In GoTo we trust

 

Andrey K

Пользователь

Сообщений: 2
Регистрация: 12.06.2020

tolstak,Спасибо большое всё помогло! =) дальше уже сам доделал обратное объединение в строку.

 

ageres1982

Пользователь

Сообщений: 30
Регистрация: 15.10.2019

Вопрос к tolstak,  а как в первом варианте делать замену и по условию: т.е если значение ячейки не начинается на Liftinq или на Antistat то замену выполняем , в противном случае оставляем значение ячейки без изменений  

 

tolstak

Пользователь

Сообщений: 471
Регистрация: 01.08.2017

#13

22.07.2020 08:42:41

ageres1982, вот так:

Код
Sub replaceByList()
    Dim replaceRn As Range, inputRn As Range, replacementsRn As Range
    ' Определяем диапазон со значениями для замен
    With ThisWorkbook.Sheets("ReplaceList")
        ' Фразы для замены
        Set replacementsRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1))
        ' Если ячейка начинается на эти слова - не делаем замену
        Set startingWordsToIgnoreRn = Range(.Cells(2, 4), .Cells(.Rows.Count, 4).End(xlUp))
    End With
    
    With ThisWorkbook.Sheets("Specification")
        ' Устанавливаем стартовый диапазон
        Set replaceRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
        ' Выделяем стартовый диапазон
        replaceRn.Parent.Activate
        replaceRn.Select
        ' Выведем запрос на изменение диапазона
        On Error Resume Next
        Set inputRn = Application.InputBox( _
                        Prompt:="Адрес для массовой замены", _
                        Title:="Замена по списку", _
                        Default:=replaceRn.Address(True, True, xlA1, True), _
                        Type:=8)
        Err.Clear
        On Error GoTo 0
        ' Если пользователь отменил выделение - выйдем из макроса с предупреждением
        If Not inputRn Is Nothing Then
            Set replaceRn = inputRn
        Else
            MsgBox "Диапазон не выбран", vbCritical
            Exit Sub
        End If
    End With
    
    ' Для каждой пары заменяемых значений сделаем замену
    For Each rrow In replacementsRn.Rows
        ' По умолчанию - обрабытываем ячейку
        proceed = True
        ' Проверяем наличие слов из списка
        For Each wordRn In startingWordsToIgnoreRn
            word = wordRn.Value
            If Left(rrow.Cells(1, 1).Value, Len(word)) = word Then
                proceed = False
                Exit For
            End If
        Next wordRn
        
        ' Если нет слов из списка - начинаем замену.
        If proceed Then
            replaceRn.Replace What:=rrow.Cells(1, 1).Value, Replacement:=rrow.Cells(1, 2).Value
        End If
    Next rrow
    
    ' Выведем сообщение о завершении работы (можно убрать)
    MsgBox "Done!", vbInformation
End Sub

Прикрепленные файлы

  • ReplaceMacros (1).xlsm (20.91 КБ)

In GoTo we trust

 

ageres1982

Пользователь

Сообщений: 30
Регистрация: 15.10.2019

tolstak

Спасибо огромное.
Вижу в Вашем примере отрабатывает,  переношу в свой — не работает и не понимаю почему.
Может быть дело в _ в исключениях?
Подскажите пжста чтоне так?

 

ageres1982

Пользователь

Сообщений: 30
Регистрация: 15.10.2019

 

tolstak

Пользователь

Сообщений: 471
Регистрация: 01.08.2017

#16

22.07.2020 11:00:27

ageres1982, упс, кажется, малеленькая опечатка  :)
Должно быть

Код
    ' Для каждой пары заменяемых значений сделаем замену
    For Each rrow In replaceRn.Rows
        ' По умолчанию - обрабытываем ячейку
        proceed = True

вместо

Код
    ' Для каждой пары заменяемых значений сделаем замену
    For Each rrow In replacementsRn.Rows
        ' По умолчанию - обрабытываем ячейку
        proceed = True

Прикрепленные файлы

  • Проверка.xlsm (67.55 КБ)

In GoTo we trust

 

ageres1982

Пользователь

Сообщений: 30
Регистрация: 15.10.2019

Спасибо :)
Исключения теперь обходит, а когда нужно сделать замену выдаёт 13 ошибку.
Добавил пример.
 

 

tolstak

Пользователь

Сообщений: 471
Регистрация: 01.08.2017

#18

22.07.2020 13:03:02

ageres1982, кажется, я совсем запутался в своем старом коде, прощу прощения… :-)

Код
Option Explicit
Option Compare Text

Sub XXXX()
...
Dim replaceRn As Range, inputRn As Range, replacementsRn As Range, startingWordsToIgnoreRn As Range, rrow As Range, proceed As String, wordRn As Range, word As String, where_to_replace_cell As Range
    ' Определяем диапазон со значениями для замен
    With ThisWorkbook.Sheets("Замена")
        ' Фразы для замены
        Set replacementsRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1))
        ' Если ячейка начинается на эти слова - не делаем замену
        Set startingWordsToIgnoreRn = Range(.Cells(2, 4), .Cells(.Rows.Count, 4).End(xlUp))
    End With
    
    With ThisWorkbook.Sheets("Поиск")
        ' Устанавливаем стартовый диапазон
        Set replaceRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
        ' Выделяем стартовый диапазон
        replaceRn.Parent.Activate
        replaceRn.Select
        ' Выведем запрос на изменение диапазона
        On Error Resume Next
        Set inputRn = Application.InputBox( _
                        Prompt:="Адрес для массовой замены", _
                        Title:="Замена по списку", _
                        Default:=replaceRn.Address(True, True, xlA1, True), _
                        Type:=8)
        Err.Clear
        On Error GoTo 0
        ' Если пользователь отменил выделение - выйдем из макроса с предупреждением
        If Not inputRn Is Nothing Then
            Set replaceRn = inputRn
        Else
            MsgBox "Диапазон не выбран", vbCritical
            Exit Sub
        End If
    End With
    
    For Each where_to_replace_cell In replaceRn.Cells
    ' По умолчанию - обрабытываем ячейку
        proceed = True
        ' Проверяем наличие слов из списка
        For Each wordRn In startingWordsToIgnoreRn
            word = wordRn.Value
            If Left(where_to_replace_cell.Cells(1, 1).Value, Len(word)) = word Then
                proceed = False
                Exit For
            End If
        Next wordRn
        ' Если нет слов из списка - начинаем замену.
        If proceed Then
            ' Для каждой пары заменяемых значений сделаем замену
            For Each rrow In replacementsRn.Rows
                where_to_replace_cell.Replace What:=rrow.Cells(1, 1).Value, Replacement:=rrow.Cells(1, 2).Value
            Next rrow
        End If
    
    Next where_to_replace_cell
    ' Выведем сообщение о завершении работы (можно убрать)
    MsgBox "Done!", vbInformation
End Sub

Прикрепленные файлы

  • Проверка (2).xlsm (65.42 КБ)

Изменено: tolstak22.07.2020 13:38:15
(В очередной раз поправил формулу :-) )

In GoTo we trust

 

ageres1982

Пользователь

Сообщений: 30
Регистрация: 15.10.2019

Не работает..
Z_BW_AUTH_AO_YPLANT_3305 — должно остаться без изменения т.к есть в списке исклюения (тут не ок),
а для ZEAD_FI_03_02_D910 должен убраться хвостик _D910 (тут всё ок)

 

ageres1982

Пользователь

Сообщений: 30
Регистрация: 15.10.2019

Спасибо огромное, теперь всё работает  :)  

 

Михаил Лебедев

Пользователь

Сообщений: 2856
Регистрация: 17.01.2013

#21

23.07.2020 10:11:14

Цитата
Nordheim написал:
Еще вариант:

Красиво. Я бы только доделал, чтобы срабатывало и в том случае, если есть несколько слов на замену в одной ячейке. Хотя сейчас это ТС, похоже, не требуется :)

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Марина Александрова

Пользователь

Сообщений: 2
Регистрация: 18.08.2020

#22

08.10.2021 10:35:23

Подскажите пожалуйста, почему может не работать макрос. Суть в следующем: ячейки с «нет данных» (#Н/Д) заменить на пробел.

Код
Sub Макрос1()[
    Cells.Replace What:="#Н/Д", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
 

tolstak

Пользователь

Сообщений: 471
Регистрация: 01.08.2017

#23

08.10.2021 10:56:43

Марина Александрова, возможно у Вас там формула выдает ошибку, а не значение #Н/Д.
В теории, можно написать такой макрос:

Код
    Dim errRn As Range
    ' Selection = Текущие выделенные ячейки
    For Each ccell In Selection
        If IsError(ccell) Then
            If errRn Is Nothing Then
                Set errRn = ccell
            Else
                Set errRn = Union(errRn, ccell)
            End If
        End If
    Next ccell
    If Not errRn Is Nothing Then
        'Значение для замены
        errRn.Value = " "
    End If
End Sub

Прикрепленные файлы

  • ErrClear.xlsm (17.19 КБ)

In GoTo we trust

 
 

Михаил Накаряков

Пользователь

Сообщений: 4
Регистрация: 02.04.2021

#25

18.11.2021 09:15:10

Цитата
написал:
tolstak

Огромное спасибо, очень сильно помогли упростить рутину
Один момент только когда пытаюсь  применить его в своем файле выдает ошибку на
Set replacementsRn = Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1))
подскажите что с этим делать

Изменено: Михаил Накаряков18.11.2021 15:20:29

The_Fog

0 / 0 / 2

Регистрация: 24.02.2016

Сообщений: 75

1

Поиска символов в ячейках и их замена

02.02.2017, 14:48. Показов 9608. Ответов 14

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Нужно найти определенное слово в ячейке и заменить без изменения остальных слов в этой ячейке.
Написал макрос:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim x As Range: Application.ScreenUpdating = False
 Dim flag As Integer
 
    For Each x In Range("E2:E150")
    flag = 0
  
    If x.Value = "11" And flag = 0 Then
       x.Replace "11", "22"
       flag = 1
       End If
       
    If x.Value = "22" And flag = 0 Then
       x.Replace "22", "11"
    End If
    
     
    Next
    
    Application.ScreenUpdating = True

но он не подходит, т.к. ищет значение всей ячейки а не только некоторых символов из нее.
Может быть Find использовать, но как реализовать?



0



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

02.02.2017, 15:53

2

Visual Basic
1
X = Replace(X, "11", "22")



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

02.02.2017, 16:22

3

Заменить можно без цикла и поиска

Visual Basic
1
Range("E2:E150").Replace "11", "22", xlPart



1



The_Fog

0 / 0 / 2

Регистрация: 24.02.2016

Сообщений: 75

03.02.2017, 08:54

 [ТС]

4

Заменить можно без цикла и поиска

Visual Basic
1
Range("E2:E150").Replace "11", "22", xlPart

что значит xlPart ?



0



CyberHelp

6 / 6 / 1

Регистрация: 29.01.2017

Сообщений: 29

03.02.2017, 10:26

5

1)

Visual Basic
1
2
3
4
5
6
7
8
Public Sub NaitiNaVsemListe()
 
'proveryaet na liste vse ya4eiki i menyaet 22 na 11
 
    Cells.Replace What:="22", Replacement:="11", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
 
End Sub

2)

Visual Basic
1
2
3
4
5
6
7
8
9
Public Sub NaitiVDiapazone()
 
'nahodit i menyat 22 na 11 v fiksirovannom diapazone "A2:A4"
 
    Range("A2:A4").Select
    Selection.Replace What:="22", Replacement:="11", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

Смотрите вложенный файл.

P.S.
xlPart это атрибут, указывающий искать в ячейке частично, а не всю ячейку целиком обрабатывать, по-английски part = «часть».

Вложения

Тип файла: rar Find.rar (16.1 Кб, 11 просмотров)



1



The_Fog

0 / 0 / 2

Регистрация: 24.02.2016

Сообщений: 75

03.02.2017, 13:19

 [ТС]

6

А если у меня есть столбец 1 А мне нужно получить 2
2 1
1 2
1 2
Я создаю цикл

Visual Basic
1
2
3
4
5
6
7
8
9
Sub Макрос1()
 
 Dim x As Range
    For Each x In Range("E2:E10")
    flag = 0
   x.Replace "1", "2", xlPart
   x.Replace "2", "1", xlPart
Next
End Sub

Получаю весь столбец с 1. Т.е. мне надо чтобы если он заменил в одной ячейке 1 на 2, он переходил к другой и менял там 2 на 1, а не эту же ячейку заменял. Какое условие написать?

Visual Basic
1
if (x.Replace "1", "2", xlPart)=False Then

это неправильно, но нужно что-то типа вот такого как это сделать?

Добавлено через 11 минут
Прошу прощения один столбец нужно заменить другим

1 2
2 1
1 2
1 2



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

03.02.2017, 20:23

7

Лучший ответ Сообщение было отмечено The_Fog как решение

Решение

На небольшом диапазоне можно и так :

Visual Basic
1
2
3
4
5
6
7
8
Dim x As Range
For Each x In Range("E2:E10")
    If x Like "*1*" Then
       x.Replace "1", "2", xlPart
    Else
       x.Replace "2", "1", xlPart
    End If
Next



1



The_Fog

0 / 0 / 2

Регистрация: 24.02.2016

Сообщений: 75

06.02.2017, 11:33

 [ТС]

8

Visual Basic
1
If x Like "*1*" Then

а что значат эти звездочки около 1 =)



0



1024 / 227 / 21

Регистрация: 20.05.2016

Сообщений: 971

Записей в блоге: 19

06.02.2017, 13:19

9



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

06.02.2017, 17:03

10

The_Fog, * это символ подстановки, обозначающий любое количество символов (в т.ч. 0), впрочем, если он Вас «пугает», то замените на If InStr(x, 1) > 0 Then



0



The_Fog

0 / 0 / 2

Регистрация: 24.02.2016

Сообщений: 75

07.02.2017, 15:07

 [ТС]

11

pashulka,

Visual Basic
1
2
3
4
5
6
7
8
Dim x As Range
For Each x In Range("E2:E10")
    If x Like "*1*" Then
       x.Replace "1", "2", xlPart
    Else
       x.Replace "2", "1", xlPart
    End If
Next

Вообще ничего не меняет =(



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

07.02.2017, 18:42

12

The_Fog, А у меня меняет



1



0 / 0 / 2

Регистрация: 24.02.2016

Сообщений: 75

09.02.2017, 17:39

 [ТС]

13

pashulka, Спасибо все работает, просто у меня данные были на 3 листе =) Еще вопрос чтоб темы не плодить, а если ячейки объединенные DE и в символах есть пробелы как делать replace к какой ячейки обращаться?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

09.02.2017, 19:04

14

The_Fog, Если об’единены ячейки столбцов D и E, то просто перебирайте ячейки столбца D



1



0 / 0 / 2

Регистрация: 24.02.2016

Сообщений: 75

10.02.2017, 12:04

 [ТС]

15

pashulka, Спасибо вам за помощь ! =)



0



  • Excel VBA Найти и заменить

Excel VBA Найти и заменить

Вы когда-нибудь задумывались об автоматизации функции поиска и замены в Excel. В VBA мы можем создать макрос, который можно использовать для поиска и замены всего, что мы обычно делаем в Excel, путем нажатия сочетаний клавиш Ctrl + H. С помощью VBA Find and Replace мы можем автоматизировать поиск любого слова и заменить его другим замещением. Это помогает, когда нам нужно выполнить одно и то же действие несколько раз.

Как найти и заменить слова в Excel VBA?

Ниже приведены различные примеры, чтобы найти и заменить слова в Excel, используя код VBA.

Вы можете скачать этот шаблон VBA для поиска и замены Excel здесь — VBA для поиска и замены шаблона Excel

VBA Find and Replace — пример № 1

В очень простом примере у нас есть набор данных, который состоит из некоторого имени. И некоторые имена повторяются, как показано ниже.

Теперь мы создадим код, по которому мы найдем любое повторяющееся имя и заменим его чем-то другим. Для этого выполните следующие шаги.

Шаг 1: Перейдите в меню « Вставка» в VBA и выберите « Модуль», как показано ниже.

Шаг 2: Как только мы это сделаем, мы откроем новый модуль. В этом модуле напишите подкатегорию от имени VBA Find and Replace, или вы можете выбрать любое имя этой подкатегории.

Код:

 Sub Find_Replace1 () End Sub 

Шаг 3: Поскольку у нас есть данные в столбце B от ячейки B2 до B10, мы сначала выберем этот диапазон из B2: B10.

Код:

 Sub Find_Replace1 () Range ("B2: B10"). Replace End Sub 

Шаг 4: Теперь, чтобы заменить что-то, нам нужно искать это слово. Здесь также мы сначала выберем функцию Replace, чтобы посмотреть, что нам нужно заменить.

Код:

 Sub Find_Replace1 () Range ("B2: B10"). Replace End Sub 

Согласно синтаксису функции Replace, мы найдем то, что нам нужно заменить.

Шаг 5: Давайте выберем имя из списка « Бен » как то, что нам нужно заменить.

Код:

 Sub Find_Replace1 () Range ("B2: B10"). Replace What: = "Ben" End Sub 

Шаг 6: Теперь выберите слово для замены, которым мы должны заменить выбранное слово. Здесь мы решили заменить имя Бен на Сэма, который упоминается как Замена, как показано ниже.

Код:

 Sub Find_Replace1 () Range ("B2: B10"). Replace What: = "Ben", Replacement: = "Sam" End Sub 

Шаг 7: Теперь скомпилируйте код и запустите его, нажав на кнопку Play или нажав клавишу F5, как показано ниже.

Мы увидим, что все ячейки, содержащие имя Бена, теперь заменены именем Сэм . И это также выделено желтым цветом.

VBA Find and Replace — пример № 2

Мы все, возможно, столкнулись с ситуацией, когда мы пытались найти и заменить некоторые слова буквами с учетом регистра. Предположим, в списке, если мы хотим заменить только то слово, которое имеет несколько строчных или прописных букв. И если мы используем процесс, который мы видели в примере 1, то мы в конечном итоге заменим все подобные слова в этом списке вместе с требуемым. Этот процесс не может быть выполнен с помощью функции поиска и замены (Ctrl + H) в Excel. Для этого у нас есть положение в VBA.

Давайте рассмотрим ниже данные для этого. Как мы видим, мы специально добавили слово BEN в верхнем регистре в ячейку B2.

Выполните следующие шаги, чтобы найти и заменить слово BEN.

Шаг 1: Запустите подкатегорию VBA Find and Replace там, как показано ниже.

Код:

 Sub Find_Replace2 () End Sub 

Шаг 2: Выберите список как Диапазон от B2 до B10.

Код:

 Sub Find_Replace2 () Range ("B2: B10") End Sub 

Шаг 3: Теперь выберите точное слово, которое мы хотим заменить. Здесь мы выбрали BEN, который находится в ячейке B2.

Код:

 Sub Find_Replace2 () Range ("B2: B10"). Replace What: = "BEN" End Sub 

Шаг 4: Опять же, мы выбрали то же слово, которое мы видели в примере 1, в качестве замены BEN, чем Сэм .

Код:

 Sub Find_Replace2 () Range ("B2: B10"). Replace What: = "BEN", Replacement: = "Sam" End Sub 

Шаг 5: Теперь для замены точного слова BEN нам нужно использовать MatchCase, если оно становится TRUE, как показано ниже.

Код:

 Sub Find_Replace2 () Range ("B2: B10"). Replace What: = "BEN", Replacement: = "Sam", MatchCase: = True End Sub 

MatchCase поможет нам определить то слово, которое мы хотим заменить точным соответствием. Здесь слово, которое мы выбрали, это BEN в верхнем регистре, а в списке есть и другие подобные слова, но в правильном.

Шаг 6: Теперь запустите код, нажав на кнопку Play или нажав клавишу F5.

Мы увидим, что слово BEN, которое было в ячейке B2, теперь заменено словом « Sam », выделенным желтым цветом. И подобные слова Бен, которые расположены в ячейках B5 и B8 соответственно, все еще остаются неизменными.

Вот как работает точное совпадение.

Шаг 7: Теперь мы удалим добавленный MatchCase из приведенного выше кода и посмотрим, как это будет работать.

Код:

 Sub Find_Replace2 () Range ("B2: B10"). Replace What: = "BEN", Replacement: = "Sam", MatchCase: = True End Sub 

Шаг 8: Снова скомпилируйте и запустите код.

Мы увидим, что код заменил все ячейки, содержащие слово Ben, как показано выше. Это означает, что после удаления MatchCase код будет работать, как мы видели в примере 1.

Плюсы Excel VBA Найти и заменить

  • Основное обучение заключается в том, что мы можем заменить регистрозависимые слова и содержимое ячеек с помощью VBA Find and Replace, как показано в примере-2.
  • Если действие повторяется вручную и несколько раз, то автоматизация будет преимуществом в экономии времени и усилий.
  • Даже если у нас есть огромный набор данных, в котором мы хотим заменить определенные слова, это можно сделать, не нарушая Excel в громоздких файлах.

То, что нужно запомнить

  • Мы можем создать макрос функции Find and Replace с помощью опции Record Macro на вкладке Developer. Это самый простой способ создать макрос, если вы новичок в кодировании.
  • Сохранение файла в формате Macro Enable Excel позволит в будущем использовать код.
  • Мы можем заменить любой вид текста, слова, числа или символа VBA Find and Replace.

Рекомендуемые статьи

Это руководство по VBA Find and Replace. Здесь мы обсудим, как найти и заменить слова в Excel с помощью VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. VBA Break для Loop
  2. ЗАМЕНА Формулы в Excel
  3. Полное руководство VBA Find
  4. НАЙТИ функцию в Excel

Понравилась статья? Поделить с друзьями:
  • Макросы в excel как искать
  • Макросы в excel найти в строке
  • Макросы в excel защищены паролем
  • Макросы в excel на языке vba
  • Макросы в excel защищены от редактирования