Змест
У гэтым уроку мы разгледзім некалькі спосабаў пошуку і замены некалькіх слоў, радкоў або асобных сімвалаў, каб вы маглі выбраць той, які найбольш адпавядае вашым патрэбам.
Як людзі звычайна шукаюць у 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 з'яўляюцца ўсёй працоўнай кнігай . Гэта азначае, што