Excel: cerca i substitueix diversos valors alhora

  • Comparteix Això
Michael Brown

En aquest tutorial, veurem diverses maneres de trobar i substituir diverses paraules, cadenes o caràcters individuals, perquè pugueu triar el que millor s'adapti a les vostres necessitats.

Com acostuma a cercar la gent a Excel? Majoritàriament, mitjançant l'ús de Find & Substitueix la funció, que funciona bé per a valors únics. Però, què passa si teniu desenes o fins i tot centenars d'elements per substituir? Segurament, ningú voldria fer totes aquestes substitucions manualment una per una i després tornar-ho a fer quan les dades canviïn. Afortunadament, hi ha uns quants mètodes més eficaços per fer la substitució massiva a Excel, i investigarem cadascun d'ells amb detall.

    Cerqueu i substituïu diversos valors amb SUBSTITUTE imbricat

    La manera més senzilla de trobar i substituir diverses entrades a Excel és utilitzant la funció SUBSTITUTE.

    La lògica de la fórmula és molt senzilla: escriviu algunes funcions individuals per substituir un valor antic per un de nou. . A continuació, anideu aquestes funcions unes a les altres, de manera que cada SUBSTITUT posterior utilitzi la sortida del SUBSTITUT anterior per buscar el valor següent.

    SUBSTITUTE(SUBSTITUTE( text, text_antic1, text_nou1), text_antic2, text_nou2), text_antic3, text_nou3)

    A la llista d'ubicacions a A2:A10, suposem que voleu substituir els noms de països abreujats (com ara FR , UK i USA ) perLa funció MassReplace només funcionarà al llibre de treball en què heu inserit el codi. Si no esteu segur de com fer-ho correctament, seguiu els passos que es descriuen a Com inserir el codi VBA a Excel.

    Un cop afegit el codi al vostre llibre de treball, la funció apareixerà a la fórmula intellisense, només el nom de la funció, no els arguments! Tot i que, crec que no és gran cosa recordar la sintaxi:

    MassReplace(interval_entrada, rang_trobar, rang_reemplaçar)

    On:

    • Range_entrada - l'interval d'origen on voleu substituir els valors.
    • Find_range : els caràcters, les cadenes o les paraules que cal cercar.
    • Replace_range : els caràcters, les cadenes, o paraules per substituir.

    A Excel 365, a causa de la compatibilitat amb matrius dinàmiques, funciona com una fórmula normal, que només s'ha d'introduir a la cel·la superior (B2):

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

    A Excel predinàmic, funciona com una fórmula de matriu CSE d'estil antic: seleccioneu tot l'interval d'origen (B2:B10), escriviu el fórmula i premeu les tecles Ctrl + Maj + Enter simultàniament per completar-la.

    Avantatges : una alternativa decent a una funció LAMBDA personalitzada a Excel 2019 , Excel 2016 i versions anteriors

    Inconvenients : el llibre de treball s'ha de desar com a fitxer .xlsm habilitat per a macros

    Substitució massiva a Excel per macro VBA

    Si t'agrada l'automòbil associant tasques habituals amb macros, llavors tupot utilitzar el codi VBA següent per trobar i substituir diversos valors en un rang.

    Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Reprendre Següent Set SourceRng = Application.InputBox( "Dades d'origen: " , "Substitució massiva" , Application.Selection.Address, Tipus :=8) Err.Clear If Not SourceRng is Nothing Then Set ReplaceRng = Application.InputBox( "Substitueix rang:" , "Bulk Substitució" , Tipus :=8) Err.Clear si no ReplaceRng no és res, aleshores Application.ScreenUpdating = Fals per a cada Rng a ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, substitució:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End Sub

    Per fer ús de la macro immediatament, podeu descarregar el nostre quadern de treball de mostra que conté el codi. O podeu inserir el codi al vostre propi llibre de treball.

    Com utilitzar la macro

    Abans d'executar la macro, escriviu els valors antics i nous en dues columnes adjacents tal com es mostra a la imatge següent ( C2:D4).

    A continuació, seleccioneu les vostres dades d'origen, premeu Alt + F8 , trieu la macro BulkReplace i feu clic a Executa .

    A mesura que es preselecciona source rage , només cal que verifiqueu la referència i feu clic a D'acord:

    Després, seleccioneu el reemplaça l'interval i feu clic a D'acord:

    Fet!

    Avantatges : configurar una vegada, tornar a utilitzar en qualsevol moment

    Inconvenients : la macro s'ha d'executar amb totes les dadescanvi

    Trobar i substituir múltiples a Excel amb l'eina de subcadenes

    En el primer exemple, vaig esmentar que SUBSTITUTE imbricat és la manera més fàcil de substituir diversos valors a Excel. Admeto que m'he equivocat. La nostra Ultimate Suite facilita encara més les coses!

    Per fer una substitució massiva al vostre full de treball, aneu a la pestanya Dades d'Ablebits i feu clic a Eines de subcadenes > Substitueix les subcadenes .

    Apareixerà el quadre de diàleg Substitueix les subcadenes que us demanarà que definiu l'interval Font i Interval de subcadenes .

    Amb els dos intervals seleccionats, feu clic al botó Substitueix i cerqueu els resultats en una nova columna inserida a la dreta. de les dades originals. Sí, és així de fàcil!

    Consell. Abans de fer clic a Substitueix , cal tenir en compte una cosa important: el quadre Distingeix entre majúscules i minúscules . Assegureu-vos de seleccionar-lo si voleu gestionar les lletres majúscules i minúscules com a caràcters diferents. En aquest exemple, marquem aquesta opció perquè només volem substituir les cadenes en majúscula i deixar intactes les subcadenes com "fr", "uk" o "ak" amb altres paraules.

    Si teniu curiositat per saber quines altres operacions massives es poden realitzar amb cadenes, consulteu altres eines de subcadenes incloses amb la nostra Suite Ultimate. O encara millor, descarregueu la versió d'avaluació a continuació i proveu-la!

    Així és com trobar i substituirmúltiples paraules i caràcters alhora a Excel. Us agraeixo la lectura i espero veure-us al nostre blog la setmana vinent!

    Descàrregues disponibles

    Múltiples cerca i substitució a Excel (fitxer .xlsm)

    Ultimate Suite 14 -day versió totalment funcional (fitxer .exe)

    noms.

    Per fer-ho, introduïu els valors antics a D2:D4 i els nous valors a E2:E4 com es mostra a la captura de pantalla següent. A continuació, poseu la fórmula següent a B2 i premeu Intro:

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

    ... i tindreu totes les substitucions fetes alhora:

    Tingueu en compte que l'enfocament anterior només funciona a Excel 365 que admet matrius dinàmiques.

    En les versions predinàmiques d'Excel 2019, Excel 2016 i anteriors, la fórmula ha de ser escrit per a la cel·la superior (B2) i després copiat a les cel·les següents:

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

    Si us plau, presteu atenció que, en aquest cas, bloquegem els valors de substitució amb referències de cel·les absolutes, de manera que no es desplaçaran en copiar la fórmula cap avall.

    Nota. La funció SUBSTITUTE és distingeix entre majúscules i minúscules , el que significa que hauríeu d'escriure els valors antics ( text_antigu ) amb la mateixa lletra que apareixen a les dades originals.

    Per molt fàcil que pugui ser, aquest mètode té un inconvenient important: quan teniu desenes d'elements per substituir, les funcions imbricades es tornen bastant difícils de gestionar.

    Avantatges : fàcil -per implementar; compatible amb totes les versions d'Excel

    Inconvenients : millor utilitzar-lo per a un nombre limitat de valors de cerca/substitució

    Cerqueu i substituïu diverses entrades amb XLOOKUP

    En una situació en què esteu buscant substituir el contingut sencer de la cel·la , no la seva part, la funció XLOOKUP és útil.

    Anem adigueu que teniu una llista de països a la columna A i que intenteu substituir totes les abreviatures pels noms complets corresponents. Com en l'exemple anterior, comenceu introduint els elements "Cerca" i "Substituïu" en columnes separades (D i E respectivament) i després introduïu aquesta fórmula a B2:

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

    Traduïda de l'idioma Excel a l'idioma humà, això és el que fa la fórmula:

    Cerqueu el valor A2 (lookup_value) a D2:D4 (lookup_array) i torneu una coincidència d'E2:E4 (return_array). Si no es troba, traieu el valor original d'A2.

    Feu doble clic al controlador d'emplenament per copiar la fórmula a les cel·les següents i el resultat no us farà esperar:

    Com que la funció XLOOKUP només està disponible a Excel 365, la fórmula anterior no funcionarà en versions anteriors. Tanmateix, podeu imitar fàcilment aquest comportament amb una combinació de IFERROR o IFNA i VLOOKUP:

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

    Nota. A diferència de SUBSTITUTE, les funcions XLOOKUP i VLOOKUP no distingeixen entre majúscules i minúscules , el que significa que cerquen els valors de cerca ignorant les majúscules i minúscules. Per exemple, la nostra fórmula substituiria tant FR com fr per França .

    Avantatges : ús inusual de les funcions habituals; funciona en totes les versions d'Excel

    Inconvenients : funciona a nivell de cel·la, no pot substituir part del contingut de la cel·la

    Substitució múltiple mitjançant la funció LAMBDA recursiva

    Per a Microsoft365 subscriptors, Excel ofereix una funció especial que permet crear funcions personalitzades mitjançant un llenguatge de fórmules tradicional. Sí, parlo de LAMBDA. La bellesa d'aquest mètode és que pot convertir una fórmula molt llarga i complexa en una de molt compacta i senzilla. A més, us permet crear les vostres pròpies funcions que no existeixen a Excel, cosa que abans només era possible amb VBA.

    Per obtenir informació detallada sobre com crear i utilitzar funcions LAMBDA personalitzades, consulteu aquest tutorial: Com per escriure funcions LAMBDA en Excel. Aquí parlarem d'un parell d'exemples pràctics.

    Avantatges : el resultat és una funció elegant i sorprenentment senzilla d'utilitzar, independentment del nombre de parells de substitució

    Inconvenients : disponible només a Excel 365; específic del llibre de treball i no es pot reutilitzar en diferents llibres de treball

    Exemple 1. Cerca i substitueix diverses paraules o cadenes alhora

    Per substituir diverses paraules o text d'una vegada, hem creat un Funció LAMBDA, anomenada MultiReplace , que pot adoptar una d'aquestes formes:

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

    Tots dos són recursius funcions que es diuen a si mateixes. La diferència només està en com s'estableix el punt de sortida.

    A la primera fórmula, la funció SI comprova si la llista antiga no està en blanc (antiga ""). Si és TRUE, es crida la funció MultiReplace . Si és FAL, la funcióretorna text la seva forma actual i surt.

    La segona fórmula utilitza la lògica inversa: si vell està en blanc (vell=""), retorna text i sortir; en cas contrari, truqueu a MultiReplace .

    La part més complicada s'ha aconseguit! El que us queda per fer és anomenar la funció MultiReplace al Gestor de noms com es mostra a la captura de pantalla següent. Per obtenir les directrius detallades, consulteu Com anomenar una funció LAMBDA.

    Un cop la funció tingui un nom, podeu utilitzar-la com qualsevol altra funció integrada.

    Sigui quina de les dues variacions de fórmula que trieu, des de la perspectiva de l'usuari final, la sintaxi és tan senzilla com aquesta:

    MultiReplace(text, old, new)

    On:

    • Text : les dades d'origen
    • Antic : els valors a trobar
    • Nou : els valors per substituir

    Fent l'exemple anterior una mica més enllà, substituïm no només les abreviatures de país sinó també les abreviatures d'estat. Per a això, escriviu les abreviatures (valors vells ) a la columna D que comencen per D2 i els noms complets (valors nous ) a la columna E que comencen per E2.

    En B2, introduïu la funció MultiReplace:

    =MultiReplace(A2:A10, D2, E2)

    Premeu Enter i gaudiu dels resultats :)

    Com funciona aquesta fórmula

    La pista per entendre la fórmula és entendre la recursivitat. Això pot semblar complicat, però el principi és bastant senzill. Amb cadascuniteració, una funció recursiva resol una petita instància d'un problema més gran. En el nostre cas, la funció MultiReplace recorre els valors antics i nous i, amb cada bucle, realitza una substitució:

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

    Igual que amb les funcions SUBSTITUTE imbricades, el resultat del SUBSTITUTE anterior es converteix en el paràmetre text per al SUBSTITUT següent. En altres paraules, a cada trucada posterior de MultiReplace , la funció SUBSTITUTE no processa la cadena de text original, sinó la sortida de la trucada anterior.

    Per gestionar tots els elements del antiga , comencem amb la cel·la superior i utilitzem la funció OFFSET per moure 1 fila cap avall amb cada interacció:

    OFFSET(old, 1, 0)

    El mateix es fa amb el nova llista:

    OFFSET(new, 1, 0)

    El més important és proporcionar un punt de sortida per evitar que les trucades recursives continuïn per sempre. Es fa amb l'ajuda de la funció SI: si la cel·la antiga està buida, la funció retorna text la seva forma actual i surt:

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

    o

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

    Exemple 2. Substituïu diversos caràcters a l'Excel

    En principi, la funció MultiReplace que s'explica a l'exemple anterior pot també maneja caràcters individuals, sempre que cada caràcter antic i nou s'introdueixin en una cel·la separada, exactament com els noms abreujats i complets de les captures de pantalla anteriors.

    Si preferiu introduir l'anticcaràcters d'una cel·la i els nous caràcters d'una altra cel·la, o escriviu-los directament a la fórmula i, a continuació, podeu crear una altra funció personalitzada, anomenada ReplaceChars , utilitzant una d'aquestes fórmules:

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

    Recordeu posar un nom a la vostra nova funció Lambda al Gestor de noms com de costum:

    I la vostra nova funció personalitzada està preparada per utilitzar-la:

    ReplaceChars(text, old_chars, new_chars)

    On:

    • Text - les cadenes originals
    • Antic : els caràcters que cal cercar
    • Nou : els caràcters que cal substituir per

    Per fer una prova de camp, fem alguna cosa que sovint es fa amb les dades importades: substituïm les cometes intel·ligents i els apòstrofs intel·ligents per cometes rectes i apòstrofs rectes.

    Primer, introduïm les cometes intel·ligents i l'apòstrof intel·ligent a D2, les cometes rectes i l'apòstrof recte a E2 , separant els caràcters amb espais per a una millor llegibilitat. (Com que utilitzem el mateix delimitador a les dues cel·les, no tindrà cap impacte en el resultat; Excel només substituirà un espai per un espai.)

    Després, introduïm aquesta fórmula a B2:

    =ReplaceChars(A2:A4, D2, E2)

    I obteniu exactament els resultats que buscàvem:

    També és possible escriure els caràcters directament a la fórmula. En el nostre cas, només recordeu "duplicar" les cometes rectes com aquesta:

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

    Com funciona aquesta fórmula

    Els ReplaceChars La funció recorre les cadenes old_chars i new_chars i fa una substitució a la vegada a partir del primer caràcter de l'esquerra. Aquesta part la fa la funció SUBSTITUTE:

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

    Amb cada iteració, la funció RIGHT elimina un caràcter de l'esquerra tant dels old_chars com de . new_chars cadenes, de manera que LEFT podria obtenir el següent parell de caràcters per a la substitució:

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

    Abans de cada trucada recursiva, la funció IF avalua la cadena old_chars . Si no està buit, la funció es crida a si mateixa. Tan bon punt s'ha substituït l'últim caràcter, finalitza el procés d'iteració, la fórmula retorna text a la seva forma actual i surt.

    Nota. Com que la funció SUBSTITUTE que s'utilitza a les nostres fórmules principals és distingeix entre majúscules i minúscules , tant Lambda ( MultiReplace com ReplaceChars ) tracten les majúscules i les minúscules com a caràcters diferents.

    Recerca massiva i substitució amb UDF

    En cas que la funció LAMBDA no estigui disponible al vostre Excel, podeu escriure una funció definida per l'usuari per a la substitució múltiple d'una manera tradicional mitjançant VBA.

    Per distingir l'UDF de la funció MultiReplace definida per LAMBDA, li posarem un nom diferent, per exemple MassReplace . El codi de la funció és el següent:

    Funció MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() As Variant 'matriu per emmagatzemar els resultats Dim arSearchReplace(), sTmp As String 'matriu on emmagatzemar els parells de cerca/reemplaçament, cadena temporal Dim iFindCurRow, cntFindRows As Long 'índex de la fila actual de la matriu SearchReplace, comptar de files Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'índex de la fila actual a l'interval font, índex de la columna actual a l'interval font, recompte de files, recompte de columnes cntInputRows = InputRng.Rows.Count = InputRngCols .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'preparant la matriu de parells de cerca/reemplaçament Per a iFindRows cntReplacer (FindRows1) iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Cercant i substituint a l'interval d'origen For iInputCurRow =InputCurRow =Entrada 1 A cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Substituint tots els parells de cerca/reemplaçament de cada cel·la Per a iFindCurRow = 1 Per cntFindRows sTmp = Reemplaçar(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace)(arSearch2)Següent (iInputCurRow, iInputCurCol) = sTmp Següent Següent MassReplace = arRes End Function

    Com les funcions definides per LAMBDA, les UDF són a tot el llibre de treball . Això vol dir el

    Michael Brown és un entusiasta de la tecnologia dedicat amb una passió per simplificar processos complexos mitjançant eines de programari. Amb més d'una dècada d'experiència en la indústria tecnològica, ha perfeccionat les seves habilitats en Microsoft Excel i Outlook, així com en Google Sheets i Docs. El bloc de Michael es dedica a compartir els seus coneixements i experiència amb altres persones, oferint consells i tutorials fàcils de seguir per millorar la productivitat i l'eficiència. Tant si sou un professional experimentat com si sou un principiant, el bloc de Michael ofereix valuoses idees i consells pràctics per treure el màxim profit d'aquestes eines de programari essencials.