Excel: пошук і заміна декількох значень одночасно

  • Поділитися Цим
Michael Brown

У цьому уроці ми розглянемо кілька способів пошуку і заміни декількох слів, рядків або окремих символів, щоб ви могли вибрати той, який найкраще відповідає вашим потребам.

Як люди зазвичай здійснюють пошук в Excel? Здебільшого за допомогою функції Знайти і Замінити, яка чудово працює для одиночних значень. Але що робити, якщо вам потрібно замінити десятки або навіть сотні елементів? Напевно, нікому не захочеться робити всі ці заміни вручну один за одним, а потім робити все це знову і знову, коли дані змінюються. На щастя, є кілька більш ефективних способів виконати масову заміну в Excel, а самеКожну з них ми збираємося детально дослідити.

    Пошук і заміна декількох значень за допомогою вкладеної підстановки SUBSTITUTE

    Найпростіший спосіб знайти і замінити кілька записів в Excel - використовувати функцію ПІДСТАНОВКА.

    Логіка формули дуже проста: ви пишете кілька окремих функцій для заміни старого значення на нове. А потім ви вкладаєте ці функції одна в іншу, так що кожна наступна підстановка використовує вихід попередньої підстановки для пошуку наступного значення.

    ПІДСТАВИТИ(ПІДСТАВИТИ(ПІДСТАВИТИ( текст , old_text1 , new_text1 ), old_text2 , новий_текст2 ), old_text3 , new_text3 )

    Припустимо, що в переліку місць в A2:A10 ви хочете замінити скорочені назви країн (такі як FR , ВЕЛИКОБРИТАНІЯ і США ) із зазначенням прізвищ, імен та по батькові.

    Для цього введіть старі значення в D2:D4 і нові значення в E2:E4, як показано на скріншоті нижче. Потім введіть наведену нижче формулу в B2 і натисніть Enter:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)

    ...і всі заміни будуть зроблені одразу:

    Звертаємо Вашу увагу, що вищевказаний підхід працює лише в Excel 365 що підтримує динамічні масиви.

    У додинамічних версіях Excel 2019, Excel 2016 і більш ранніх формулу потрібно записувати для самої верхньої комірки (B2), а потім копіювати в нижчі комірки:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4))

    Зверніть увагу, що в цьому випадку ми фіксуємо значення підстановки абсолютними посиланнями на комірки, щоб вони не змістилися при копіюванні формули вниз.

    Примітка. Функція SUBSTITUTE - це з урахуванням особливостей конкретного випадку тобто слід ввести старі значення ( старий_текст ) у тому ж регістрі літер, в якому вони наведені у вихідних даних.

    При всій своїй простоті цей метод має суттєвий недолік - коли потрібно замінити десятки елементів, вкладеними функціями стає досить складно керувати.

    Переваги простота реалізації; підтримка у всіх версіях Excel

    Недоліки найкраще використовувати для обмеженої кількості значень пошуку/заміни

    Пошук і заміна декількох записів за допомогою XLOOKUP

    У ситуації, коли ви шукаєте заміну весь вміст комірки а не його частину, в нагоді стає функція XLOOKUP.

    Припустимо, у вас є список країн у колонці А, і ви хочете замінити всі абревіатури на відповідні повні назви. Як і в попередньому прикладі, ви починаєте з введення елементів "Знайти" і "Замінити" в окремих колонках (D і E відповідно), а потім вводите цю формулу в комірку B2:

    =XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)

    У перекладі з мови Excel на людську мову, ось що робить формула:

    Знайти значення A2 (шукане_значення) в D2:D4 (масив_пошуку) і повернути збіг з E2:E4 (масив_повернення). Якщо збіг не знайдено, витягнути вихідне значення з A2.

    Двічі клацніть маркер заповнення, щоб скопіювати формулу в наступні комірки, і результат не змусить вас чекати:

    Оскільки функція XLOOKUP доступна тільки в Excel 365, наведена вище формула не буде працювати в більш ранніх версіях. Однак ви можете легко імітувати цю поведінку за допомогою комбінації IFERROR або IFNA і VLOOKUP:

    =IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)

    Примітка: На відміну від SUBSTITUTE, функції XLOOKUP і VLOOKUP є не чутливий до регістру тобто вони шукають шукані значення без урахування регістру букв. Наприклад, наша формула замінить обидва варіанти FR і fr з Франція .

    Переваги незвичне використання звичних функцій; працює у всіх версіях Excel

    Недоліки працює на рівні комірки, не може замінити частину вмісту комірки

    Множинна заміна з використанням рекурсивної ЛАМБДА-функції

    Для передплатників Microsoft 365 в Excel передбачена спеціальна функція, яка дозволяє створювати користувацькі функції за допомогою традиційної мови формул. Так, я говорю про LAMBDA. Принадність цього методу в тому, що він може перетворити дуже довгу і складну формулу в дуже компактну і просту. Більш того, він дозволяє створювати власні функції, яких не існує в Excel, чого раніше не буломожливо тільки за допомогою VBA.

    Детальну інформацію про створення і використання користувацьких ЛАМБДА-функцій можна знайти в цьому уроці: Як написати ЛАМБДА-функції в 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))))

    Обидві є рекурсивними функціями, які викликають самі себе. Різниця лише в тому, як встановлюється точка виходу.

    У першій формулі функція ЯКЩО перевіряє, чи виконується умова старий список не порожній (старий""). Якщо 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 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 за допомогою однієї з цих формул:

    =ЛАМБДА(текст, старі_символи, нові_символи, IF(старі_символи"", ReplaceChars(SUBSTITUTE(текст, LEFT(старі_символи), LEFT(нові_символи)), RIGHT(старі_символи, LEN(старі_символи)-1), RIGHT(нові_символи, LEN(нові_символи)-1)), текст))

    Або

    =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 функція виконує цикли через old_chars і new_chars і робить по одній заміні, починаючи з першого символу зліва. Ця частина виконується функцією SUBSTITUTE:

    SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))

    На кожній ітерації функція RIGHT викреслює по одному символу зліва від обох old_chars і new_chars щоб 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 обчислює old_chars Якщо він не порожній, функція викликає сама себе. Як тільки останній символ був замінений, процес ітерації завершується, повертається формула текст його нинішній вигляд і виходи.

    Зауваження. Оскільки функція ПІДСТАНОВКА, що використовується в наших основних формулах, має вигляд з урахуванням особливостей конкретного випадку обидві Ламби ( MultiReplace і ReplaceChars ) розглядають великі та малі літери як різні символи.

    Масовий пошук та заміна на УДС

    Якщо функція 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 'масив для зберігання пар пошук/заміна, тимчасовий рядок 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 ' 'Заміна усіх пар пошуку/заміни у кожній клітинці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.

    Після додавання коду в робочу книгу, функція з'явиться у формулі intellisense - тільки ім'я функції, але не аргументи! Хоча, я думаю, що запам'ятати синтаксис не складе труднощів:

    MassReplace(діапазон_введення, діапазон_знаходження, діапазон_заміни)

    Де:

    • Діапазон_введення - вихідний діапазон, в якому потрібно замінити значення.
    • Знайти_діапазон - символи, рядки або слова для пошуку.
    • Замінити_діапазон - символи, рядки або слова, на які потрібно замінити.

    В Excel 365 завдяки підтримці динамічних масивів це працює як звичайна формула, яку потрібно лише ввести у верхню комірку (В2):

    =MassReplace(A2:A10, D2:D4, E2:E4)

    У додинамічному Excel це працює як формула масиву CSE старого зразка: ви вибираєте весь вихідний діапазон (B2:B10), вводите формулу і натискаєте одночасно клавіші Ctrl + Shift + Enter, щоб завершити її.

    Переваги гідна альтернатива кастомній функції ЛАМБДА в 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("Вихідні дані:" , "Масова заміна" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox("Замінити діапазон:" , "Масова заміна" , 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:

    Готово!

    Переваги налаштування один раз, повторне використання в будь-який час

    Недоліки : макрос потрібно запускати при кожній зміні даних

    Багаторазовий пошук і заміна в Excel за допомогою інструменту Підрядковий рядок

    У самому першому прикладі я згадував, що вкладена ПІДСТАНОВКА - це найпростіший спосіб заміни декількох значень в Excel. Визнаю, що був не правий. Наш Ultimate Suite робить все ще простіше!

    Щоб виконати масову заміну на аркуші, перейдіть на вкладку Дані про абіти вкладку і натисніть Інструменти підрядків > Замінити підрядки .

    На сьогоднішній день, на жаль, це не так. Замінити підрядки з'явиться діалогове вікно з проханням вказати Джерело асортимент та Підзаголовки діапазону.

    Вибравши два діапазони, натисніть кнопку Замінити і знайдіть результати в новому стовпчику, вставленому праворуч від вихідних даних. Так, це так просто!

    Порада. Перед тим, як натиснути Замінити є одна важлива річ, яку ви повинні врахувати - це те, що З урахуванням особливостей конкретного випадку Обов'язково встановіть цей прапорець, якщо ви хочете обробляти великі та малі літери як різні символи. У цьому прикладі ми позначимо цю опцію, тому що ми хочемо замінити тільки рядки з великої літери, а підрядки типу "fr", "uk" або "ak" в інших словах залишимо без змін.

    Якщо вам цікаво дізнатися, які ще масові операції можна виконувати над рядками, ознайомтеся з іншими інструментами для роботи з підрядками, що входять до складу нашого Ultimate Suite. А ще краще завантажте ознайомчу версію нижче і спробуйте!

    Ось так можна знайти і замінити відразу кілька слів і символів в Excel. Дякую за увагу і сподіваюся побачити вас на нашому блозі наступного тижня!

    Доступні для завантаження

    Багаторазовий пошук і заміна в Excel (файл .xlsm)

    Ultimate Suite 14-денна повнофункціональна версія (файл .exe)

    Майкл Браун — відданий ентузіаст технологій із пристрастю до спрощення складних процесів за допомогою програмних засобів. Маючи понад десятирічний досвід роботи в технологічній індустрії, він відточив свої навички роботи з Microsoft Excel і Outlook, а також із Google Таблицями та Документами. Блог Майкла присвячений тому, щоб поділитися своїми знаннями та досвідом з іншими, надаючи прості поради та навчальні посібники для підвищення продуктивності та ефективності. Незалежно від того, чи є ви досвідченим професіоналом чи початківцем, блог Майкла пропонує цінну інформацію та практичні поради щодо отримання максимальної користі від цих основних програмних інструментів.