Преглед садржаја
У овом водичу ћемо погледати неколико начина да пронађете и замените више речи, низова или појединачних знакова, тако да можете да изаберете онај који најбоље одговара вашим потребама.
Како људи обично претражују у Екцел-у? Углавном, користећи Финд &амп; Функција замене, која добро функционише за појединачне вредности. Али шта ако имате десетине или чак стотине ствари које треба заменити? Наравно, нико не би желео да изврши све те замене ручно, једну по једну, а затим све изнова када се подаци промене. Срећом, постоји неколико ефикаснијих метода за масовну замену у Екцел-у, а ми ћемо детаљно истражити сваку од њих.
Пронађите и замените више вредности са угнежђеном СУБСТИТУТЕ
Најлакши начин да пронађете и замените више уноса у Екцел-у је коришћење функције СУБСТИТУТЕ.
Логика формуле је веома једноставна: пишете неколико појединачних функција да бисте заменили стару вредност новом . А затим, те функције угнездите једну у другу, тако да свака следећа СУБСТИТУТЕ користи излаз претходне СУБСТИТУТЕ да тражи следећу вредност.
СУБСТИТУТЕ(СУБСТИТУТЕ(СУБСТИТУТЕ( тект, стари_текст1, нови_текст1), стари_текст2, нови_текст2), стари_текст3, нови_текст3)На листи локација у А2:А10, претпоставимо да желите да замените скраћене називе земаља (као што су ФР , УК и САД ) са пунимФункција МассРеплаце ће радити само у радној свесци у коју сте убацили код. Ако нисте сигурни како да ово урадите исправно, пратите кораке описане у одељку Како да уметнете ВБА код у Екцел.
Када се код дода у радну свеску, функција ће се појавити у формули интеллисенсе – само име функције, а не аргументи! Мада, верујем да није велика ствар запамтити синтаксу:
МассРеплаце(улазни опсег, проналажење_опсег, реплаце_ранге)Где:
- Инпут_ранге – изворни опсег где желите да замените вредности.
- Пронађи_опсег - знакови, стрингови или речи за претрагу.
- Замени_опсег - знакови, стрингови, или речи које треба заменити.
У Екцел 365, због подршке за динамичке низове, ово функционише као нормална формула, коју треба унети само у горњу ћелију (Б2):
=MassReplace(A2:A10, D2:D4, E2:E4)
У пре-динамичком Екцел-у, ово функционише као формула ЦСЕ низа старог стила: бирате цео опсег извора (Б2:Б10), откуцавате формуле и истовремено притисните тастере Цтрл + Схифт + Ентер да бисте је довршили.
Предности : пристојна алтернатива прилагођеној ЛАМБДА функцији у програму Екцел 2019 , Екцел 2016 и старије верзије
Недостаци : радна свеска мора бити сачувана као .клсм датотека са омогућеним макроима
Групна замена у Екцел-у са ВБА макро
Ако волите ауто спајање уобичајених задатака са макроима, затим виможе да користи следећи ВБА код да пронађе и замени више вредности у опсегу.
Суб БулкРеплаце() Дим Рнг Ас Ранге, СоурцеРнг Ас Ранге, РеплацеРнг Ас Ранге у случају грешке Настави Следећи Сет СоурцеРнг = Апплицатион.ИнпутБок( "Изворни подаци: " , "Булк Реплаце" , Апплицатион.Селецтион.Аддресс, Типе :=8) Ерр.Цлеар Иф Нот СоурцеРнг Ис Нотхинг тхен Сет РеплацеРнг = Апплицатион.ИнпутБок( "Реплаце ранге:" , "Булк Реплаце" , Типе :=8) Ерр.Цлеар Ако Нот РеплацеРнг није ништа онда Апплицатион.СцреенУпдатинг = Фалсе за сваки Рнг у РеплацеРнг.Цолумнс(1).Целлс СоурцеРнг.Реплаце вхат:=Рнг.Валуе, реплацемент:=Рнг.Оффсет(0, 1).Валуе Нект Апплицатион.СцреенУпдатинг = Труе Енд Иф Енд Иф Енд СубДа бисте одмах искористили макро, можете преузети наш пример радне свеске која садржи код. Или можете да убаците код у своју радну свеску.
Како користити макро
Пре покретања макроа, откуцајте старе и нове вредности у две суседне колоне као што је приказано на слици испод ( Ц2:Д4).
А затим изаберите изворне податке, притисните Алт + Ф8, изаберите макро БулкРеплаце и кликните на Рун .
Пошто је изворни бес унапред изабран, само потврдите референцу и кликните на ОК:
Након тога, изаберите замени опсег и кликните на ОК:
Готово!
Предности : подешавање једном, поновна употреба било када
Недостаци : макро треба да се покрене са сваким подацимапромена
Вишеструко проналажење и замена у Екцел-у помоћу алата за подниз
У првом примеру, поменуо сам да је угнежђени СУБСТИТУТЕ најлакши начин да се замени више вредности у Екцел-у. Признајем да сам погрешио. Наш Ултимате Суите чини ствари још лакшим!
Да бисте извршили масовну замену на радном листу, идите на картицу Аблебитс Дата и кликните на Алатке за поднизове &гт; Замени поднизове .
Појавиће се оквир за дијалог Замени поднизове у којем ће се тражити да дефинишете опсег Извор и <1 Опсег>Поднизови .
Са два изабрана опсега, кликните на дугме Замени и пронађите резултате у новој колони уметнутој са десне стране оригиналних података. Да, тако је лако!
Савет. Пре него што кликнете на Замени , постоји једна важна ствар коју треба да узмете у обзир – поље Велики и велики слова . Обавезно га изаберите ако желите да велика и мала слова буду различита. У овом примеру означавамо ову опцију јер желимо само да заменимо стрингове са великим словима и да оставимо подстрингове као што су „фр“, „ук“ или „ак“ унутар других речи нетакнутим.
Ако сте радознали да сазнате које друге групне операције могу да се изврше над стринговима, погледајте друге алатке за подстринг укључене у наш Ултимате Суите. Или још боље, преузмите верзију за процену испод и испробајте је!
Тако можете пронаћи и заменитивише речи и знакова одједном у Екцел-у. Захваљујем вам што сте читали и надам се да се видимо на нашем блогу следеће недеље!
Доступна преузимања
Пронађи и замени више пута у Екцел-у (.клсм датотека)
Ултимате Суите 14 -даи потпуно функционална верзија (.еке датотека)
имена.Да бисте то урадили, унесите старе вредности у Д2:Д4 и нове вредности у Е2:Е4 као што је приказано на слици испод. А затим, ставите следећу формулу у Б2 и притисните Ентер:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
...и све замене ће бити обављене одједном:
Имајте на уму да горњи приступ функционише само у Екцел 365 који подржава динамичке низове.
У пре-динамичким верзијама Екцел 2019, Екцел 2016 и старијих, формула треба да буде написано за најгорњу ћелију (Б2), а затим копирано у ћелије испод:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Обратите пажњу да, у овом случају, закључавамо вредности замене апсолутним референцама ћелије, тако да неће се померати приликом копирања формуле надоле.
Напомена. Функција СУБСТИТУТЕ је осетљива на велика и мала слова , што значи да старе вредности ( олд_тект ) треба да укуцате истим великим словима као што се појављују у оригиналним подацима.
Колико год лако могло да буде, овај метод има значајан недостатак – када имате десетине ставки за замену, угнежђеним функцијама постаје прилично тешко управљати.
Предности : лако -имплементирати; подржано у свим верзијама Екцел-а
Недостаци : најбоље да се користи за ограничен број вредности за проналажење/замена
Претражи и замени више уноса са КСЛООКУП
У ситуацији када желите да замените цео садржај ћелије , а не њен део, функција КСЛООКУП је згодна.
Хајде дарецимо да имате списак земаља у колони А и настојите да замените све скраћенице одговарајућим пуним називима. Као иу претходном примеру, почињете са уносом ставки „Пронађи“ и „Замени“ у засебне колоне (Д и Е респективно), а затим уносите ову формулу у Б2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Преведено са Екцел језика на људски језик, ево шта ради формула:
Тражите А2 вредност (лоокуп_валуе) у Д2:Д4 (лоокуп_арраи) и вратите подударање из Е2:Е4 (ретурн_арраи). Ако није пронађена, повуците оригиналну вредност са А2.
Двапут кликните на ручицу за попуњавање да бисте формулу копирали у ћелије испод и резултат вас неће натерати да чекате:
Пошто је функција КСЛООКУП доступна само у програму Екцел 365, горња формула неће радити у ранијим верзијама. Међутим, ово понашање можете лако да опонашате комбинацијом ИФЕРРОР или ИФНА и ВЛООКУП:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Напомена. За разлику од СУБСТИТУТЕ, функције КСЛООКУП и ВЛООКУП не разликују велика и мала слова , што значи да траже тражене вредности игноришући велика и мала слова. На пример, наша формула би заменила и ФР и фр са Француска .
Предности : необична употреба уобичајених функција; ради у свим верзијама Екцел-а
Недостаци : ради на нивоу ћелије, не може заменити део садржаја ћелије
Вишеструка замена коришћењем рекурзивне ЛАМБДА функције
За Мицрософт365 претплатника, Екцел пружа посебну функцију која омогућава креирање прилагођених функција користећи традиционални језик формула. Да, говорим о ЛАМБДА. Лепота ове методе је у томе што може претворити веома дугачку и сложену формулу у веома компактну и једноставну. Штавише, омогућава вам да креирате сопствене функције које не постоје у Екцел-у, нешто што је раније било могуће само са ВБА.
За детаљне информације о креирању и коришћењу прилагођених ЛАМБДА функција, погледајте овај водич: Како за писање ЛАМБДА функција у Екцел-у. Овде ћемо разговарати о неколико практичних примера.
Предности : резултат је елегантна и невероватно једноставна за коришћење функција, без обзира на број парова замене
Недостаци : доступно само у програму Екцел 365; специфично за радну свеску и не може се поново користити у различитим радним свескама
Пример 1. Претражите и замените више речи/стрингова одједном
Да бисмо заменили више речи или текста одједном, направили смо прилагођени ЛАМБДА функција, под називом МултиРеплаце , која може имати један од ових облика:
=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))))
Обе су рекурзивне функције које саме себе називају. Разлика је само у томе како се успоставља излазна тачка.
У првој формули, ИФ функција проверава да ли стара листа није празна (стара""). Ако је ТРУЕ, позива се функција МултиРеплаце . Ако је ФАЛСЕ, функцијавраћа тект његов тренутни облик и излази.
Друга формула користи обрнуту логику: ако је олд празан (олд=""), онда враћа текст и изађи; у супротном позовите МултиРеплаце .
Најтежи део је постигнут! Оно што вам је преостало је да назовете функцију МултиРеплаце у Наме Манагеру као што је приказано на слици испод. За детаљна упутства погледајте Како да именујете ЛАМБДА функцију.
Када функција добије име, можете је користити као и било коју другу уграђену функцију.
Коју год од две варијације формуле да изаберете, из перспективе крајњег корисника, синтакса је једноставна као што је ова:
МултиРеплаце(тект, олд, нев)Где:
- Текст - изворни подаци
- Стари - вредности које треба пронаћи
- Нови - вредности које треба заменити са
Узимајући претходни пример мало даље, заменимо не само скраћенице земаља, већ и скраћенице држава. За ово унесите скраћенице ( старе вредности) у колону Д која почиње у Д2 и пуна имена ( нове вредности) у колону Е која почиње у Е2.
У Б2, унесите функцију МултиРеплаце:
=MultiReplace(A2:A10, D2, E2)
Притисните Ентер и уживајте у резултатима :)
Како ова формула функционише
Кључ за разумевање формуле је разумевање рекурзије. Ово може звучати компликовано, али принцип је прилично једноставан. Са свакимитерација, рекурзивна функција решава једну малу инстанцу већег проблема. У нашем случају, функција МултиРеплаце пролази кроз старе и нове вредности и, са сваком петљом, врши једну замену:
МултиРеплаце (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Као и код угнежђених функција СУБСТИТУТЕ, резултат претходне СУБСТИТУТЕ постаје параметар тект за следећи СУБСТИТУТЕ. Другим речима, при сваком следећем позиву МултиРеплаце , функција СУБСТИТУТЕ не обрађује оригинални текстуални низ, већ излаз претходног позива.
Да би обрадила све ставке на стара листа, почињемо са највишом ћелијом и користимо функцију ОФФСЕТ да померимо 1 ред надоле са сваком интеракцијом:
OFFSET(old, 1, 0)
Исто се ради за нова листа:
OFFSET(new, 1, 0)
Кључна ствар је обезбедити тачку излаза како би се спречило да се рекурзивни позиви заувек наставе. То се ради уз помоћ функције ИФ - ако је стара ћелија празна, функција враћа текст у садашњем облику и излази:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
или
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
Пример 2. Замени више знакова у Екцел
У принципу, функција МултиРеплаце о којој се говори у претходном примеру може рукују и појединачним знаковима, под условом да се сваки стари и нови знак унесе у посебну ћелију, баш као скраћена и пуна имена на горњим снимцима екрана.
Ако бисте радије унели старизнакове у једној ћелији и нове знакове у другој ћелији, или их откуцајте директно у формулу, онда можете креирати другу прилагођену функцију, под називом РеплацеЦхарс , користећи једну од ових формула:
=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))))
Не заборавите да именујете своју нову Ламбда функцију у Наме Манагеру као и обично:
И ваша нова прилагођена функција је спремна за употребу:
РеплацеЦхарс(тект, олд_цхарс, нев_цхарс)Где:
- Тект - оригинални стрингови
- Стари - знакови за тражење
- Нови - знакови које треба заменити са
Да бисте извршили тест на терену, хајде да урадимо нешто што се често изводи на увезеним подацима - замени паметне наводнике и паметне апострофе правим наводницима и правим апострофима.
Прво, уносимо паметне наводнике и паметни апостроф у Д2, праве наводнике и праве апострофе у Е2 , одвајајући знакове размацима ради боље читљивости. (Пошто користимо исти граничник у обе ћелије, то неће утицати на резултат – Екцел ће само заменити размак размаком.)
Након тога уносимо ову формулу у Б2:
=ReplaceChars(A2:A4, D2, E2)
И добити тачно резултате које смо тражили:
Такође је могуће укуцати знакове директно у формулу. У нашем случају, само запамтите да „дуплирате“ равне наводнике овако:
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
Како ова формула функционише
Тхе РеплацеЦхарс функција кружи кроз низове олд_цхарс и нев_цхарс и прави једну по једну замену почевши од првог знака са леве стране. Овај део ради функција СУБСТИТУТЕ:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Са сваком итерацијом, функција ДЕСНО уклања један знак са леве стране и од старих_знакова и нев_цхарс стрингови, тако да ЛЕФТ може да преузме следећи пар знакова за замену:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Пре сваког рекурзивног позива, ИФ функција оцењује стринг олд_цхарс . Ако није празан, функција позива саму себе. Чим се последњи знак замени, процес итерације се завршава, формула враћа текст у садашњем облику и излази.
Напомена. Пошто је функција СУБСТИТУТЕ која се користи у нашим основним формулама осетљива на велика и мала слова , обе Ламбда ( МултиРеплаце и РеплацеЦхарс ) третирају велика и мала слова као различите знакове.
Масовно проналажење и замена са УДФ
У случају да ЛАМБДА функција није доступна у вашем Екцел-у, можете да напишете кориснички дефинисану функцију за вишеструку замену на традиционалан начин користећи ВБА.
Да бисмо разликовали УДФ од функције МултиРеплаце дефинисане ЛАМБДА, назваћемо је другачије, рецимо МассРеплаце . Код функције је следећи:
Функција МассРеплаце(ИнпутРнг Ас Ранге, ФиндРнг Ас Ранге, РеплацеРнг Ас Ранге) Ас Вариант () ДимарРес() Ас Вариант 'низ за чување резултата Дим арСеарцхРеплаце(), сТмп Ас Стринг 'низ где да се чувају парови проналажење/замена, привремени стринг Дим иФиндЦурРов, цнтФиндРовс Ас Лонг 'индекс тренутног реда СеарцхРеплаце низа, број редова Дим иИнпутЦурРов, иИнпутЦурЦол, цнтИнпутРовс, цнтИнпутЦолс Ас Лонг 'индекс тренутног реда у изворном опсегу, индекс тренутне колоне у изворном опсегу, број редова, број колона цнтИнпутРовс = ИнпутРнг.Ровс.Цоунт = цнтИнпутЦолнгс .Цолумнс.Цоунт цнтФиндРовс = ФиндРнг.Ровс.Цоунт РеДим арРес(1 до цнтИнпутРовс, 1 до цнтИнпутЦолс) РеДим арСеарцхРеплаце(1 до цнтФиндРовс, 1 до 2) 'припрема низа парова за проналажење/замена за иФиндРовс за иФинд1Р. иФиндЦурРов, 1) = ФиндРнг.Целлс(иФиндЦурРов, 1).Валуе арСеарцхРеплаце(иФиндЦурРов, 2) = РеплацеРнг.Целлс(иФиндЦурРов, 1).Валуе Нект 'Тражење и замена у изворном опсегу За цИнпутЦурвР За иИнпут1Цурвс 1 За цнтИнпутЦолс сТм п = ИнпутРнг.Целлс(иИнпутЦурРов, иИнпутЦурЦол).Валуе 'Замена свих парова проналажења/замена у свакој ћелији За иФиндЦурРов = 1 За цнтФиндРовс сТмп = Реплаце(сТмп, арСеарцхРеплаце(иФиндЦурСеарцх, 1)Следеће(иФиндЦурСеарцхРеплаце, 1)РиФиндРов, 1 (иИнпутЦурРов, иИнпутЦурЦол) = сТмп Следеће Следеће МассРеплаце = арРес Енд ФункцијаКао и функције дефинисане ЛАМБДА, УДФ-ови су широком радне свеске . То значи да