Excel: најдете и заменете повеќе вредности одеднаш

  • Споделете Го Ова
Michael Brown

Во ова упатство, ќе разгледаме неколку начини за наоѓање и замена на повеќе зборови, низи или поединечни знаци, за да можете да го изберете оној кој најмногу одговара на вашите потреби.

Како луѓето обично бараат во Excel? Најчесто, со користење на Find & Заменете ја функцијата, која работи добро за единечни вредности. Но, што ако имате десетици, па дури и стотици предмети за замена? Сигурно, никој не би сакал да ги направи сите тие замени рачно еден по еден, а потоа да го направи тоа одново кога ќе се променат податоците. За среќа, има уште неколку ефективни методи за масовно замена во Excel, и ние ќе го истражиме секој од нив детално.

    Најдете и заменете повеќе вредности со вгнездена SUBSTITUTE

    Најлесен начин да пронајдете и замените повеќе записи во Excel е со користење на функцијата SUBSTITUTE.

    Логиката на формулата е многу едноставна: пишувате неколку индивидуални функции за да ја замените старата вредност со нова . И потоа, ги вгнездувате тие функции една во друга, така што секој следен SUBSTITUTE го користи излезот од претходната SUBSTITUTE за да ја бара следната вредност.

    SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( текст, стар_текст1, нов_текст1), стар_текст2, нов_текст2), стар_текст3, нов_текст3)

    Во списокот со локации во A2:A10, да претпоставиме дека сакате да ги замените скратените имиња на држави (како што се FR , UK и USA ) со целоснаФункцијата MassReplace ќе работи само во работната книга во која сте го внеле кодот. Ако не сте сигурни како да го направите ова правилно, следете ги чекорите опишани во Како да вметнете VBA код во Excel.

    Откако кодот ќе се додаде во вашата работна книга, функцијата ќе се појави во формулата intellisense - само името на функцијата, а не аргументите! Иако, верувам дека не е голема работа да се запамети синтаксата:

    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( "Изворни податоци: " , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng не е ништо, тогаш поставете ReplaceRng = Application.InputBox( "Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng не е ништо тогаш Application.ScreenUpdating = False за секој Rng во ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, замена:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End Sub

    За да го искористите макрото веднаш, можете да ја преземете нашата работна книга примерок што го содржи кодот. Или можете да го вметнете кодот во вашата работна книга.

    Како да го користите макрото

    Пред да го стартувате макрото, внесете ги старите и новите вредности во две соседни колони како што е прикажано на сликата подолу ( C2:D4).

    И потоа, изберете ги вашите изворни податоци, притиснете Alt + F8 , изберете го макрото BulkReplace и кликнете Изврши .

    Како што е претходно избрано изворот бес , само потврдете ја референцата и кликнете OK:

    Потоа, изберете го заменете го опсегот и кликнете ОК:

    Готово!

    Предности : поставување еднаш, повторна употреба во секое време

    Недостатоци : макрото треба да се извршува со секој податокпромена

    Повеќето наоѓање и замена во Excel со алатката Substring

    Во првиот пример, спомнав дека вгнезденото SUBSTITUTE е најлесниот начин за замена на повеќе вредности во Excel. Признавам дека згрешив. Нашиот Ultimate Suite ги прави работите уште полесни!

    За масовна замена во вашиот работен лист, одете во картичката Ablebits Data и кликнете Substring Tools > Заменете ги поднизите .

    Ќе се појави дијалог прозорецот Замени поднизи со барање да го дефинирате опсегот Извор и <1 Опсег>Поднизи .

    Со избраните два опсези, кликнете на копчето Замени и пронајдете ги резултатите во нова колона вметната десно на оригиналните податоци. Да, толку е лесно!

    Совет. Пред да кликнете Замени , има една важна работа што треба да ја земете во предвид - полето Осетливи на мали букви . Бидете сигурни да го изберете ако сакате да ги ракувате големите и малите букви како различни знаци. Во овој пример, ја штиклираме оваа опција бидејќи сакаме само да ги замениме низите со големи букви и да ги оставиме поднизите како „fr“, „uk“ или „ak“ во други зборови недопрени.

    Ако сте љубопитни да знаете кои други масовни операции може да се извршат на жици, проверете ги другите алатки за поднизи вклучени во нашиот Ultimate Suite. Или уште подобро, преземете ја верзијата за оценување подолу и пробајте ја!

    Така да најдете и заменитеповеќе зборови и знаци одеднаш во Excel. Ви благодарам што прочитавте и се надевам дека ќе се видиме на нашиот блог следната недела!

    Достапни преземања

    Повеќе наоѓање и замена во Excel (датотека.xlsm)

    Ultimate Suite 14 -дневна целосно функционална верзија (датотека .exe)

    имиња.

    За да го направите тоа, внесете ги старите вредности во 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 е чувствителна на букви , што значи дека треба да ги напишете старите вредности ( стар_текст ) во истата буква како што се појавуваат во оригиналните податоци.

    Колку што е можно лесно, овој метод има значителен недостаток - кога имате десетици ставки за замена, вгнездените функции стануваат доста тешки за управување.

    Предности : лесно -за спроведување на; поддржано во сите верзии на Excel

    Недостатоци : најдобро е да се користи за ограничен број вредности за наоѓање/замена

    Пребарај и замени повеќе записи со XLOOKUP

    Во ситуација кога барате да ја замените целата содржина на ќелија , а не нејзиниот дел, функцијата XLOOKUP ни доаѓа.

    Ајдекажете дека имате список на земји во колоната А и целјте да ги замените сите кратенки со соодветните целосни имиња. Како и во претходниот пример, започнувате со внесување на ставките „Најди“ и „Замени“ во посебни колони (Д и Е соодветно), а потоа внесете ја оваа формула во 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 функција

    За Мајкрософт365 претплатници, Excel обезбедува специјална функција која овозможува креирање сопствени функции користејќи традиционален јазик на формула. Да, зборувам за ЛАМБДА. Убавината на овој метод е во тоа што може да претвори многу долга и сложена формула во многу компактна и едноставна. Освен тоа, ви овозможува да креирате сопствени функции кои не постојат во 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 проверува дали списокот стари не е празен (стар""). Ако е ТОЧНО, се повикува функцијата MultiReplace . Ако FALSE, функцијатаго враќа текст неговата сегашна форма и излегува.

    Втората формула ја користи обратната логика: ако стариот е празен (old=""), тогаш вратете го текст и излези; инаку јавете се на MultiReplace .

    Најнезгодниот дел е постигнат! Она што ви останува да направите е да ја именувате функцијата MultiReplace во Управникот со имиња како што е прикажано на сликата од екранот подолу. За детални упатства, погледнете Како да именувате функција LAMBDA.

    Штом функцијата ќе добие име, можете да ја користите исто како и секоја друга вградена функција.

    Која од двете варијации на формулата ќе ја изберете, од перспектива на крајниот корисник, синтаксата е едноставна како оваа:

    MultiReplace(текст, стар, нов)

    Каде:

    • Текст - изворните податоци
    • Стари - вредностите што треба да се најдат
    • Ново - вредностите што треба да се заменат со

    Да го земеме претходниот пример малку подалеку, да ги замениме не само кратенките на државите, туку и државните кратенки. За ова, напишете ги кратенките ( стари вредности) во колоната D почнувајќи од D2 и целосните имиња ( нови вредности) во колоната Е почнувајќи од 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 станува параметар text за следниот SUBSTITUTE. Со други зборови, на секој следен повик на MultiReplace , функцијата SUBSTITUTE не ја обработува оригиналната текстуална низа, туку излезот од претходниот повик.

    За да се справи со сите ставки на старата листа, започнуваме со најгорната ќелија и ја користиме функцијата OFFSET за да поместиме 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))))

    Истото се прави за нова листа:

    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(текст, стари_знаци, нови_ознаки)

    Каде:

    • Текст - оригиналните низи
    • Старо - знаците што треба да се бараат
    • Ново - знаците што треба да се заменат со

    За да се изврши теренски тест, ајде да направиме нешто што често се изведува на увезени податоци - заменете ги паметните наводници и паметните апострофи со директни наводници и директни апострофи.

    Прво, ги внесуваме паметните наводници и паметната апострофа во D2, правите наводници и директниот апостроф во E2 , одвојувајќи ги ликовите со празни места за подобра читливост. (Бидејќи го користиме истиот разграниувач во двете ќелии, тоа нема да има никакво влијание врз резултатот - Excel само ќе го замени празно место со празно место.)

    Потоа, ја внесуваме оваа формула во B2:

    =ReplaceChars(A2:A4, D2, E2)

    И добијте ги точно резултатите што ги баравме:

    Можно е и директно да ги внесете знаците во формулата. Во нашиот случај, само запомнете да ги „дуплирате“ директните наводници вака:

    =ReplaceChars(A2:A4, "“ ” ’", """ "" '")

    Како функционира оваа формула

    The ReplaceChars функцијата кружи низ низите стари_знаци и нови_знаци и прави една замена одеднаш почнувајќи од првиот знак лево. Овој дел го прави функцијата SUBSTITUTE:

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

    Со секое повторување, функцијата RIGHT отстранува еден знак од лево од старите_знаци и стрингови 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 што се користи во нашите основни формули е чувствителна на букви , и Lambdas ( MultiReplace и ReplaceChars ) ги третираат големите и малите букви како различни знаци.

    Масовно наоѓање и замена со UDF

    Во случај функцијата LAMBDA да не е достапна во вашиот Excel, можете да напишете функција дефинирана од корисникот за повеќекратна замена на традиционален начин користејќи VBA.

    За да го разликуваме UDF од функцијата MultiReplace дефинирана од LAMBDA, ќе ја именуваме поинаку, да речеме MassReplace . Кодот на функцијата е како што следува:

    Функција MassReplace(InputRng како опсег, FindRng како опсег, ReplaceRng as range) Како варијанта () DimarRes() Како варијанта 'низа за складирање на резултатите Dim arSearchReplace(), sTmp Како низа 'каде да се складираат паровите наоѓање/замени, привремена низа Dim iFindCurRow, cntFindRows As Long' индекс на тековниот ред од низата SearchReplace, брои на редови Затемнети iInputCurRow, iInputCurCol, cntInputRows, cntInputCols Долго 'индекс на тековниот ред во изворниот опсег, индекс на тековната колона во опсегот на изворот, број на редови, број на колони cntInputRows = InputRng.Редици.Броење cnt .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 to cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'подготовка на низата од find/replace pars iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Пребарување и замена во опсегот на изворот За внесување на изворот =Внеси iRowsC 1 До cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Вредност 'Заменување на сите парови за наоѓање/замени во секоја ќелија За iFindCurRow = 1 За да cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1,Replace NextCurRow, 1) (iInputCurRow, iInputCurCol) = sTmp Следно Следно MassReplace = arRes Крајна функција

    Како функциите дефинирани со LAMBDA, UDF-овите се широк на работната книга . Тоа значи дека

    Мајкл Браун е посветен технолошки ентузијаст со страст за поедноставување на сложените процеси користејќи софтверски алатки. Со повеќе од една деценија искуство во технолошката индустрија, тој ги усоврши своите вештини во Microsoft Excel и Outlook, како и Google Sheets и Docs. Блогот на Мајкл е посветен на споделување на своето знаење и експертиза со другите, обезбедувајќи лесни за следење совети и упатства за подобрување на продуктивноста и ефикасноста. Без разлика дали сте искусен професионалец или почетник, блогот на Мајкл нуди вредни сознанија и практични совети за да го извлечете максимумот од овие основни софтверски алатки.