Sadržaj
U ovom vodiču ćemo pogledati nekoliko načina za pronalaženje i zamjenu više riječi, nizova ili pojedinačnih znakova, tako da možete odabrati onaj koji najbolje odgovara vašim potrebama.
Kako ljudi obično pretražuju u Excelu? Uglavnom, korištenjem Find & Značajka zamjene, koja dobro funkcionira za pojedinačne vrijednosti. Ali što ako morate zamijeniti desetke ili čak stotine stavki? Zasigurno nitko ne bi želio ručno izvršiti sve te zamjene jednu po jednu, a zatim sve ponoviti kada se podaci promijene. Srećom, postoji nekoliko učinkovitijih metoda za masovnu zamjenu u Excelu, a mi ćemo detaljno istražiti svaku od njih.
Pronađite i zamijenite više vrijednosti ugniježđenim SUBSTITUTE
Najlakši način za pronalaženje i zamjenu višestrukih unosa u Excelu je pomoću funkcije SUBSTITUTE.
Logika formule je vrlo jednostavna: napišete nekoliko pojedinačnih funkcija da zamijenite staru vrijednost novom. . Zatim ugniježdite te funkcije jednu u drugu, tako da svaki sljedeći SUBSTITUTE koristi izlaz prethodnog SUBSTITUTE za traženje sljedeće vrijednosti.
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( text, stari_tekst1, novi_tekst1), stari_tekst2, novi_tekst2), stari_tekst3, novi_tekst3)Na popisu lokacija u A2:A10, pretpostavimo da želite zamijeniti skraćene nazive zemalja (kao što su FR , UK i USA ) punimFunkcija MassReplace radit će samo u radnoj knjizi u koju ste umetnuli kod. Ako niste sigurni kako to učiniti ispravno, slijedite korake opisane u Kako umetnuti VBA kod u Excel.
Nakon što se kod doda u vašu radnu knjigu, funkcija će se pojaviti u formuli intellisense - samo naziv funkcije, a ne argumenti! Ipak, vjerujem da nije velika stvar zapamtiti sintaksu:
MassReplace(input_range, find_range, replace_range)Where:
- Input_range - izvorni raspon gdje želite zamijeniti vrijednosti.
- Find_range - znakovi, nizovi ili riječi za pretraživanje.
- Replace_range - znakovi, nizovi, ili riječi za zamjenu.
U programu Excel 365, zbog podrške za dinamičke nizove, ovo funkcionira kao normalna formula koju je potrebno unijeti samo u gornju ćeliju (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
U preddinamičkom Excelu ovo funkcionira kao stara formula CSE polja: odaberete cijeli izvorni raspon (B2:B10), upišete formulu i istovremeno pritisnite tipke Ctrl + Shift + Enter da biste je dovršili.
Prednosti : pristojna alternativa prilagođenoj funkciji LAMBDA u programu Excel 2019 , Excel 2016 i starije verzije
Nedostatci : radna knjiga mora biti spremljena kao .xlsm datoteka s omogućenim makronaredbama
Skupna zamjena u Excelu s VBA makronaredbom
Ako volite auto spajanje uobičajenih zadataka s makronaredbama, zatim vimože koristiti sljedeći VBA kod za pronalaženje i zamjenu višestrukih vrijednosti u rasponu.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Izvorni podaci: " , "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 Za svaki Rng u ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End SubDa biste odmah mogli koristiti makronaredbu, možete preuzeti našu oglednu radnu knjigu koja sadrži kod. Ili možete umetnuti kôd u vlastitu radnu knjigu.
Kako koristiti makronaredbu
Prije pokretanja makronaredbe, upišite stare i nove vrijednosti u dva susjedna stupca kao što je prikazano na slici ispod ( C2:D4).
A zatim odaberite svoje izvorne podatke, pritisnite Alt + F8 , odaberite makronaredbu BulkReplace i kliknite Run .
Kako je izvorni bijes unaprijed odabran, samo potvrdite referencu i kliknite U redu:
Nakon toga, odaberite raspon zamjene i kliknite OK:
Gotovo!
Prednosti : postavite jednom, ponovno upotrijebite bilo kada
Nedostaci : makro se mora pokrenuti sa svakim podacimapromjena
Višestruko pronalaženje i zamjena u Excelu s Substring alatom
U prvom primjeru, spomenuo sam da je ugniježđeni SUBSTITUTE najlakši način za zamjenu više vrijednosti u Excelu. Priznajem da sam pogriješio. Naš Ultimate Suite čini stvari još lakšim!
Da biste izvršili masovnu zamjenu u svom radnom listu, prijeđite na karticu Ablebits Data i kliknite Substring Tools > Zamijeni podnizove .
Pojavit će se dijaloški okvir Zamijeni podnizove tražeći da definirate raspon Izvor i <1 Raspon>podnizova .
S dva odabrana raspona kliknite gumb Zamijeni i pronađite rezultate u novom stupcu umetnutom s desne strane izvornih podataka. Da, tako je jednostavno!
Savjet. Prije nego što kliknete Zamijeni , morate uzeti u obzir jednu važnu stvar - okvir Razlikuje velika i mala slova . Obavezno ga odaberite ako želite rukovati velikim i malim slovima kao različitim znakovima. U ovom smo primjeru označili ovu opciju jer želimo samo zamijeniti nizove s velikim slovima i ostaviti netaknute podnizove poput "fr", "uk" ili "ak" unutar drugih riječi.
Ako vas zanima koje se druge skupne operacije mogu izvesti na nizovima, provjerite druge alate za podstring uključene u naš Ultimate Suite. Ili još bolje, preuzmite probnu verziju u nastavku i isprobajte je!
Evo kako pronaći i zamijenitiviše riječi i znakova odjednom u Excelu. Zahvaljujem vam na čitanju i nadam se da se vidimo na našem blogu sljedeći tjedan!
Dostupna preuzimanja
Višestruko pronalaženje i zamjena u Excelu (.xlsm datoteka)
Ultimate Suite 14 -dnevna potpuno funkcionalna verzija (.exe datoteka)
imena.Da biste to učinili, unesite stare vrijednosti u D2:D4 i nove vrijednosti u E2:E4 kao što je prikazano na slici ispod. Zatim stavite donju formulu u B2 i pritisnite Enter:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
…i imat ćete sve zamjene odjednom:
Napominjemo da gornji pristup funkcionira samo u Excelu 365 koji podržava dinamičke nizove.
U preddinamičkim verzijama Excela 2019, Excela 2016 i starijih, formula mora biti napisano za najvišu ćeliju (B2), a zatim kopirano u donje ćelije:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Molimo obratite pozornost da, u ovom slučaju, zaključavamo zamjenske vrijednosti s apsolutnim referencama ćelija, tako da neće se pomaknuti prilikom kopiranja formule.
Napomena. Funkcija SUBSTITUTE je osjetljiva na velika i mala slova , što znači da biste trebali upisati stare vrijednosti ( stari_tekst ) istim velikim slovima kao što se pojavljuju u izvornim podacima.
Koliko god lako mogla biti, ova metoda ima značajan nedostatak - kada imate desetke stavki koje treba zamijeniti, ugniježđenim funkcijama postaje prilično teško upravljati.
Prednosti : lako -provoditi; podržano u svim verzijama programa Excel
Nedostaci : najbolje se koristiti za ograničeni broj vrijednosti pronađi/zamijeni
Traži i zamijeni višestruke unose s XLOOKUP-om
U situaciji kada želite zamijeniti cijeli sadržaj ćelije , a ne njegov dio, funkcija XLOOKUP dobro dolazi.
Hajdemorecimo da imate popis zemalja u stupcu A i pokušajte zamijeniti sve kratice odgovarajućim punim nazivima. Kao u prethodnom primjeru, počinjete s unosom stavki "Pronađi" i "Zamijeni" u zasebne stupce (D i E redom), a zatim unesite ovu formulu u B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Prevedeno s jezika programa Excel na ljudski jezik, evo što formula radi:
Tražite vrijednost A2 (lookup_value) u D2:D4 (lookup_array) i vratite podudaranje iz E2:E4 (return_array). Ako nije pronađena, povucite izvornu vrijednost iz A2.
Dvaput kliknite na ručicu za popunjavanje da biste dobili formulu kopiranu u donje ćelije, a rezultat vas neće ostaviti čekati:
Budući da je funkcija XLOOKUP dostupna samo u programu Excel 365, gornja formula neće raditi u ranijim verzijama. Međutim, možete lako oponašati ovo ponašanje kombinacijom IFERROR ili IFNA i VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Napomena. Za razliku od SUBSTITUTE, funkcije XLOOKUP i VLOOKUP nisu osjetljive na velika i mala slova , što znači da traže tražene vrijednosti zanemarujući velika slova. Na primjer, naša bi formula zamijenila FR i fr s Francuska .
Prednosti : neobična uporaba uobičajenih funkcija; radi u svim verzijama programa Excel
Nedostaci : radi na razini ćelije, ne može zamijeniti dio sadržaja ćelije
Višestruka zamjena pomoću rekurzivne LAMBDA funkcije
Za Microsoft365 pretplatnika, Excel nudi posebnu funkciju koja omogućuje stvaranje prilagođenih funkcija pomoću tradicionalnog jezika formula. Da, govorim o LAMBDA-i. Ljepota ove metode je u tome što može pretvoriti vrlo dugačku i složenu formulu u vrlo kompaktnu i jednostavnu. Štoviše, omogućuje vam stvaranje vlastitih funkcija koje ne postoje u Excelu, nešto što je prije bilo moguće samo uz VBA.
Za detaljne informacije o stvaranju i korištenju prilagođenih LAMBDA funkcija, pogledajte ovaj vodič: Kako za pisanje LAMBDA funkcija u Excelu. Ovdje ćemo raspravljati o nekoliko praktičnih primjera.
Prednosti : rezultat je elegantna i nevjerojatno jednostavna funkcija za korištenje, bez obzira na broj zamjenskih parova
Nedostaci : dostupno samo u programu Excel 365; specifičan za radnu knjigu i ne može se ponovno koristiti u različitim radnim knjigama
Primjer 1. Pretražujte i zamijenite više riječi / nizova odjednom
Da biste zamijenili više riječi ili teksta odjednom, stvorili smo prilagođeni LAMBDA funkcija, pod nazivom MultiReplace , koja može imati jedan od ovih oblika:
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
Ili
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
Obje su rekurzivne funkcije koje same sebe pozivaju. Razlika je samo u tome kako se uspostavlja izlazna točka.
U prvoj formuli funkcija IF provjerava nije li popis old prazan (old""). Ako je TRUE, poziva se funkcija MultiReplace . Ako je FALSE, funkcijavraća tekst u njegov trenutni oblik i izlazi.
Druga formula koristi obrnutu logiku: ako je old prazno (old=""), vraća tekst i izlaz; inače pozovite MultiReplace .
Najteži dio je postignut! Ono što vam preostaje je da imenujete funkciju MultiReplace u Name Manageru kao što je prikazano na slici ispod. Za detaljne smjernice pogledajte Kako imenovati funkciju LAMBDA.
Kada funkcija dobije naziv, možete je koristiti kao bilo koju drugu ugrađenu funkciju.
Koju god od dvije varijacije formule odaberete, iz perspektive krajnjeg korisnika, sintaksa je jednostavna kao ova:
MultiReplace(text, old, new)Gdje:
- Tekst - izvorni podaci
- Staro - vrijednosti koje treba pronaći
- Novo - vrijednosti koje treba zamijeniti
Idemo malo dalje od prethodnog primjera, zamijenimo ne samo kratice zemalja, već i kratice država. U tu svrhu upišite kratice ( stare vrijednosti) u stupac D počevši od D2 i puna imena ( nove vrijednosti) u stupac E počevši od E2.
U B2, unesite funkciju MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Pritisnite Enter i uživajte u rezultatima :)
Kako funkcionira ova formula
Ključ za razumijevanje formule je razumijevanje rekurzije. Ovo može zvučati komplicirano, ali princip je prilično jednostavan. Sa svakimiteracija, rekurzivna funkcija rješava jednu malu instancu većeg problema. U našem slučaju, funkcija MultiReplace prolazi kroz stare i nove vrijednosti i sa svakom petljom izvodi jednu zamjenu:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Kao i kod ugniježđenih funkcija SUBSTITUTE, rezultat prethodnog SUBSTITUTE postaje parametar text za sljedeći SUBSTITUTE. Drugim riječima, pri svakom sljedećem pozivu MultiReplace , funkcija SUBSTITUTE ne obrađuje izvorni tekstualni niz, već izlaz prethodnog poziva.
Za rukovanje svim stavkama na stari popis, počinjemo s najgornjom ćelijom i koristimo funkciju OFFSET za pomicanje 1 reda prema dolje sa svakom interakcijom:
OFFSET(old, 1, 0)
Isto se radi za novi popis:
OFFSET(new, 1, 0)
Ključna stvar je osigurati točku izlaza kako bi se spriječilo da se rekurzivni pozivi nastavljaju zauvijek. To se radi uz pomoć funkcije IF - ako je ćelija old prazna, funkcija vraća tekst u sadašnjem obliku i izlazi:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
ili
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
Primjer 2. Zamjena više znakova u Excelu
U načelu, funkcija MultiReplace o kojoj se govori u prethodnom primjeru može rukuje i pojedinačnim znakovima, pod uvjetom da su svaki stari i novi znak uneseni u zasebnu ćeliju, točno kao skraćena i puna imena na gornjim snimkama zaslona.
Ako biste radije unijeli stariznakova u jednoj ćeliji i novih znakova u drugoj ćeliji ili ih upišite izravno u formulu, tada možete stvoriti drugu prilagođenu funkciju pod nazivom ReplaceChars pomoću jedne od ovih formula:
=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))
Ili
=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))))
Ne zaboravite imenovati svoju novu Lambda funkciju u Name Manageru kao i obično:
I vaša nova prilagođena funkcija je spremna za upotrebu:
ReplaceChars(text, old_chars, new_chars)Gdje:
- Tekst - originalni nizovi
- Staro - znakovi za traženje
- Novo - znakovi za zamjenu s
Da biste ga testirali na terenu, učinimo nešto što se često izvodi na uvezenim podacima - zamijenimo pametne navodnike i pametne apostrofe ravnim navodnicima i ravnim apostrofima.
Prvo unosimo pametne navodnike i pametne apostrofe u D2, ravne navodnike i ravne apostrofe u E2 , odvajajući znakove razmacima radi bolje čitljivosti. (Budući da koristimo isti graničnik u obje ćelije, to neće imati nikakvog utjecaja na rezultat - Excel će samo zamijeniti razmak razmakom.)
Nakon toga, ovu formulu unosimo u B2:
=ReplaceChars(A2:A4, D2, E2)
I dobili smo točno rezultate koje smo tražili:
Također je moguće upisati znakove izravno u formulu. U našem slučaju, samo ne zaboravite "duplicirati" ravne navodnike ovako:
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
Kako ova formula funkcionira
The ReplaceChars funkcija kruži kroz nizove old_chars i new_chars i vrši jednu po jednu zamjenu počevši od prvog znaka s lijeve strane. Ovaj dio obavlja funkcija SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Sa svakim ponavljanjem, funkcija RIGHT uklanja jedan znak s lijeve strane oba old_chars i nizovi new_chars , tako da LEFT može dohvatiti sljedeći par znakova za zamjenu:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Prije svakog rekurzivnog poziva, funkcija IF procjenjuje niz old_chars . Ako nije prazno, funkcija poziva samu sebe. Čim se zadnji znak zamijeni, proces iteracije završava, formula vraća tekst u njegov sadašnji oblik i izlazi.
Napomena. Budući da je funkcija SUBSTITUTE koja se koristi u našim osnovnim formulama osjetljiva na velika i mala slova , obje Lambde ( MultiReplace i ReplaceChars ) tretiraju velika i mala slova kao različite znakove.
Masovno pronalaženje i zamjena s UDF-om
U slučaju da funkcija LAMBDA nije dostupna u vašem Excelu, možete napisati korisnički definiranu funkciju za višestruku zamjenu na tradicionalan način koristeći VBA.
Da bismo razlikovali UDF od funkcije MultiReplace definirane LAMBDA, nazvat ćemo je drugačije, recimo MassReplace . Kod funkcije je sljedeći:
Funkcija MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() As Variant 'niz za pohranjivanje rezultata Dim arSearchReplace(), sTmp As String 'niz gdje se pohranjuju parovi traženja/zamjene, privremeni niz Dim iFindCurRow, cntFindRows As Long 'indeks trenutnog retka niza SearchReplace, broj redaka Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'indeks trenutnog retka u izvornom rasponu, indeks trenutnog stupca u izvornom rasponu, broj redaka, broj stupaca cntInputRows = InputRng.Rows.Count cntInputCols = InputRng .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 u cntInputRows, 1 u cntInputCols) ReDim arSearchReplace(1 u cntFindRows, 1 u 2) 'pripremanje niza parova traženja/zamjene za iFindCurRow = 1 u cntFindRows arSearchReplace( iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Traženje i zamjena u izvornom rasponu For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 Za cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Zamjena svih parova traženja/zamjene u svakoj ćeliji Za iFindCurRow = 1 do cntFindRows sTmp = Zamijeni(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Sljedeći arRes (iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End FunctionKao LAMBDA-definirane funkcije, UDF-ovi su širi za radnu knjigu . To znači da