Excel: găsiți și înlocuiți mai multe valori simultan

  • Imparte Asta
Michael Brown

În acest tutorial, vom examina mai multe modalități de a găsi și înlocui mai multe cuvinte, șiruri sau caractere individuale, astfel încât să puteți alege cea care se potrivește cel mai bine nevoilor dumneavoastră.

Cum caută de obicei oamenii în Excel? În mare parte, folosind funcția Find & Replace, care funcționează bine pentru valori unice. Dar dacă aveți zeci sau chiar sute de elemente de înlocuit? Cu siguranță, nimeni nu ar vrea să facă toate aceste înlocuiri manual, una câte una, și apoi să o facă din nou atunci când datele se schimbă. Din fericire, există câteva metode mai eficiente pentru a face înlocuiri în masă în Excel șivom analiza fiecare dintre ele în detaliu.

    Găsiți și înlocuiți mai multe valori cu SUBSTITUTE imbricate

    Cel mai simplu mod de a găsi și de a înlocui mai multe intrări în Excel este prin utilizarea funcției SUBSTITUTE.

    Logica formulei este foarte simplă: se scriu câteva funcții individuale pentru a înlocui o valoare veche cu una nouă și apoi se înglobează aceste funcții una în alta, astfel încât fiecare SUBSTITUTE ulterioară utilizează rezultatul SUBSTITUTEi anterioare pentru a căuta următoarea valoare.

    ÎNLOCUITOR(ÎNLOCUITOR(ÎNLOCUITOR(ÎNLOCUITOR( text , old_text1 , nou_text1 ), old_text2 , nou_text2 ), old_text3 , nou_text3 )

    În lista de locații din A2:A10, să presupunem că doriți să înlocuiți numele prescurtate ale țărilor (cum ar fi FR , MAREA BRITANIE și SUA ) cu nume și prenume.

    Pentru a face acest lucru, introduceți valorile vechi în D2:D4 și valorile noi în E2:E4, așa cum se arată în captura de ecran de mai jos. Apoi, introduceți formula de mai jos în B2 și apăsați Enter:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)

    ...și veți avea toate înlocuirile făcute deodată:

    Vă rugăm să rețineți că abordarea de mai sus funcționează numai în Excel 365 care acceptă matricele dinamice.

    În versiunile pre-dinamice ale Excel 2019, Excel 2016 și versiunile anterioare, formula trebuie scrisă pentru celula cea mai de sus (B2) și apoi copiată în celulele de mai jos:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)

    Vă rugăm să fiți atenți la faptul că, în acest caz, blocăm valorile de înlocuire cu referințe absolute de celulă, astfel încât acestea să nu se deplaseze la copierea formulei în jos.

    Notă. Funcția SUBSTITUTE este Sensibil la majuscule și minuscule , ceea ce înseamnă că trebuie să introduceți vechile valori ( old_text ) în aceeași majusculă ca și în datele originale.

    Oricât de simplă ar fi, această metodă are un dezavantaj semnificativ - atunci când aveți zeci de elemente de înlocuit, funcțiile imbricate devin destul de dificil de gestionat.

    Avantaje : ușor de implementat; acceptat în toate versiunile Excel

    Dezavantaje : se utilizează cel mai bine pentru un număr limitat de valori de căutare/înlocuire

    Căutați și înlocuiți mai multe intrări cu XLOOKUP

    În situația în care doriți să înlocuiți întregul conținut al celulei , nu partea sa, funcția XLOOKUP este utilă.

    Să presupunem că aveți o listă de țări în coloana A și că doriți să înlocuiți toate abrevierile cu numele complete corespunzătoare. La fel ca în exemplul anterior, începeți prin a introduce elementele "Find" și "Replace" în coloane separate (D și, respectiv, E), iar apoi introduceți această formulă în B2:

    =XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)

    Tradus din limbajul Excel în limbaj uman, iată ce face formula:

    Căutați valoarea A2 (lookup_value) în D2:D4 (lookup_array) și returnează o potrivire din E2:E4 (return_array). Dacă nu este găsită, extrageți valoarea originală din A2.

    Dați dublu clic pe mânerul de umplere pentru a obține formula copiată în celulele de mai jos, iar rezultatul nu vă va face să așteptați:

    Deoarece funcția XLOOKUP este disponibilă numai în Excel 365, formula de mai sus nu va funcționa în versiunile anterioare. Cu toate acestea, puteți imita cu ușurință acest comportament cu o combinație de IFERROR sau IFNA și VLOOKUP:

    =IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)

    Notă. Spre deosebire de SUBSTITUTE, funcțiile XLOOKUP și VLOOKUP sunt nu ține cont de majuscule și minuscule , ceea ce înseamnă că acestea caută valorile de căutare ignorând majusculele literelor. De exemplu, formula noastră ar înlocui atât FR și fr cu Franța .

    Avantaje : utilizarea neobișnuită a funcțiilor obișnuite; funcționează în toate versiunile Excel

    Dezavantaje : funcționează la nivel de celulă, nu poate înlocui o parte din conținutul celulei

    Înlocuire multiplă utilizând funcția recursivă LAMBDA

    Pentru abonații Microsoft 365, Excel pune la dispoziție o funcție specială care permite crearea de funcții personalizate folosind un limbaj tradițional de formulare. Da, vorbesc despre LAMBDA. Frumusețea acestei metode este că poate converti o formulă foarte lungă și complexă într-una foarte compactă și simplă. Mai mult, vă permite să vă creați propriile funcții care nu există în Excel, lucru care înainte eraposibil doar cu VBA.

    Pentru informații detaliate despre crearea și utilizarea funcțiilor LAMBDA personalizate, vă rugăm să consultați acest tutorial: Cum să scrieți funcții LAMBDA în Excel. Aici, vom discuta câteva exemple practice.

    Avantaje : rezultatul este o funcție elegantă și uimitor de simplu de utilizat, indiferent de numărul de perechi de înlocuire.

    Dezavantaje : disponibile numai în Excel 365; specifice unui registru de lucru și nu pot fi reutilizate în diferite registre de lucru

    Exemplul 1. Căutați și înlocuiți mai multe cuvinte / șiruri de caractere simultan

    Pentru a înlocui mai multe cuvinte sau texte dintr-o singură dată, am creat o funcție LAMBDA personalizată, numită MultiReplace , care poate lua una dintre aceste forme:

    =LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text)), text))

    Sau

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))

    Ambele sunt funcții recursive care se apelează singure. Diferența constă doar în modul în care este stabilit punctul de ieșire.

    În prima formulă, funcția IF verifică dacă vechi nu este goală (old """). Dacă este adevărat, lista MultiReplace În cazul în care este FALSE, funcția returnează text forma sa actuală și iese.

    A doua formulă folosește logica inversă: dacă vechi este goală (old=""), atunci se returnează text și ieșiți; în caz contrar, apelați MultiReplace .

    Partea cea mai complicată este îndeplinită! Ceea ce vă rămâne de făcut este să numiți MultiReplace în Managerul de nume, așa cum se arată în captura de ecran de mai jos. Pentru instrucțiuni detaliate, consultați Cum să denumiți o funcție LAMBDA.

    Odată ce funcția primește un nume, o puteți utiliza la fel ca orice altă funcție încorporată.

    Oricare dintre cele două variante de formule ați alege, din perspectiva utilizatorului final, sintaxa este la fel de simplă ca aceasta:

    MultiReplace(text, vechi, nou)

    Unde:

    • Text - datele sursă
    • Vechi - valorile de găsit
    • Nou - valorile care trebuie înlocuite cu

    Mergând puțin mai departe cu exemplul anterior, să înlocuim nu numai abrevierile de țară, ci și cele de stat. Pentru aceasta, tastați abrevierile ( vechi ) în coloana D începând cu D2 și denumirile complete ( nou valorile) în coloana E începând cu E2.

    În B2, introduceți funcția MultiReplace:

    =MultiReplace(A2:A10, D2, E2)

    Apăsați Enter și bucurați-vă de rezultate :)

    Cum funcționează această formulă

    Indiciul pentru a înțelege formula este înțelegerea recursivității. Poate părea complicat, dar principiul este destul de simplu. Cu fiecare iterație, o funcție recursivă rezolvă o mică instanță a unei probleme mai mari. În cazul nostru, funcția MultiReplace trece în buclă prin valorile vechi și noi și, la fiecare buclă, efectuează o înlocuire:

    MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))

    Ca și în cazul funcțiilor SUBSTITUTE imbricate, rezultatul funcției SUBSTITUTE anterioare devine funcția text pentru următoarea SUBSTITUTE. Cu alte cuvinte, la fiecare apel ulterior al MultiReplace , funcția SUBSTITUTE nu procesează șirul de text original, ci rezultatul apelului anterior.

    Pentru a gestiona toate elementele de pe lista vechi începem cu celula cea mai de sus și folosim funcția OFFSET pentru a ne deplasa cu un rând în jos la fiecare interacțiune:

    OFFSET(old, 1, 0)

    Același lucru se face pentru nou lista:

    OFFSET(nou, 1, 0)

    Esențial este să oferiți un punctul de ieșire pentru a preveni ca apelurile recursive să continue la nesfârșit. Acest lucru se face cu ajutorul funcției IF - dacă se aplică funcția vechi este goală, funcția returnează text forma sa actuală și iese din ea:

    =LAMBDA(text, old, new, IF(old="", text, MultiReplace(...))))

    sau

    =LAMBDA(text, old, new, IF(old"", MultiReplace(...), text))

    Exemplul 2. Înlocuiți mai multe caractere în Excel

    În principiu, se poate aplica MultiReplace discutată în exemplul anterior poate gestiona și caractere individuale, cu condiția ca fiecare caracter vechi și nou să fie introdus într-o celulă separată, exact ca în cazul numelor abreviate și complete din capturile de ecran de mai sus.

    Dacă preferați să introduceți caracterele vechi într-o celulă și caracterele noi în altă celulă sau să le introduceți direct în formulă, puteți crea o altă funcție personalizată, numită ReplaceChars , utilizând una dintre aceste formule:

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

    Sau

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

    Nu uitați să denumiți noua funcție Lambda în Managerul de nume, ca de obicei:

    Și noua dvs. funcție personalizată este gata de utilizare:

    ReplaceChars(text, old_chars, new_chars)

    Unde:

    • Text - corzile originale
    • Vechi - caracterele care trebuie căutate
    • Nou - caracterele care trebuie înlocuite cu

    Pentru a face un test pe teren, haideți să facem ceva ce se face adesea în cazul datelor importate - să înlocuim ghilimelele inteligente și apostrofele inteligente cu ghilimele drepte și apostrofuri drepte.

    Mai întâi, introducem ghilimelele inteligente și apostroful inteligent în D2, ghilimelele drepte și apostroful drept în E2, separând caracterele cu spații pentru o mai bună lizibilitate. (Deoarece folosim același delimitator în ambele celule, nu va avea niciun impact asupra rezultatului - Excel va înlocui un spațiu cu un spațiu).

    După aceea, introducem această formulă în B2:

    =ReplaceChars(A2:A4, D2, E2)

    Și să obținem exact rezultatele pe care le căutam:

    De asemenea, este posibil să introduceți caracterele direct în formulă. În cazul nostru, nu uitați să "duplicați" ghilimelele drepte astfel:

    =ReplaceChars(A2:A4, "" " " '"", """ "" "" '"")

    Cum funcționează această formulă

    The ReplaceChars parcurge ciclurile prin old_chars și noi_caractere șiruri de caractere și face câte o înlocuire pe rând, începând cu primul caracter din stânga. Această parte este realizată de funcția SUBSTITUTE:

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

    La fiecare iterație, funcția RIGHT elimină câte un caracter din stânga atât a literelor old_chars și noi_caractere astfel încât LEFT să poată prelua următoarea pereche de caractere pentru înlocuire:

    ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)))

    Înainte de fiecare apel recursiv, funcția IF evaluează old_chars Dacă acesta nu este gol, funcția se apelează singură. Imediat ce ultimul caracter a fost înlocuit, procesul de iterație se termină, iar formula returnează text forma sa actuală și iese din ea.

    Notă. Deoarece funcția SUBSTITUTE utilizată în formulele noastre de bază este Sensibil la majuscule și minuscule , atât Lambdas ( MultiReplace și ReplaceChars ) tratează literele majuscule și minuscule ca fiind caractere diferite.

    Găsire și înlocuire în masă cu UDF

    În cazul în care funcția LAMBDA nu este disponibilă în Excel, puteți scrie o funcție definită de utilizator pentru înlocuire multiplă într-un mod tradițional, utilizând VBA.

    Pentru a face distincția între UDF și LAMBDA-defined MultiReplace o vom numi diferit, să zicem MassReplace Codul funcției este următorul:

    Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'array pentru a stoca rezultatele Dim arSearchReplace(), sTmp As String 'array unde se stochează perechile de căutare/înlocuire, șir temporar Dim iFindCurRow, cntFindRows As Long 'indexul rândului curent al array-ului SearchReplace, numărul de rânduri Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'index of the current row in the source range, index of the current column in the source range, count of rows, count of columns 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) 'pregătirea matricei de perechi de căutare/înlocuire ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Căutarea și înlocuirea în intervalul sursă For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Înlocuirea tuturor perechilor de căutare/înlocuire din fiecare celulăFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End Function

    La fel ca și funcțiile definite de LAMBDA, UDF-urile sunt la nivel de registru de lucru Asta înseamnă că... MassReplace va funcționa numai în registrul de lucru în care ați inserat codul. Dacă nu sunteți sigur cum să faceți acest lucru corect, urmați pașii descriși în Cum să inserați cod VBA în Excel.

    Odată ce codul este adăugat în registrul de lucru, funcția va apărea în Intellisense-ul formulei - doar numele funcției, nu și argumentele! Totuși, cred că nu este mare lucru să rețineți sintaxa:

    MassReplace(interval_introducere, interval_găsire, interval_înlocuire)

    Unde:

    • Intervalul de intrare - intervalul sursă în care doriți să înlocuiți valorile.
    • Găsește_gama - caracterele, șirurile sau cuvintele care trebuie căutate.
    • Înlocuire_range - caracterele, șirurile de caractere sau cuvintele cu care se înlocuiește.

    În Excel 365, datorită suportului pentru array-uri dinamice, aceasta funcționează ca o formulă normală, care trebuie introdusă doar în celula de sus (B2):

    =MassReplace(A2:A10, D2:D4, E2:E4)

    În Excel pre-dinamic, acest lucru funcționează ca o formulă de matrice CSE de tip vechi: selectați întregul interval sursă (B2:B10), introduceți formula și apăsați simultan tastele Ctrl + Shift + Enter pentru a o completa.

    Avantaje : o alternativă decentă la o funcție LAMBDA personalizată în Excel 2019, Excel 2016 și versiunile anterioare

    Dezavantaje : registrul de lucru trebuie să fie salvat ca fișier .xlsm compatibil cu macrocomenzi.

    Înlocuirea în masă în Excel cu macro VBA

    Dacă vă place să automatizați sarcini comune cu ajutorul macrourilor, atunci puteți utiliza următorul cod VBA pentru a găsi și înlocui mai multe valori într-un interval.

    Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Source data:" , "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 ThenApplication.ScreenUpdating = False For Each 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 If End Sub

    Pentru a utiliza imediat macroul, puteți descărca exemplul nostru de registru de lucru care conține codul sau puteți insera codul în propriul registru de lucru.

    Cum se utilizează macroul

    Înainte de a rula macroul, introduceți valorile vechi și noi în două coloane adiacente, așa cum se arată în imaginea de mai jos (C2:D4).

    Apoi, selectați datele sursă, apăsați Alt + F8 , alegeți opțiunea BulkReplace macro, apoi faceți clic pe Rulați .

    Pe măsură ce sursa furiei este preselectată, verificați doar referința și faceți clic pe OK:

    După aceea, selectați înlocuiți gama , apoi faceți clic pe OK:

    Gata!

    Avantaje : configurați o dată, reutilizați oricând

    Dezavantaje : macroul trebuie să fie rulat la fiecare modificare a datelor

    Găsiți și înlocuiți mai multe în Excel cu instrumentul Substring

    În primul exemplu, am menționat că SUBSTITUTE imbricate este cel mai simplu mod de a înlocui mai multe valori în Excel. Recunosc că m-am înșelat. Suita noastră Ultimate Suite face lucrurile și mai simple!

    Pentru a face înlocuirea în masă în foaia de calcul, mergeți la fereastra Date Ablebits și faceți clic pe Instrumente pentru subșiruri > Înlocuirea subșirurilor .

    The Înlocuirea subșirurilor Va apărea o casetă de dialog care vă va cere să definiți Sursa gama și Subșiruri gamă.

    Cu cele două intervale selectate, faceți clic pe butonul Înlocuiți și găsiți rezultatele într-o nouă coloană inserată în dreapta datelor originale. Da, este atât de simplu!

    Sfat. înainte de a face clic pe Înlocuiți , există un lucru important pe care trebuie să-l luați în considerare - Sensibil la majuscule și minuscule Nu uitați să o selectați dacă doriți să tratați literele majuscule și minuscule ca fiind caractere diferite. În acest exemplu, bifăm această opțiune deoarece dorim să înlocuim doar șirurile de caractere cu majuscule și să lăsăm intacte subșirurile precum "fr", "uk" sau "ak" din alte cuvinte.

    Dacă sunteți curioși să aflați ce alte operații în bloc pot fi efectuate pe șiruri de caractere, consultați alte instrumente Substring Tools incluse în suita noastră Ultimate Suite. Sau, chiar mai bine, descărcați versiunea de evaluare de mai jos și încercați-o!

    Iată cum să găsiți și să înlocuiți mai multe cuvinte și caractere deodată în Excel. Vă mulțumesc pentru lectură și sper să ne vedem pe blog săptămâna viitoare!

    Descărcări disponibile

    Găsire și înlocuire multiplă în Excel (fișier .xlsm)

    Ultimate Suite 14-day full-functional version (fișier .exe)

    Michael Brown este un pasionat de tehnologie dedicat, cu o pasiune pentru simplificarea proceselor complexe folosind instrumente software. Cu mai mult de un deceniu de experiență în industria tehnologiei, el și-a perfecționat abilitățile în Microsoft Excel și Outlook, precum și în Google Sheets și Docs. Blogul lui Michael este dedicat împărtășirii cunoștințelor și experienței sale cu alții, oferind sfaturi și tutoriale ușor de urmat pentru îmbunătățirea productivității și eficienței. Indiferent dacă sunteți un profesionist experimentat sau un începător, blogul lui Michael oferă informații valoroase și sfaturi practice pentru a profita la maximum de aceste instrumente software esențiale.