Оглавление
В этом учебнике мы рассмотрим несколько способов поиска и замены нескольких слов, строк или отдельных символов, чтобы вы могли выбрать тот, который лучше всего подходит для ваших нужд.
Как люди обычно ищут в Excel? В основном, с помощью функции "Найти и заменить", которая отлично работает для одиночных значений. Но что если вам нужно заменить десятки или даже сотни элементов? Конечно, никто не захочет делать все эти замены вручную один за другим, а затем делать все заново, когда данные изменятся. К счастью, есть несколько более эффективных методов массовой замены в Excel, имы подробно исследуем каждый из них.
Поиск и замена нескольких значений с помощью вложенного SUBSTITUTE
Самый простой способ найти и заменить несколько записей в Excel - это использование функции SUBSTITUTE.
Логика формулы очень проста: вы пишете несколько отдельных функций для замены старого значения на новое. Затем вы вкладываете эти функции одну в другую, так что каждый последующий SUBSTITUTE использует вывод предыдущего SUBSTITUTE для поиска следующего значения.
ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ(ЗАМЕНИТЬ( текст , старый_текст1 , новый_текст1 ), старый_текст2 , новый_текст2 ), старый_текст3 , новый_текст3 )В списке местоположений в A2:A10, предположим, вы хотите заменить сокращенные названия стран (такие как FR , ВЕЛИКОБРИТАНИЯ и США ) с полными именами.
Для этого введите старые значения в D2:D4 и новые значения в E2:E4, как показано на скриншоте ниже. Затем введите приведенную ниже формулу в B2 и нажмите Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4))
...и вы получите все замены сразу:
Обратите внимание, что описанный выше подход работает только в Excel 365 который поддерживает динамические массивы.
В додинамических версиях Excel 2019, Excel 2016 и более ранних формула должна быть написана для самой верхней ячейки (B2), а затем скопирована в нижележащие ячейки:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4))
Обратите внимание, что в данном случае мы фиксируем заменяемые значения абсолютными ссылками на ячейки, чтобы они не сдвигались при копировании формулы вниз.
Примечание. Функция SUBSTITUTE является с учетом регистра означает, что вы должны ввести старые значения ( старый_текст ) в том же регистре букв, в котором они представлены в исходных данных.
Как бы ни был прост этот метод, он имеет существенный недостаток - когда у вас есть десятки элементов для замены, вложенными функциями становится довольно сложно управлять.
Преимущества : прост в реализации; поддерживается во всех версиях Excel
Недостатки : лучше всего использовать для ограниченного числа значений find/replace
Поиск и замена нескольких записей с помощью XLOOKUP
В ситуации, когда вы хотите заменить все содержимое ячейки но не его часть, пригодится функция XLOOKUP.
Допустим, у вас есть список стран в столбце A, и вы хотите заменить все аббревиатуры на соответствующие полные названия. Как и в предыдущем примере, вы начинаете с ввода элементов "Найти" и "Заменить" в отдельных столбцах (D и E соответственно), а затем вводите эту формулу в B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
В переводе с языка Excel на человеческий язык вот что делает формула:
Поиск значения A2 (lookup_value) в D2:D4 (lookup_array) и возврат совпадения из E2:E4 (return_array). Если значение не найдено, извлекаем исходное значение из A2.
Дважды щелкните по ручке заливки, чтобы скопировать формулу в нижележащие ячейки, и результат не заставит вас ждать:
Поскольку функция XLOOKUP доступна только в Excel 365, приведенная выше формула не будет работать в более ранних версиях. Однако вы можете легко имитировать это поведение с помощью комбинации IFERROR или IFNA и VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Примечание. В отличие от SUBSTITUTE, функции XLOOKUP и VLOOKUP являются не чувствительный к регистру означает, что они ищут значения поиска, игнорируя регистр букв. Например, наша формула заменяет оба слова FR и fr с Франция .
Преимущества : необычное использование обычных функций; работает во всех версиях Excel
Недостатки : работает на уровне ячейки, не может заменить часть содержимого ячейки
Множественная замена с использованием рекурсивной функции LAMBDA
Для подписчиков Microsoft 365 Excel предоставляет специальную функцию, которая позволяет создавать пользовательские функции с помощью традиционного языка формул. Да, я говорю о LAMBDA. Прелесть этого метода в том, что он может преобразовать очень длинную и сложную формулу в очень компактную и простую. Более того, он позволяет создавать собственные функции, которых не существует в Excel, что было раньше.возможно только с помощью VBA.
Подробную информацию о создании и использовании пользовательских функций LAMBDA можно найти в этом учебнике: Как писать функции LAMBDA в Excel. Здесь мы рассмотрим несколько практических примеров.
Преимущества : в результате получилась элегантная и удивительно простая в использовании функция, независимо от количества пар замены
Недостатки : доступны только в Excel 365; зависят от рабочей книги и не могут быть повторно использованы в разных рабочих книгах
Пример 1. Поиск и замена нескольких слов/строк одновременно
Для замены нескольких слов или текста за один раз мы создали пользовательскую функцию LAMBDA, названную MultiReplace , который может принимать одну из этих форм:
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
Или
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
Обе функции являются рекурсивными и вызывают сами себя. Разница лишь в том, как устанавливается точка выхода.
В первой формуле функция IF проверяет, является ли значение старый список не пустой (старый""). Если TRUE, то MultiReplace вызывается функция. Если FALSE, то функция возвращает текст его текущую форму и выходит из него.
Вторая формула использует обратную логику: если старый пустой (old=""), тогда возвращаем текст и выйти; в противном случае вызовите MultiReplace .
Самая сложная часть выполнена! Осталось только дать имя параметру MultiReplace функцию в Менеджере имен, как показано на скриншоте ниже. Подробное руководство см. в разделе Как назвать функцию LAMBDA.
Как только функция получает имя, вы можете использовать ее так же, как и любую другую встроенную функцию.
Какой бы из двух вариантов формулы вы ни выбрали, с точки зрения конечного пользователя синтаксис прост:
MultiReplace(text, old, new)Где:
- Текст - исходные данные
- Старый - значения для поиска
- Новый - значения, на которые нужно заменить
Развивая предыдущий пример, давайте заменим не только аббревиатуру страны, но и аббревиатуру штата. Для этого введите аббревиатуру ( старый значения) в столбце D, начиная с D2, и полные имена ( новый значения) в столбце E, начиная с E2.
В разделе B2 введите функцию MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Нажмите Enter и наслаждайтесь результатами :)
Как работает эта формула
Ключом к пониманию формулы является понимание рекурсии. Это может показаться сложным, но принцип довольно прост. С каждой итерацией рекурсивная функция решает один маленький случай более крупной проблемы. В нашем случае MultiReplace функция перебирает старые и новые значения и в каждом цикле выполняет одну замену:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Как и во вложенных функциях SUBSTITUTE, результат предыдущего SUBSTITUTE становится значением текст параметр для следующего SUBSTITUTE. Другими словами, при каждом последующем вызове функции MultiReplace Функция SUBSTITUTE обрабатывает не исходную текстовую строку, а результат предыдущего вызова.
Для обработки всех элементов на старый список, мы начинаем с самой верхней ячейки и используем функцию OFFSET для перемещения на 1 строку вниз при каждом взаимодействии:
OFFSET(old, 1, 0)
То же самое делается для новый список:
OFFSET(new, 1, 0)
Решающим моментом является предоставление место выхода чтобы предотвратить бесконечное продолжение рекурсивных вызовов. Это делается с помощью функции IF - если в поле старый ячейка пуста, функция возвращает текст его нынешнюю форму и выходы:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(...)))
или
=LAMBDA(text, old, new, IF(old"", MultiReplace(...), text))
Пример 2. Замена нескольких символов в Excel
В принципе MultiReplace функция, рассмотренная в предыдущем примере, может обрабатывать и отдельные символы, при условии, что каждый старый и новый символ вводится в отдельную ячейку, точно так же, как сокращенное и полное имена на скриншотах выше.
Если вы предпочитаете вводить старые символы в одну ячейку, а новые - в другую, или вводить их непосредственно в формулу, то вы можете создать еще одну пользовательскую функцию с именем ReplaceChars , используя одну из этих формул:
=LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text))
Или
=LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
Не забудьте дать имя вашей новой функции Lambda в Менеджере имен, как обычно:
И ваша новая пользовательская функция готова к использованию:
ReplaceChars(text, old_chars, new_chars)Где:
- Текст - оригинальные струны
- Старый - символы для поиска
- Новый - символы, на которые нужно заменить
Чтобы испытать его на практике, давайте сделаем то, что часто выполняется для импортированных данных - заменим умные кавычки и умные апострофы на прямые кавычки и прямые апострофы.
Сначала мы вводим умные кавычки и умный апостроф в D2, прямые кавычки и прямой апостроф в E2, разделяя символы пробелами для лучшей читабельности. (Поскольку мы используем один и тот же разделитель в обеих ячейках, это никак не повлияет на результат - Excel просто заменит пробел пробелом).
После этого мы вводим эту формулу в B2:
=ReplaceChars(A2:A4, D2, E2)
И получить именно те результаты, которые мы искали:
Можно также ввести символы непосредственно в формулу. В нашем случае просто не забудьте "продублировать" прямые кавычки следующим образом:
=ReplaceChars(A2:A4, "" " '", "" "" "" '")
Как работает эта формула
Сайт ReplaceChars функция циклически перебирает старые_значки и новые_заголовки строк и производит замену по одному символу за раз, начиная с первого слева. Эта часть выполняется функцией SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
С каждой итерацией функция RIGHT отделяет один символ слева от обоих символов старые_значки и новые_заголовки строк, чтобы LEFT мог получить следующую пару символов для подстановки:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Перед каждым рекурсивным вызовом функция IF оценивает значение старые_значки строка. Если она не пуста, функция вызывает саму себя. Как только последний символ заменен, итерационный процесс завершается, формула возвращает текст его нынешнюю форму и выходы.
Примечание. Поскольку функция SUBSTITUTE, используемая в наших основных формулах, является с учетом регистра , обе Lambdas ( MultiReplace и ReplaceChars ) рассматривают прописные и строчные буквы как разные символы.
Массовый поиск и замена с помощью UDF
Если функция LAMBDA недоступна в вашем Excel, вы можете написать пользовательскую функцию для мультизамены традиционным способом с помощью VBA.
Чтобы отличить UDF от определяемого LAMBDA MultiReplace функцию, мы назовем ее по-другому, скажем MassReplace Код функции выглядит следующим образом:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'массив для хранения результатов Dim arSearchReplace(), sTmp As String 'массив для хранения пар find/replace, временная строка Dim iFindCurRow, cntFindRows As Long 'индекс текущей строки массива SearchReplace, количество строк Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'индекс текущей строки в исходном диапазоне, индекс текущего столбца в исходном диапазоне, количество строк, количество столбцов cntInputRows = InputRng.Rows.Count cntInputCols = InputRng.Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'подготовка массива пар поиска/замены ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Поиск и замена в исходном диапазоне For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Замена всех пар find/replace в каждой ячейкеFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End FunctionКак и функции, определяемые LAMBDA, UDF являются в масштабах всей книги Это означает, что MassReplace функция будет работать только в той рабочей книге, в которую вы вставили код. Если вы не уверены, как правильно это сделать, следуйте шагам, описанным в статье Как вставить код VBA в Excel.
Как только код будет добавлен в рабочую книгу, функция появится в интеллисенсе формул - только имя функции, а не аргументы! Хотя, я считаю, что запомнить синтаксис не составит труда:
MassReplace(input_range, find_range, replace_range)Где:
- Входной_диапазон - диапазон источника, в котором нужно заменить значения.
- Найти_диапазон - символы, строки или слова для поиска.
- Заменить_диапазон - символы, строки или слова для замены.
В Excel 365, благодаря поддержке динамических массивов, это работает как обычная формула, которую нужно ввести только в верхнюю ячейку (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
В додинамическом Excel это работает как старая формула массива CSE: вы выделяете весь исходный диапазон (B2:B10), вводите формулу и одновременно нажимаете клавиши Ctrl + Shift + Enter для ее завершения.
Преимущества : достойная альтернатива пользовательской функции LAMBDA в Excel 2019, Excel 2016 и более ранних версиях
Недостатки : рабочая книга должна быть сохранена как файл .xlsm с поддержкой макросов
Массовая замена в Excel с помощью макроса VBA
Если вы любите автоматизировать общие задачи с помощью макросов, то вы можете использовать следующий код VBA для поиска и замены нескольких значений в диапазоне.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Source data:" , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox( "Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing ThenApplication.ScreenUpdating = False For Each Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubЧтобы сразу воспользоваться макросом, вы можете загрузить наш образец рабочей книги, содержащий код. Или вы можете вставить код в свою собственную рабочую книгу.
Как использовать макрос
Перед запуском макроса введите старые и новые значения в два соседних столбца, как показано на рисунке ниже (C2:D4).
Затем выберите исходные данные, нажмите Alt + F8, выберите команду BulkReplace макрос и нажмите кнопку Запускайте .
Как ярость источника уже выбрана, просто проверьте ссылку и нажмите OK:
После этого выберите заменить диапазон , и нажмите OK:
Готово!
Преимущества : настройка один раз, повторное использование в любое время
Недостатки : макрос необходимо запускать при каждом изменении данных
Множественный поиск и замена в Excel с помощью инструмента Substring
В самом первом примере я упомянул, что вложенный SUBSTITUTE - это самый простой способ замены нескольких значений в Excel. Признаю, что я ошибался. Наш Ultimate Suite делает все еще проще!
Чтобы выполнить массовую замену в своем рабочем листе, перейдите в раздел Ablebits Data вкладку и нажмите кнопку Инструменты подстроки > Заменить подстроки .
Сайт Заменить подстроки появится диалоговое окно, в котором вам будет предложено определить Источник диапазон и Подстроки диапазон.
Выбрав два диапазона, нажмите кнопку Заменить и найдите результаты в новом столбце, вставленном справа от исходных данных. Да, это так просто!
Совет. Перед тем как нажать Заменить Но есть одна важная вещь, которую вы должны учитывать - это С учетом регистра Обязательно выберите этот флажок, если вы хотите обрабатывать заглавные и строчные буквы как разные символы. В данном примере мы отметили эту опцию, поскольку хотим заменить только строки с заглавными буквами и оставить нетронутыми подстроки типа "fr", "uk" или "ak" в других словах.
Если вам интересно узнать, какие еще объемные операции можно выполнять над строками, ознакомьтесь с другими инструментами Substring Tools, входящими в наш Ultimate Suite. А еще лучше - загрузите ознакомительную версию ниже и попробуйте!
Вот как найти и заменить сразу несколько слов и символов в Excel. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!
Доступные загрузки
Множественный поиск и замена в Excel (файл .xlsm)
Ultimate Suite 14-дневная полнофункциональная версия (файл .exe)