Съдържание
В този урок ще разгледаме няколко начина за намиране и заместване на няколко думи, низове или отделни символи, за да можете да изберете най-подходящия за вашите нужди.
Как обикновено хората търсят в Excel? Най-често чрез функцията Find & Replace (Намери и замени), която работи добре за единични стойности. Но какво става, ако имате десетки или дори стотици елементи за замяна? Със сигурност никой не би искал да прави всички тези замени ръчно една по една, а след това да го прави отново, когато данните се променят. За щастие има няколко по-ефективни метода за масова замяна в Excel ище разгледаме подробно всяка от тях.
Намиране и заместване на няколко стойности с вложен SUBSTITUTE
Най-лесният начин за намиране и замяна на няколко записа в Excel е чрез функцията SUBSTITUTE.
Логиката на формулата е много проста: написвате няколко отделни функции, за да замените стара стойност с нова. След това вмъквате тези функции една в друга, така че всяка следваща SUBSTITUTE използва резултата от предишната SUBSTITUTE, за да търси следващата стойност.
ЗАМЕСТИТЕЛ(ЗАМЕСТИТЕЛ(ЗАМЕСТИТЕЛ( текст , old_text1 , new_text1 ), old_text2 , new_text2 ), 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 е отчитане на малки и големи букви , което означава, че трябва да въведете старите стойности ( old_text ) със същия размер на буквите, с който са представени в оригиналните данни.
Колкото и да е лесен, този метод има съществен недостатък - когато имате десетки елементи за замяна, вложените функции стават доста трудни за управление.
Предимства : лесно за изпълнение; поддържа се във всички версии на Excel
Недостатъци : най-добре е да се използва за ограничен брой стойности за намиране/замяна
Търсене и заместване на множество записи с XLOOKUP
В случаите, когато искате да замените цялото съдържание на клетката , а не неговата част, функцията XLOOKUP е полезна.
Да речем, че имате списък с държави в колона A и искате да замените всички съкращения със съответните пълни имена. Както в предишния пример, започвате с въвеждане на елементите "Find" (Намиране) и "Replace" (Замяна) в отделни колони (съответно 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(текст, стар, нов, IF(стар"", MultiReplace(SUBSTITUTE(текст, стар, нов), OFFSET(стар, 1, 0), OFFSET(нов, 1, 0)), текст))
Или
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
И двете са рекурсивни функции, които се извикват сами. Разликата е само в начина, по който се установява изходната точка.
В първата формула функцията IF проверява дали стар списъкът не е празен (old""). Ако е TRUE, списъкът MultiReplace Ако е FALSE, функцията връща текст в сегашния му вид и излиза от него.
Втората формула използва обратната логика: ако стар е празен (old=""), тогава върнете текст и излезте; в противен случай извикайте MultiReplace .
Най-сложната част е изпълнена! Остава да назовете MultiReplace функция в мениджъра за имена, както е показано на екранната снимка по-долу. За подробни указания вижте Как да дадете име на функция на LAMBDA.
След като функцията получи име, можете да я използвате както всяка друга вградена функция.
Който и от двата варианта на формулата да изберете, от гледна точка на крайния потребител синтаксисът е много прост:
MultiReplace(текст, стар, нов)Къде:
- Текст - изходните данни
- Стар - стойностите, които трябва да намерите
- Нов - стойностите, които да замените с
Ако продължим малко напред с предишния пример, нека заменим не само съкращенията на държавите, но и на щатите. За целта въведете съкращенията ( стар стойности) в колона 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(текст, стар, нов, IF(стар"", MultiReplace(...), текст))
Пример 2. Замяна на няколко символа в Excel
По принцип MultiReplace Функцията, разгледана в предишния пример, може да обработва и отделни символи, при условие че всеки стар и нов символ се въвежда в отделна клетка, точно както съкратените и пълните имена в горните снимки.
Ако предпочитате да въведете старите знаци в една клетка, а новите знаци в друга клетка или да ги въведете директно във формулата, можете да създадете друга потребителска функция, наречена ReplaceChars , като се използва една от тези формули:
=LAMBDA(текст, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(текст, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), текст))
Или
=LAMBDA(текст, old_chars, new_chars, IF(old_chars="", текст, ReplaceChars(SUBSTITUTE(текст, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
Не забравяйте да дадете име на новата си Lambda функция в мениджъра на имената, както обикновено:
И новата ви потребителска функция е готова за използване:
ReplaceChars(текст, old_chars, new_chars)Къде:
- Текст - оригиналните низове
- Стар - символите, които се търсят
- Нов - символите, които да се заменят с
За да го изпробваме на място, нека направим нещо, което често се извършва при импортирани данни - да заменим интелигентните кавички и интелигентните апострофи с прави кавички и прави апострофи.
Първо въвеждаме интелигентните кавички и интелигентния апостроф в D2, а правите кавички и правия апостроф в E2, като отделяме символите с интервали за по-добра четливост. (Тъй като използваме един и същ разделител в двете клетки, това няма да окаже влияние върху резултата - Excel просто ще замени интервала с интервал.)
След това въвеждаме тази формула в B2:
=ReplaceChars(A2:A4, D2, E2)
И получихме точно тези резултати, които търсехме:
Възможно е също така да въведете символите директно във формулата. В нашия случай просто не забравяйте да "дублирате" правите кавички по следния начин:
=ReplaceChars(A2:A4, "" " '", """ "" '")
Как работи тази формула
Сайтът ReplaceChars функцията преминава през old_chars и new_chars низове и извършва замяна по един път, като започва от първия символ вляво. Тази част се извършва от функцията SUBSTITUTE:
SUBSTITUTE(текст, 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 Ако символът не е празен, функцията извиква себе си. След като последният символ е заменен, процесът на итерация приключва, формулата връща текст сегашната си форма и излиза от нея.
Забележка. Тъй като функцията SUBSTITUTE, използвана в нашите основни формули, е отчитане на малки и големи букви , двете ламбда ( MultiReplace и ReplaceChars ) третират главните и малките букви като различни символи.
Масово намиране и заместване с UDF
В случай че функцията LAMBDA не е налична в Excel, можете да напишете дефинирана от потребителя функция за многократно заместване по традиционния начин с помощта на VBA.
За да се разграничи UDF от дефинирания в LAMBDA MultiReplace функцията, ще я наречем по различен начин, например MassReplace . Кодът на функцията е следният:
Функция 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 'Заместване на всички двойки намиране/заместване във всяка клеткаЗа iFindCurRow = 1 До cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Следваща arRes(iInputCurRow, iInputCurCol) = sTmp Следваща Следваща MassReplace = arRes Край на функциятаПодобно на дефинираните в LAMBDA функции, UDF са за цялата работна книга Това означава. MassReplace Функцията ще работи само в работната книга, в която сте вмъкнали кода. Ако не сте сигурни как да направите това правилно, моля, следвайте стъпките, описани в Как да вмъкнем код VBA в Excel.
След като кодът бъде добавен в работната ви книга, функцията ще се появи в интелисенса на формулата - само името на функцията, но не и аргументите! Въпреки това смятам, че не е проблем да запомните синтаксиса:
MassReplace(input_range, find_range, replace_range)Къде:
- 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 За всеки Rng в 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 и щракнете върху Инструменти за подниз > Замяна на поднизове .
Сайтът Замяна на поднизове Ще се появи диалогов прозорец, в който ще трябва да определите Източник: обхват и Поднизове обхват.
Когато са избрани двата диапазона, щракнете върху Замяна на и ще откриете резултатите в нова колона, вмъкната вдясно от първоначалните данни. Да, толкова е лесно!
Съвет. Преди да щракнете върху Замяна на , трябва да вземете предвид едно важно нещо - Чувствителност на буквите Не забравяйте да го изберете, ако искате да обработвате главните и малките букви като различни символи. В този пример отбелязваме тази опция, защото искаме да заменим само главни букви и да оставим поднизчетата като "fr", "uk" или "ak" в други думи непокътнати.
Ако сте любопитни да научите какви други обемни операции могат да се извършват върху низове, разгледайте други инструменти за поднизове, включени в нашия Ultimate Suite. Или още по-добре, изтеглете версията за оценка по-долу и я изпробвайте!
Ето как да намерите и замените няколко думи и символи наведнъж в Excel. Благодаря ви, че прочетохте, и се надявам да се видим в нашия блог следващата седмица!
Налични изтегляния
Многократно намиране и заместване в Excel (.xlsm файл)
Ultimate Suite 14-дневна напълно функционална версия (.exe файл)