Talaan ng nilalaman
Sa tutorial na ito, titingnan namin ang ilang paraan para maghanap at palitan ang maraming salita, string, o indibidwal na character, para mapili mo ang pinakaangkop sa iyong mga pangangailangan.
Paano karaniwang naghahanap ang mga tao sa Excel? Kadalasan, sa pamamagitan ng paggamit ng Find & Palitan ang tampok, na gumagana nang maayos para sa mga solong halaga. Ngunit paano kung mayroon kang sampu o kahit daan-daang mga item na papalitan? Tiyak, walang gustong gawin ang lahat ng mga kapalit na iyon nang manu-mano nang paisa-isa, at pagkatapos ay gawin itong muli kapag nagbago ang data. Sa kabutihang-palad, may ilang mas epektibong paraan para gumawa ng mass replace sa Excel, at sisiyasatin namin ang bawat isa sa kanila nang detalyado.
Hanapin at palitan ang maraming value ng nested SUBSTITUTE
Ang pinakamadaling paraan upang mahanap at palitan ang maramihang mga entry sa Excel ay sa pamamagitan ng paggamit ng SUBSTITUTE function.
Ang lohika ng formula ay napakasimple: sumulat ka ng ilang indibidwal na function upang palitan ang isang lumang value ng bago. . At pagkatapos, ilalagay mo ang mga function na iyon sa isa't isa, upang ang bawat kasunod na SUBSTITUTE ay gumagamit ng output ng nakaraang SUBSTITUTE upang hanapin ang susunod na halaga.
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( text, old_text1, new_text1), old_text2, new_text2), old_text3, new_text3)Sa listahan ng mga lokasyon sa A2:A10, ipagpalagay na gusto mong palitan ang mga pinaikling pangalan ng bansa (tulad ng FR , UK at USA ) ng buoAng function na MassReplace ay gagana lamang sa workbook kung saan mo ipinasok ang code. Kung hindi ka sigurado kung paano ito gagawin nang tama, mangyaring sundin ang mga hakbang na inilarawan sa Paano magpasok ng VBA code sa Excel.
Kapag naidagdag na ang code sa iyong workbook, lalabas ang function sa formula na intellisense - lamang ang pangalan ng function, hindi ang mga argumento! Gayunpaman, naniniwala akong hindi malaking bagay na tandaan ang syntax:
MassReplace(input_range, find_range, replace_range)Where:
- Input_range - ang source range kung saan gusto mong palitan ang mga value.
- Find_range - ang mga character, string, o salita na hahanapin.
- Replace_range - ang mga character, string, o mga salitang papalitan.
Sa Excel 365, dahil sa suporta para sa mga dynamic na array, ito ay gumagana bilang isang normal na formula, na kailangan lang ilagay sa tuktok na cell (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
Sa pre-dynamic na Excel, ito ay gumagana bilang isang lumang istilong CSE array formula: pipiliin mo ang buong source range (B2:B10), i-type ang formula, at pindutin ang Ctrl + Shift + Enter key nang sabay-sabay upang makumpleto ito.
Mga Bentahe : isang disenteng alternatibo sa isang custom na function ng LAMBDA sa Excel 2019 , Excel 2016 at mga mas naunang bersyon
Mga Sagabal : ang workbook ay dapat na i-save bilang isang macro-enabled na .xlsm file
Palitan nang maramihan sa Excel ng VBA macro
Kung mahilig ka sa sasakyan pagsasama ng mga karaniwang gawain sa mga macro, pagkatapos ay ikawmaaaring gamitin ang sumusunod na VBA code upang mahanap at palitan ang maraming value sa isang range.
Sub BulkReplace() Dim Rng Bilang Range, SourceRng Bilang Range, ReplaceRng Bilang Range Sa Error Ipagpatuloy ang Susunod na Set SourceRng = Application.InputBox( "Source data: " , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear Kung Hindi SourceRng is Nothing Then Set ReplaceRng = Application.InputBox( "Palitan ang range:" , "Bulk Replace" , Type :=8) Err.Clear Kung Hindi Ang ReplaceRng ay Wala Kung Aplikasyon.ScreenUpdating = False Para sa Bawat Rng Sa ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubUpang magamit kaagad ang macro, maaari mong i-download ang aming sample workbook na naglalaman ng code. O maaari mong ipasok ang code sa iyong sariling workbook.
Paano gamitin ang macro
Bago patakbuhin ang macro, i-type ang luma at bagong mga halaga sa dalawang magkatabing column tulad ng ipinapakita sa larawan sa ibaba ( C2:D4).
At pagkatapos, piliin ang iyong source data, pindutin ang Alt + F8 , piliin ang macro na BulkReplace , at i-click ang Run .
Habang preselect ang source rage , i-verify lang ang reference, at i-click ang OK:
Pagkatapos noon, piliin ang palitan ang hanay , at i-click ang OK:
Tapos na!
Mga Bentahe : pag-setup nang isang beses, muling gamitin anumang oras
Mga sagabal : kailangang patakbuhin ang macro sa bawat databaguhin
Multiple find and replace in Excel with Substring tool
Sa pinakaunang halimbawa, binanggit ko na ang nested SUBSTITUTE ay ang pinakamadaling paraan upang palitan ang maraming value sa Excel. Inaamin kong nagkamali ako. Pinapadali ng aming Ultimate Suite ang mga bagay!
Upang magsagawa ng mass replace sa iyong worksheet, pumunta sa tab na Ablebits Data at i-click ang Substring Tools > Palitan ang Substrings .
Lalabas ang dialog box na Palitan ang Substrings na humihiling sa iyo na tukuyin ang hanay ng Source at Substrings range.
Sa dalawang hanay na napili, i-click ang Palitan na button at hanapin ang mga resulta sa isang bagong column na ipinasok sa kanan ng orihinal na data. Oo, ganoon lang kadali!
Tip. Bago i-click ang Palitan , may isang mahalagang bagay na dapat mong isaalang-alang - ang kahon na Case-sensitive . Siguraduhing piliin ito kung nais mong hawakan ang malaki at maliit na titik bilang magkaibang mga character. Sa halimbawang ito, nilagyan namin ng check ang opsyong ito dahil gusto lang naming palitan ang mga naka-capitalize na string at iwanan ang mga substring tulad ng "fr", "uk", o "ak" sa loob ng ibang mga salita.
Kung gusto mong malaman kung ano ang iba pang maramihang operasyon na maaaring gawin sa mga string, tingnan ang iba pang Substring Tools na kasama sa aming Ultimate Suite. O mas mabuti, i-download ang bersyon ng pagsusuri sa ibaba at subukan ito!
Ganyan hanapin at palitanmaraming salita at character nang sabay-sabay sa Excel. Salamat sa pagbabasa at umaasa akong makita ka sa aming blog sa susunod na linggo!
Mga available na download
Multiple find and replace in Excel (.xlsm file)
Ultimate Suite 14 -day fully-functional na bersyon (.exe file)
mga pangalan.Upang magawa ito, ilagay ang mga lumang value sa D2:D4 at ang mga bagong value sa E2:E4 tulad ng ipinapakita sa screenshot sa ibaba. At pagkatapos, ilagay ang formula sa ibaba sa B2 at pindutin ang Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
…at gagawin mo ang lahat ng mga kapalit nang sabay-sabay:
Pakitandaan, gumagana lang ang diskarte sa itaas sa Excel 365 na sumusuporta sa mga dynamic na array.
Sa mga pre-dynamic na bersyon ng Excel 2019, Excel 2016 at mas maaga, ang formula ay kailangang isinulat para sa pinakamataas na cell (B2), at pagkatapos ay kinopya sa mga cell sa ibaba:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Pakipansin na, sa kasong ito, ni-lock namin ang mga kapalit na value na may ganap na mga sanggunian sa cell, kaya hindi sila lilipat kapag kinokopya ang formula pababa.
Tandaan. Ang function na SUBSTITUTE ay case-sensitive , ibig sabihin ay dapat mong i-type ang mga lumang value ( old_text ) sa parehong letter case na lumalabas sa orihinal na data.
Sa madaling paraan, ang paraang ito ay may malaking disbentaha - kapag mayroon kang dose-dosenang mga item na papalitan, ang mga nested function ay magiging mahirap pangasiwaan.
Mga Bentahe : madali -ipatupad; suportado sa lahat ng bersyon ng Excel
Mga Sagabal : pinakamahusay na gamitin para sa limitadong bilang ng paghahanap/palitan ng mga halaga
Maghanap at palitan ang maramihang mga entry ng XLOOKUP
Sa sitwasyon kung kailan mo gustong palitan ang buong cell content , hindi ang bahagi nito, ang XLOOKUP function ay madaling gamitin.
Let'ssabihin na mayroon kang listahan ng mga bansa sa column A at layuning palitan ang lahat ng mga pagdadaglat ng kaukulang buong pangalan. Tulad ng sa nakaraang halimbawa, magsisimula ka sa pag-input ng mga item na "Hanapin" at "Palitan" sa magkahiwalay na column (D at E ayon sa pagkakabanggit), at pagkatapos ay ilagay ang formula na ito sa B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Isinalin mula sa Excel na wika sa wika ng tao, narito ang ginagawa ng formula:
Hanapin ang A2 value (lookup_value) sa D2:D4 (lookup_array) at ibalik ang isang tugma mula sa E2:E4 (return_array). Kung hindi makita, hilahin ang orihinal na value mula sa A2.
I-double click ang fill handle upang makuha ang formula na makopya sa mga cell sa ibaba, at hindi ka na hihintayin ng resulta:
Dahil available lang ang XLOOKUP function sa Excel 365, hindi gagana ang formula sa itaas sa mga naunang bersyon. Gayunpaman, madali mong gayahin ang gawi na ito sa kumbinasyon ng IFERROR o IFNA at VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Tandaan. Hindi tulad ng SUBSTITUTE, ang XLOOKUP at VLOOKUP function ay hindi case-sensitive , ibig sabihin, hinahanap nila ang mga value ng lookup na binabalewala ang letter case. Halimbawa, papalitan ng aming formula ang parehong FR at fr ng France .
Mga Bentahe : hindi pangkaraniwang paggamit ng mga karaniwang function; gumagana sa lahat ng bersyon ng Excel
Mga Sagabal : gumagana sa antas ng cell, hindi maaaring palitan ang bahagi ng mga nilalaman ng cell
Maramihang palitan gamit ang recursive LAMBDA function
Para sa Microsoft365 subscriber, ang Excel ay nagbibigay ng isang espesyal na function na nagbibigay-daan sa paglikha ng mga custom na function gamit ang isang tradisyonal na wika ng formula. Oo, ang tinutukoy ko ay ang LAMBDA. Ang kagandahan ng pamamaraang ito ay maaari nitong i-convert ang isang napakahaba at kumplikadong formula sa isang napaka-compact at simple. Bukod dito, hinahayaan ka nitong lumikha ng sarili mong mga function na wala sa Excel, isang bagay na dati ay posible lamang sa VBA.
Para sa detalyadong impormasyon tungkol sa paggawa at paggamit ng mga custom na function ng LAMBDA, pakitingnan ang tutorial na ito: Paano upang magsulat ng mga function ng LAMBDA sa Excel. Dito, tatalakayin natin ang ilang praktikal na halimbawa.
Mga Bentahe : ang resulta ay isang elegante at kamangha-manghang simpleng gamitin na function, kahit gaano karami ang mga kapalit na pares
Mga sagabal : available lang sa Excel 365; partikular sa workbook at hindi magagamit muli sa iba't ibang workbook
Halimbawa 1. Maghanap at magpalit ng maraming salita / string nang sabay-sabay
Upang palitan ang maraming salita o text nang sabay-sabay, gumawa kami ng custom LAMBDA function, pinangalanang MultiReplace , na maaaring tumagal ng isa sa mga form na ito:
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
O
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
Parehong recursive mga function na tumatawag sa kanilang sarili. Ang pagkakaiba ay nasa kung paano lamang naitatag ang exit point.
Sa unang formula, sinusuri ng function na IF kung ang listahan ng lumang ay hindi blangko (luma""). Kung TRUE, ang function na MultiReplace ay tinatawag. Kung FALSE, ang functionibinabalik ang text sa kasalukuyan nitong anyo at lalabas.
Ginagamit ng pangalawang formula ang reverse logic: kung blangko ang luma (old=""), pagkatapos ay ibalik ang text at lumabas; kung hindi, tawagan ang MultiReplace .
Natapos na ang pinakamahirap na bahagi! Ang natitira para sa iyo na gawin ay pangalanan ang MultiReplace function sa Name Manager tulad ng ipinapakita sa screenshot sa ibaba. Para sa mga detalyadong alituntunin, pakitingnan ang Paano pangalanan ang isang function ng LAMBDA.
Kapag nakakuha ng pangalan ang function, maaari mo itong gamitin tulad ng anumang iba pang inbuilt na function.
Alinman sa dalawang variation ng formula ang pipiliin mo, mula sa pananaw ng end-user, ang syntax ay kasing simple nito:
MultiReplace(teksto, luma, bago)Saan:
- Text - ang source data
- Luma - ang mga value na hahanapin
- Bago - ang mga value na papalitan ng
Pagkuha ng naunang halimbawa, palitan natin hindi lamang ang mga pagdadaglat ng bansa kundi pati na rin ang mga pagdadaglat ng estado. Para dito, i-type ang mga abbreviation ( old values) sa column D simula sa D2 at ang buong pangalan ( new values) sa column E simula sa E2.
In B2, ipasok ang MultiReplace function:
=MultiReplace(A2:A10, D2, E2)
Pindutin ang Enter at tamasahin ang mga resulta :)
Paano gumagana ang formula na ito
Ang pahiwatig sa pag-unawa sa formula ay ang pag-unawa sa recursion. Ito ay maaaring mukhang kumplikado, ngunit ang prinsipyo ay medyo simple. Sa bawat isapag-ulit, nalulutas ng recursive function ang isang maliit na pagkakataon ng mas malaking problema. Sa aming kaso, ang function na MultiReplace ay umiikot sa luma at bagong mga value at, sa bawat loop, nagsasagawa ng isang kapalit:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Tulad ng mga nested SUBSTITUTE function, ang resulta ng nakaraang SUBSTITUTE ay nagiging text na parameter para sa susunod na SUBSTITUTE. Sa madaling salita, sa bawat kasunod na tawag ng MultiReplace , hindi pinoproseso ng SUBSTITUTE function ang orihinal na text string, ngunit ang output ng nakaraang tawag.
Upang pangasiwaan ang lahat ng item sa luma na listahan, magsisimula tayo sa pinakatuktok na cell, at ginagamit ang OFFSET function para ilipat ang 1 row pababa sa bawat pakikipag-ugnayan:
OFFSET(old, 1, 0)
Ginagawa din ito para sa bagong listahan:
OFFSET(new, 1, 0)
Ang mahalagang bagay ay magbigay ng point of exit upang maiwasang magpatuloy ang mga recursive na tawag nang tuluyan. Ginagawa ito sa tulong ng function na IF - kung walang laman ang lumang cell, ibabalik ng function ang text ang kasalukuyang anyo nito at lalabas:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
o
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
Halimbawa 2. Palitan ang maraming character sa Excel
Sa prinsipyo, ang function na MultiReplace na tinalakay sa nakaraang halimbawa ay maaaring pangasiwaan din ang mga indibidwal na character, sa kondisyon na ang bawat luma at bagong character ay inilagay sa isang hiwalay na cell, eksakto tulad ng mga pinaikli at buong pangalan sa mga screenshot sa itaas.
Kung mas gusto mong ilagay ang lumamga character sa isang cell at ang mga bagong character sa isa pang cell, o i-type ang mga ito nang direkta sa formula, pagkatapos ay maaari kang lumikha ng isa pang custom na function, na pinangalanang ReplaceChars , sa pamamagitan ng paggamit ng isa sa mga formula na ito:
=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))
O
=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))))
Tandaang pangalanan ang iyong bagong Lambda function sa Name Manager gaya ng nakasanayan:
At handa nang gamitin ang iyong bagong custom na function:
ReplaceChars(text, old_chars, new_chars)Saan:
- Text - ang orihinal na string
- Luma - ang mga character na hahanapin
- Bago - ang mga character na papalitan ng
Upang bigyan ito ng field test, gawin natin ang isang bagay na madalas na ginagawa sa imported na data - palitan ang mga matalinong quote at matalinong kudlit ng mga tuwid na quote at tuwid na kudlit.
Una, inilalagay namin ang matalinong mga panipi at matalinong kudlit sa D2, mga tuwid na panipi at tuwid na kudlit sa E2 , na naghihiwalay sa mga character na may mga puwang para sa mas madaling mabasa. (Habang ginagamit namin ang parehong delimiter sa parehong mga cell, hindi ito magkakaroon ng anumang epekto sa resulta - Papalitan lang ng Excel ng espasyo ang isang puwang.)
Pagkatapos nito, ipinasok namin ang formula na ito sa B2:
=ReplaceChars(A2:A4, D2, E2)
At makuha ang eksaktong resulta na hinahanap namin:
Posible ring direktang i-type ang mga character sa formula. Sa aming kaso, tandaan lamang na "i-duplicate" ang mga straight quotes na tulad nito:
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
Paano gumagana ang formula na ito
Ang ReplaceChars umiikot ang function sa old_chars at new_chars na mga string at gumagawa ng isang kapalit sa isang pagkakataon simula sa unang character sa kaliwa. Ang bahaging ito ay ginagawa ng SUBSTITUTE function:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Sa bawat pag-ulit, inaalis ng RIGHT function ang isang character mula sa kaliwa ng parehong old_chars at new_chars string, para makuha ng LEFT ang susunod na pares ng mga character para sa pagpapalit:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Bago ang bawat recursive na tawag, sinusuri ng IF function ang old_chars string . Kung hindi ito walang laman, tatawagin ng function ang sarili nito. Sa sandaling mapalitan ang huling character, matapos ang proseso ng pag-ulit, ibabalik ng formula ang text sa kasalukuyan nitong anyo at lalabas.
Tandaan. Dahil ang SUBSTITUTE function na ginagamit sa aming mga core formula ay case-sensitive , parehong ituturing ng Lambdas ( MultiReplace at ReplaceChars ) ang mga uppercase at lowercase na titik bilang magkaibang mga character.
Mass find and replace with UDF
Kung sakaling ang LAMBDA function ay hindi available sa iyong Excel, maaari kang magsulat ng user-defined function para sa multi-replace sa tradisyonal na paraan gamit ang VBA.
Upang makilala ang UDF mula sa function na MultiReplace na tinukoy ng LAMBDA, iba ang pangalan namin dito, sabihin ang MassReplace . Ang code ng function ay ang mga sumusunod:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) Bilang Variant () DimarRes() Bilang Variant 'array para mag-imbak ng mga resulta Dim arSearchReplace(), sTmp Bilang String 'array kung saan iimbak ang find/replace na mga pares, pansamantalang string Dim iFindCurRow, cntFindRows Bilang Long 'index ng kasalukuyang row ng SearchReplace array, bilangin ng mga row Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols Habang 'index ng kasalukuyang row sa source range, index ng kasalukuyang column sa source range, bilang ng mga row, bilang ng mga column 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) 'inihahanda ang hanay ng find/replace pairs Para sa iFindCurRow To(cSearchReplace = 1 iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Naghahanap at nagpapalitan sa source range Para sa iInputCurRow = 1CurRow = 1CurRow. 1 Upang cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol) (iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End FunctionTulad ng mga function na tinukoy ng LAMBDA, ang mga UDF ay workbook-wide . Ibig sabihin ang