Как в Excel массово найти и заменить несколько значений на другие
Как в Excel массово найти и заменить несколько значений на другие
Процедура поиска и замены данных — одна из самых востребованных в Excel. Базовая процедура позволяет заменить за один заход только одно значение, но зато множеством способов. Рассмотрим, как эффективно работать с ней.
Горячие клавиши
Сочетания клавиш ниже заметно ускорят работу с инструментом:
- Для запуска диалогового окна поиска — Ctrl + F
- Для запуска окна поиска и замены — Ctrl + H
- Для выделения всех найденных ячеек (после нажатия кнопки «найти все» — Ctrl + A
- Для очистки всех найденных ячеек — Ctrl + Delete
- Для ввода одних и тех же данных во все найденные ячейки — Ввод текста, Ctrl + Enter
Смотрите gif-примеры: здесь мы производим поиск ячеек с дальнейшим их редактированием. В отличие от замены, редактирование найденных ячеек позволяет быстро менять их содержимое целиком.
Процедура «Найти и заменить» не работает
Я сам когда-то неоднократно впадал в ступор в подобных ситуациях. Уверен и видишь своими глазами, что искомый паттерн в данных есть, но Excel при выполнении процедуры поиска сообщает:
Не удалось ничего найти по вашему запросу
Мы не нашли ничего, что нужно было заменить
Так вот, совет нажать кнопку «Параметры» в обоих этих сообщениях действительно полезен. Там наверняка активен чекбокс «Учитывать регистр» или «Ячейка целиком», которые мешают Excel найти искомое. Excel сохраняет конфигурацию последнего поиска.
Статус опций «Учитывать регистр» и «Ячейка целиком» виден после нажатия кнопки «Параметры».
Подстановочные знаки, или как найти «звездочку»
Сухая официальная справка по Excel сообщает, что можно использовать подстановочные символы «*» и «?». Что они означают несколько символов, включая их отсутствие, и один любой символ. И что их можно использовать для соответствующих процедур поиска.
Чего не говорит справка — это того, что в комбинации с опцией «ячейка целиком» эти символы позволяют, не прибегая к помощи расширенного фильтра и процедуры поиска группы ячеек:
- Находить ячейки, заканчивающиеся на определенный символ, слово или текст
- Аналогично, находить ячейки, начинающиеся с определенного символа, слова или текста
- Находить непустые ячейки
На примере ниже мы находим все двузначные числа, затем числа, заканчивающиеся и начинающиеся на 7, и, наконец, все непустые ячейки. Напомню, выделить все результаты поиска помогает горячее сочетание клавиш Ctrl + A
Так а как найти звездочку?
Действительно, забыл. Чтобы найти «звездочку», нужно в окошке поиска ставить перед ней знак
(тильда), находится обычно под клавишей Esc . Это позволяет экранировать «звездочку», как и вопросительный знак, и не воспринимать их как служебные символы.
Замена нескольких значений на несколько
Массовая замена в Excel — довольно частая потребность. Очень часто нужно массово и при этом быстро заменить несколько символов, слов и т.д. на другие. При этом на текущий момент простого инструмента в стандартном функционале Excel нет.
Тем не менее, если очень нужно, любую задачу можно решить. В зависимости от того, на что вы хотите заменить, могут помочь комбинации функций, регулярные выражения, а в самых сложных случаях — надстройка !SEMTools.
Эта задача более сложная, чем замена на одно значение. Как ни странно, функция «ЗАМЕНИТЬ» здесь не подходит — она требует явного указания позиции заменяемого текста. Зато может помочь функция «ПОДСТАВИТЬ«.
Массовая замена с помощью функции «ПОДСТАВИТЬ»
Используя несколько условий в сложной формуле, можно производить одновременную замену нескольких значений. Excel позволяет использовать до 64 уровней вложенности — свобода действий высока. Например, вот так можно перевести кириллицу в латиницу:
При этом, если использовать в качестве подставляемого фрагмента пустоту, можно использовать функцию для удаления нескольких символов — смотрите как удалить цифры из ячейки этим способом.
Но у решения есть и свои недостатки:
- Функция ПОДСТАВИТЬ регистрозависимая, что заставляет при замене одного символа использовать два его варианта — в верхнем и нижнем регистрах. Хотя, в некоторых случаях, как пример на картинке выше, это и преимущество.
- максимум 64 замены — хоть и много, но все же ограничение.
- формально процедура замены таким способом будет происходить массово и моментально, однако, длительность написания таких формул сводит на нет это преимущество. За исключением случаев, когда они будут использоваться многократно.
Файл-шаблон с формулой множественной замены
Вместо явного прописывания заменяемых паттернов в формуле, можно использовать внутри формулы ссылки на ячейки, значения в которых можно прописывать на свое усмотрение. Это сократит время, т.к. не требует редактирования сложной формулы.
Файл доступен по ссылке, но можно и не скачивать его, а просто скопировать текст формулы ниже и вставить ее в любую ячейку, кроме диапазона A1:B64. Формула заменяет в ячейке C1 значения в столбце A стоящими напротив в столбце B.
Формула в файле-шаблоне для множественной замены на примере транслитерации
А вот и она сама (тройной клик по любой части текста = выделить всю формулу). Обращается к ячейке D1, делая 64 замены по правилам, указанным в ячейках A1-B64. При этом в столбцах можно удалять значения — это не нарушит ее работу.
Заменить несколько значений на одно
С помощью функции «ПОДСТАВИТЬ«
При замене нескольких значений на одно и то же механика работы формул на основе нескольких уровней вложенности не будет отличаться от замены нескольких на несколько. Просто третий аргумент (на что заменить) на всех уровнях вложенности будет один и тот же. Кстати, если оставить его пустым (кавычки без символов между ними), то это позволит удалить определенные символы. Пример — удалить цифры из ячейки путем замены на пустоту:
С помощью регулярных выражений
Важно: регулярные выражения не поставляются в Excel «из коробки», но формулы ниже доступны бесплатно, если установить надстройку !SEMTools
Регулярные выражения (RegEx, регулярки) — наиболее удобное решение, когда нужно заменить несколько символов на один. Все эти несколько символов обычным способом безо всяких разделителей нужно перечислить внутри квадратных скобок. Примеры формул:
Первая заменяет на символ «#» все цифры, вторая — все английские буквы, а третья — все кириллические символы в верхнем и нижнем регистре. Четвертая заменяет любые пробелы, в т.ч. табуляцию и переносы строк, на нижнее подчеркивание.
Если же нужно заменять не символы, а несколько значений, состоящих в свою очередь из нескольких букв, цифр или знаков — синтаксис предполагает уже использование круглых скобок и вертикальной черты «|» в качестве разделителя.
Массовая замена в !SEMTools
Надстройка для Excel !SEMTools позволяет в пару кликов производить замены на всех уровнях:
- символов и их сочетаний
- паттернов регулярных выражений
- слов!
- целых ячеек (В некоторой степени аналог ВПР)
Меню инструментов массовой замены в !SEMTools
При этом процедуры изменяют исходный диапазон, что экономит время. Все что нужно — предварительно выделить его, определиться с задачей, вызвать нужную процедуру и выделить 2 столбца сопоставления заменяемых и замещающих значений (предполагается, что если вы знаете, что на что менять, то и такие списки есть).
Пример: замена символов по вхождению
Аналог обычной процедуры замены без учета регистра заменяемых символов, по вхождению. С одним отличием — здесь замена массовая и можно выбрать сколько угодно строк с парами заменяемое-заменяющее значение.
Ниже пример с единичными символами, но паттерны могут быть какими угодно в зависимости от вашей задачи.
Пример: замена списка слов на другой список слов
На этом примере — замена списка слов на другой список, в данном случае на одно и то же слово. Здесь решается задача типизации разнородных фраз путем замены слов, содержащих латиницу и цифры, на одно слово. Далее после этой операции можно будет посчитать уникальные значения в столбце, чтобы выявить наиболее популярные сочетания.
С версии !SEMTools 9.18.18 появилась опция — при замене списка слов не учитывать пунктуацию в исходных предложениях, а регистр слов теперь сохраняется:
Инструменты находятся в группе макросов «ИЗМЕНИТЬ» в отдельном меню и для удобства продублированы в меню «Изменить символы«, «Изменить слова» и «Изменить ячейки«.
Примеры функции ПОДСТАВИТЬ для замены текста в ячейке Excel
Функция ПОДСТАВИТЬ в Excel выполняет динамическую замену определенной части строки на указанное новое значение и возвращает новую строку, содержащую замененную часть текста. Благодаря этой функции можно подставлять значения из другой ячейки. Рассмотрим возможности функции на конкретных примерах в Excel.
Функция ПОДСТАВИТЬ при условии подставляет значение
Пример 1. В результате расчетов, произведенных в некотором приложении, были получены некоторые значения, записанные в таблицу Excel. Некоторые величины рассчитать не удалось, и вместо числового представления была сгенерирована ошибка “NaN”. Необходимо заменить все значения “NaN” на число 0 в соответствующих строках.
Для замены и подстановки используем рассматриваемую формулу в качестве массива. Вначале выделим диапазон ячеек C2:C9, затем введем формулу через комбинацию Ctrl+Shift+Enter:
Функция ЧЗНАЧ выполняет преобразование полученных текстовых строк к числовым значениям. Описание аргументов функции ПОДСТАВИТЬ:
- B2:B9 – диапазон ячеек, в которых требуется выполнить замену части строки;
- “NaN” – фрагмент текста, который будет заменен;
- 0 – фрагмент, который будет вставлен на место заменяемого фрагмента.
Для подстановки значений во всех ячейках необходимо нажать Ctrl+Shift+Enter, чтобы функция была выполнена в массиве. Результат вычислений:
Таким же образом функция подставляет значения и другой таблицы при определенном условии.
Автозамена значения в текстовых ячейках с помощью функции ПОДСТАВИТЬ
Пример 2. Провайдер домашнего интернета хранит данные о своих абонентах в таблице Excel. Предположим, улица Садовая была переименована в Никольскую. Необходимо быстро произвести замену названия улицы в строке данных об адресе проживания каждого клиента.
Для выполнения заданного условия используем формулу:
Примечание: в данном примере ПОДСТАВИТЬ также используется в массиве Ctrl+Shift+Enter.
В результате получим:
Формула с макросом регулярного выражения и функция ПОДСТАВИТЬ
Пример 3. При составлении таблицы из предыдущего примера была допущена ошибка: все номера домов на улице Никольская должны быть записаны как «№№-Н», где №№ — номер дома. Как быстро исправить ошибку?
В данном случае для поиска числовых значений номера дома воспользоваться встроенными функциями не удастся. Рациональнее всего использовать регулярные выражения. По умолчанию, в Excel отсутствует функция для работы с регулярными выражениями, однако ее можно добавить следующим способом:
- Открыть редактор макросов (Ctrl+F11).
- Вставить исходный код функции (приведен ниже).
- Выполнить данный макрос и закрыть редактор кода.
Для того, чтобы воспользоваться этой формулой, в любой ячейке необходимо ввести следующее:
Регулярные выражения могут быть различными. Например, для выделения любого символа из текстовой строки в качестве второго аргумента необходимо передать значение «w», а цифры – «d».
Для решения задачи данного Примера 3 используем следующую запись:
- Функция ЕСЛИОШИБКА используется для возврата исходной строки текста (B2), поскольку результатом выполнения функции RegExpExtract(B2;»Никольская») будет код ошибки #ЗНАЧ!, если ей не удалось найти хотя бы одно вхождение подстроки «Никольская» в строке B2.
- Если результат выполнения сравнения значений RegExpExtract(B2;»Никольская»)=»Никольская» является ИСТИНА, будет выполнена функция ПОДСТАВИТЬ(B2;RegExpExtract(B2;»d+»);RegExpExtract(B2;»d+»)&»-Н»), где:
- a. B2 – исходный текст, содержащий полный адрес;
- b. RegExpExtract(B2;»d+») – формула, выделяющая номер дома из строки с полным адресом;
- c. RegExpExtract(B2;»d+»)&»-Н» – новый номер, содержащий исходное значение и символы «-Н».
Данный способ может показаться громоздким, однако он весьма удобен для работы с таблицами, содержащими большое количество данных.
Excel works!
Мы уже разбирали как быстро найти и заменить данные в Excel по группе ячеек — в столбце или массиве данных. Но как это сделать в одной ячейке и желательно формулой? К примеру? у вас есть список машин, и каждый день вам присылают файл с новым списком машин. Нужно проверить есть ли такие номера в вашем основном списке. Но как обычно в номера машин добавляют пробелы или слеши, а самый худший вариант букву О вместо нуля Если вы регулярно выполняете одну и ту же операцию, то вручную нажимать Ctrl + H каждый раз неудобно, плюс придется запоминать, какие именно символы нужно заменять. Функции ПОДСТАВИТЬ и ЗАМЕНИТЬ в Excel — это отличный выход из ситуации.
Эти функции немного обделены вниманием, не знаю почему, но уверен они супер полезны для обработки и сведения больших массивов данных, ведь ими можно легко настроить автозамену. Ниже расскажу поподробнее о каждом и покажу, чем все же они различаются. Разбирать будем на примере.
Есть номер А 777 АА 01 из него надо формулой сделать А777АА01 формулой.
Функция ПОДСТАВИТЬ в Excel
Как работает формула показано на первой картинке. Состав разберем ниже:
- Текст — адрес ячейки или сам текст, в котором надо сделать замену символов, в примере А 777 АА 01
- Стар_текст — что нам нужно заменить? Пробел.
- Нов_текст — на что нужно заменить? Меняем на ничего, т.е. на пусто в формуле, это будет «»
- Номер_вхождения — заполнять необязательно, но при этом реквизит очень полезный, в официальной справке говорится о «вхождении символа», но объясню простым языком. Здесь вы можете указать номер символа в строке (пробела в нашем случае). Т.е. если нужно заменить только пробел между 777 и АА (это второй по счету пробел в номере), формула будет выглядеть как
И в итоге вы получите А 777АА 01
Но, как правило, я использую вот такие конструкции, чтобы убрать все ненужные символы, которые уже понаставили при заполнении.
В данном случае мы убираем пробел, точку и слэш в номере «А 777 АА/01.»
Функция ЗАМЕНИТЬ и ЗАМЕНИТЬБ в Excel
Функция ЗАМЕНИТЬ делает почти все тоже самое, что и подставить, но делает это с определенного символа. Аргументы такие:
Пример. Необходимо первую букву номера машины заменить на другую. Из А777АА01 сделать Б777АА01
Сначала описание аргументов:
- Стар_текст — как и в ПОДСТАВИТЬ, текст, в котором нужно заменить т.е. А777АА01
- Начальная_позиция — с какого символа производить замену, с первого.
- Число_знаков сколько знаков меняем — один
- Нов_текст — и на что меняем? На букву Б
Очень похоже на ПСТР , честно говоря 🙂
ЗАМЕНИТЬБ — это маленькая загадка Excel, даже в иностранных интернетах мало информации о ней. Если вкратце, то просто ЗАМЕНИТЬ меняет любой символ (даже если он размером 2 байта), ЗАМЕНИТЬБ меняет только однобайтные символы (аргумент число_знаков меняется на). Практического применения я для себя не нашел 🙂 Если кто-нибудь подскажет, буду благодарен!
UPD. Как мне подсказали, к двухбайтовым символам относятся большинство языков с ироглифами!
ПОДСТАВИТЬ и ЗАМЕНИТЬ в Excel. Что еще?
Обе функции учитывают регистр! Т.е. если вы указали большую букву А, маленькая буква заменяться не будет!
Функция ПОДСТАВИТЬ доступна только в версиях 2007 и выше, будьте аккуратны, если конечный пользователь будет использовать более ранние версии!
Замена по списку
Команда поможет справиться с задачей по массовой замене слов. Предположим у нас имеется список остатков товара на складах, который обновляется и выгружается в Excel ежедневно:
Список может быть на несколько тысяч строк, естественно. Однако в этом списке вместо наименования товара записан его артикул. Однако для дальнейшей работы с остатками необходим не артикул, а то наименование, которое имеется в остальных документах и в базе товара, т.к. этот список в последствии должен выгружаться на сайт для актуализации остатков товара в интернет-магазине, которое будет отражено клиентам. Чтобы получился список следующего вида:
Для этого выгружается отдельный список соответствия товара артикулу:
В данном случае стандартная замена данных(Ctrl+H) больше похожа на испытание. Это сколько раз надо сделать замену, чтобы заменить каждый артикул? Наименований товаров могут быть сотни, а то и тысячи. Можно также прибегнуть к различным хитростям вроде вытягивания последнего слова(чтобы получить артикул), но ведь может быть и так, что артикул расположен где-то внутри ячейки, а не последним словом(например, » Аккумулятор для ноутбуков 25011445, БУ » или еще хуже — несколько разных артикулов в одной ячейке: » Аккумулятор для ноутбуков 25011445, 25011446, 25011447, 25011448 «).
Вот здесь в самый раз пригодится команда Замена по списку. Она на основании списка соответствия может заменить все найденные значения артикулов на наименования за пару минут и без особых усилий. При этом замену можно сделать не только в отдельных ячейках, но и на всем листе, во всей книге или во всех открытых книгах.
Список соответствий находится в ячейках( [Замена.xls]Соответствия!A2:B8 )- диапазон из двух столбцов, содержащий значения для поиска и замены. Не должен содержать заголовков, иначе текст заголовков будет воспринят как значения для поиска и замены.
- Искомые значения в столбце: указывается номер столбца в списке соответствий, в котором расположены значения для замены. На примере артикулов и наименований: нам необходимо заменить артикул на наименование. Следовательно в поле необходимо указать число 1, т.к. именно в первом столбце перечень артикулов для замены на наименования товара. А значения для замены будут взяты из второго столбца. Если же необходимо произвести обратную процедуру — заменить наименования на артикулы — то в поле необходимо указать число 2 и в этом случае наименования будут заменены артикулами.
Произвести замену:
в этом блоке можно выбрать где конкретно производить замену
- в указанном диапазоне — указывается любой диапазон на любой листе любой открытой книги. В этом случае замена значений будет произведена исключительно в ячейках указанного диапазона. Все остальные ячейки и листы будут не тронуты. Указывать необходимо более одной ячейки, иначе замена будет произведена по всему листу.
- во всех ячейках листа — в этом случае необходимо выбрать из списка лист, на котором производить замену. По умолчанию в списке отображается активный лист активной книги
- на всех листах книги — выбирается книга из списка всех открытых книг. После выполнения команды замена будет произведена во всех ячейках всех листов выбранной книги
- во всех листах активной книги, в диапазоне — указывается диапазон ячеек. Но в этом случае замена будет произведена во всех ячейках указанного диапазона во всех листах открытой книги. Для чего это нужно? Допустим, есть много листов в книге с различными шаблонными таблицами. И в определенном диапазоне этой каждой таблицы надо заменить данные по списку. При этом в других ячейках таблиц так же могут содержаться данные, но заменять их не требуется.
- на всех листах всех открытых книг — замена будет произведена во всех ячейках всех листов всех открытых книг.
Производить замену по части ячейки — если установлено, то каждое из искомых значений списка будет просматриваться по части ячейки. Например, если в ячейке текст » Аккумулятор для ноутбуков 25011445 «, то в данном случае артикул является частью другого текста ячейки. И если галочку не установить — то значение артикула » 25011445 » не будет заменено, т.к. к сравнению будет принят весь текст ячейки — » Аккумулятор для ноутбуков 25011445 «.
Для чего это нужно: логично, что в большинстве случаев замену необходимо производить именно по части текста ячейки, но бывают случаи, когда необходимо заменять именно весь текст. Например, если в ячейке содержится только наименование товара(» Аккумулятор для ноутбуков Samsung R590-JS03 «) и его надо заменить на конкретный артикул. Если сделать по части ячейки, то в этом случае может получиться так, что отдельно будет заменена только часть текста » Аккумулятор для ноутбуков «, а остальное уже не попадет под замену. Такая замена будет некорректна с точки зрения требуемого результата.
Учитывать регистр букв — если установлен, то строчные и заглавные буквы в словах будут различаться. Иногда требуется, чтобы заменить, скажем, только аббревиатуры, но не трогать похожие совпадения внутри текста, написанные строчными символами.
Легко догадаться, что команду можно использовать в любой ситуации как упрощенный словарь-переводчик. В одном столбце английские слова, в другом русские; в одном число — в другом его пропись; в одном код цвета — в другом его наименование; и т.д.
Примечание: Замена производится только в не защищенных ячейках. Если какие-либо листы защищены и произвести замену в них невозможно, то программа пропустит такие листы, но после работы будет показано сообщение с перечислением имен листов, в которых замену произвести не удалось. Если листов более 15-ти, то имена будут выведены только для первых 15-ти листов.