Excel: знаходзіць і замяняць некалькі значэнняў адначасова

  • Падзяліцца Гэтым
Michael Brown

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

Як людзі звычайна шукаюць у Excel? Галоўным чынам, з дапамогай Find & Функцыя замены, якая выдатна працуе для адзінкавых значэнняў. Але што, калі ў вас ёсць дзясяткі ці нават сотні прадметаў, якія трэба замяніць? Безумоўна, ніхто не захоча рабіць усе гэтыя замены ўручную адну за адной, а потым рабіць гэта зноўку, калі даныя зменяцца. На шчасце, ёсць некалькі больш эфектыўных метадаў масавай замены ў Excel, і мы збіраемся падрабязна даследаваць кожны з іх.

    Знайдзіце і заменіце некалькі значэнняў з дапамогай укладзеных SUBSTITUTE

    Самы просты спосаб знайсці і замяніць некалькі запісаў у Excel - гэта выкарыстоўваць функцыю SUBSTITUTE.

    Логіка формулы вельмі простая: вы пішаце некалькі асобных функцый, каб замяніць старое значэнне новым. . А потым вы ўкладваеце гэтыя функцыі адна ў іншую, так што кожная наступная SUBSTITUTE выкарыстоўвае вывад папярэдняй SUBSTITUTE для пошуку наступнага значэння.

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

    Выкажам здагадку, што ў спісе месцаў у A2:A10 вы хочаце замяніць скарочаныя назвы краін (напрыклад, FR , UK і USA ) поўныміФункцыя MassReplace будзе працаваць толькі ў кнізе, у якую вы ўставілі код. Калі вы не ведаеце, як гэта зрабіць правільна, выканайце дзеянні, апісаныя ў раздзеле "Як уставіць код VBA ў Excel".

    Пасля таго, як код будзе дададзены ў вашу кнігу, функцыя з'явіцца ў формуле intellisense - толькі імя функцыі, а не аргументы! Хаця я лічу, што запомніць сінтаксіс няважна:

    MassReplace(input_range, find_range, replace_range)

    Where:

    • 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( "SourceRng As Range: " , "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 Then Application.ScreenUpdating = False Для кожнага 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 і націсніце Run .

    Паколькі крыніца гневу папярэдне выбрана, проста праверце спасылку і націсніце OK:

    Пасля гэтага, абярыце дыяпазон замены і націсніце OK:

    Гатова!

    Перавагі : усталяваць адзін раз, выкарыстоўваць паўторна ў любы час

    Недахопы : макрас трэба запускаць з кожнымі дадзенымізмена

    Шматразовы пошук і замена ў Excel з дапамогай інструмента Substring

    У самым першым прыкладзе я згадаў, што ўкладзены SUBSTITUTE - гэта самы просты спосаб замяніць некалькі значэнняў у Excel. Я прызнаю, што памыліўся. Наш Ultimate Suite робіць усё яшчэ прасцей!

    Каб зрабіць масавую замену ў вашым аркушы, перайдзіце на ўкладку Ablebits Data і націсніце Substring Tools > Замяніць падрадкі .

    З'явіцца дыялогавае акно Замяніць падрадкі з просьбай вызначыць дыяпазон Крыніца і <1 Дыяпазон>Падрадкоў .

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

    Парада. Перад тым, як націснуць Замяніць , ёсць адна важная рэч, якую вы павінны ўлічваць - поле З улікам рэгістра . Абавязкова выберыце яго, калі хочаце апрацоўваць вялікія і малыя літары як розныя сімвалы. У гэтым прыкладзе мы адзначым гэты параметр, таму што хочам толькі замяніць радкі з вялікай літары і пакінуць некранутымі такія падрадкі, як "fr", "uk" або "ak" у іншых словах.

    Калі вам цікава даведацца, якія яшчэ масавыя аперацыі можна выконваць над радкамі, азнаёмцеся з іншымі інструментамі для падрадкоў, якія ўваходзяць у наш найвышэйшы пакет. Ці нават лепш, спампуйце ацэначную версію ніжэй і паспрабуйце!

    Вось як знайсці і замяніцьнекалькі слоў і сімвалаў адначасова ў Excel. Я дзякую вам за чытанне і спадзяюся ўбачыць вас у нашым блогу на наступным тыдні!

    Даступныя спампоўкі

    Некалькі пошукаў і замен у Excel (файл .xlsm)

    Ultimate Suite 14 -day поўная функцыянальная версія (файл .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(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)

    Звярніце ўвагу, што ў гэтым выпадку мы фіксуем значэнні замены абсалютнымі спасылкамі на ячэйкі, таму яны не будуць зрушвацца пры капіраванні формулы ўніз.

    Заўвага. Функцыя SUBSTITUTE адчувальная да рэгістра , што азначае, што вы павінны ўводзіць старыя значэнні ( old_text ) у тым жа рэгістры літар, у якім яны з'яўляюцца ў зыходных дадзеных.

    Наколькі лёгкім гэта ні магло быць, гэты метад мае істотны недахоп - калі ў вас ёсць дзесяткі элементаў для замены, укладзенымі функцыямі становіцца даволі складана кіраваць.

    Перавагі : лёгка -рэалізаваць; падтрымліваецца ва ўсіх версіях Excel

    Недахопы : лепш за ўсё выкарыстоўваць для абмежаванай колькасці значэнняў пошуку/замены

    Пошук і замена некалькіх запісаў з дапамогай XLOOKUP

    У сітуацыі, калі вы хочаце замяніць увесь змест ячэйкі , а не яго частку, спатрэбіцца функцыя XLOOKUP.

    Давайцескажыце, што ў вас ёсць спіс краін у калонцы А, і паспрабуйце замяніць усе абрэвіятуры адпаведнымі поўнымі назвамі. Як і ў папярэднім прыкладзе, вы пачынаеце з уводу элементаў «Знайсці» і «Замяніць» у асобныя слупкі (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 на France .

    Перавагі : незвычайнае выкарыстанне звычайных функцый; працуе ва ўсіх версіях Excel

    Недахопы : працуе на ўзроўні ячэйкі, не можа замяніць частку змесціва ячэйкі

    Шматразовая замена з дапамогай рэкурсіўнай функцыі LAMBDA

    Для Microsoft365 падпісчыкаў, Excel прапануе спецыяльную функцыю, якая дазваляе ствараць карыстальніцкія функцыі з дапамогай традыцыйнай мовы формул. Так, я кажу пра LAMBDA. Прыгажосць гэтага метаду ў тым, што ён можа пераўтварыць вельмі доўгую і складаную формулу ў вельмі кампактную і простую. Больш за тое, гэта дазваляе вам ствараць свае ўласныя функцыі, якія не існуюць у 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))))

    Абедзве рэкурсіўныя функцыі, якія выклікаюць самі сябе. Розніца толькі ў тым, як усталёўваецца кропка выхаду.

    У першай формуле функцыя КАЛІ правярае, ці не пусты спіс стары (стары""). Калі TRUE, выклікаецца функцыя MultiReplace . Калі FALSE, функцыявяртае тэкст у яго бягучую форму і выходзіць.

    Другая формула выкарыстоўвае адваротную логіку: калі old пусты (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 становіцца параметрам text для наступнай SUBSTITUTE. Іншымі словамі, пры кожным наступным выкліку MultiReplace функцыя SUBSTITUTE апрацоўвае не зыходны тэкставы радок, а вывад папярэдняга выкліку.

    Для апрацоўкі ўсіх элементаў у old спіс, мы пачынаем з самай верхняй ячэйкі і выкарыстоўваем функцыю OFFSET для перамяшчэння на 1 радок уніз пры кожным узаемадзеянні:

    OFFSET(old, 1, 0)

    Тое ж самае робіцца для новы спіс:

    OFFSET(new, 1, 0)

    Самае важнае - забяспечыць кропку выхаду , каб рэкурсіўныя выклікі не працягваліся вечна. Гэта робіцца з дапамогай функцыі IF - калі ячэйка old пустая, функцыя вяртае text у яго цяперашняй форме і выходзіць:

    =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))))

    Не забудзьце назваць сваю новую лямбда-функцыю ў дыспетчары імёнаў, як звычайна:

    І ваша новая карыстальніцкая функцыя гатовая да выкарыстання:

    ReplaceChars(text, old_chars, new_chars)

    Дзе:

    • Тэкст - зыходныя радкі
    • Стары - сімвалы для пошуку
    • Новы - сімвалы для замены на

    Каб даць гэта палявое выпрабаванне, давайце зробім тое, што часта выконваецца з імпартаванымі дадзенымі - заменім разумныя двукоссе і разумныя апострафы на прамыя двукоссе і прамыя апострафы.

    Спачатку мы ўводзім разумныя двукоссі і разумны апостраф у D2, прамыя двукоссі і прамы апостраф у E2 , падзяляючы сімвалы прабеламі для лепшай чытальнасці. (Паколькі мы выкарыстоўваем адзін і той жа падзельнік у абедзвюх ячэйках, гэта не паўплывае на вынік - Excel проста заменіць прабел на прабел.)

    Пасля гэтага мы ўводзім гэту формулу ў B2:

    =ReplaceChars(A2:A4, D2, E2)

    І атрымаць менавіта тыя вынікі, якія мы шукалі:

    Таксама можна ўводзіць сімвалы непасрэдна ў формулу. У нашым выпадку не забудзьцеся "прадубліраваць" прамыя двукоссе, як гэта:

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

    Як працуе гэтая формула

    The 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 . Калі ён не пусты, функцыя выклікае сама сябе. Як толькі апошні сімвал быў заменены, працэс ітэрацыі завяршаецца, формула вяртае тэкст яго цяперашні выгляд і выходзіць.

    Заўвага. Паколькі функцыя SUBSTITUTE, якая выкарыстоўваецца ў нашых асноўных формулах, з'яўляецца адчувальнай да рэгістра , абодва Lambda ( MultiReplace і ReplaceChars ) разглядаюць вялікія і малыя літары як розныя сімвалы.

    Масавы пошук і замена з дапамогай UDF

    Калі функцыя LAMBDA недаступная ў вашым Excel, вы можаце напісаць вызначаную карыстальнікам функцыю для некалькіх замен традыцыйным спосабам з дапамогай VBA.

    Каб адрозніць UDF ад функцыі MultiReplace , вызначанай LAMBDA, мы назавём яе па-іншаму, скажам, MassReplace . Код функцыі наступны:

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() 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 у cntInputRows, 1 у cntInputCols) ReDim arSearchReplace(1 у cntFindRows, 1 у 2) 'падрыхтоўка масіва пар пошуку/замены для iFindCurRow = 1 у 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 Для cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Замена ўсіх пар пошуку/замены ў кожнай ячэйцы Для iFindCurRow = 1 Для cntFindRows sTmp = Замяніць(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Наступны arRes (iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End Function

    Як і функцыі, вызначаныя LAMBDA, UDF з'яўляюцца ўсёй працоўнай кнігай . Гэта азначае, што

    Майкл Браўн - адданы энтузіяст тэхналогій, які любіць спрашчэнне складаных працэсаў з дапамогай праграмных інструментаў. Маючы больш чым дзесяцігадовы досвед працы ў індустрыі тэхналогій, ён удасканальваў свае навыкі ў Microsoft Excel і Outlook, а таксама ў Google Sheets і Docs. Блог Майкла прысвечаны таму, каб падзяліцца сваімі ведамі і вопытам з іншымі, даючы простыя ў выкананні парады і падручнікі для павышэння прадукцыйнасці і эфектыўнасці. Незалежна ад таго, з'яўляецеся вы дасведчаным прафесіяналам або пачаткоўцам, блог Майкла прапануе каштоўную інфармацыю і практычныя парады, каб атрымаць максімальную аддачу ад гэтых неабходных праграмных інструментаў.