Excel: Finn og erstatt flere verdier samtidig

  • Dele Denne
Michael Brown

I denne opplæringen vil vi se på flere måter å finne og erstatte flere ord, strenger eller individuelle tegn, slik at du kan velge den som passer best for dine behov.

Hvordan søker folk vanligvis i Excel? For det meste ved å bruke Finn & Erstatt funksjon, som fungerer fint for enkeltverdier. Men hva om du har titalls eller til og med hundrevis av varer å erstatte? Sikkert, ingen ville ønske å gjøre alle disse erstatningene manuelt én etter én, og så gjøre det på nytt når dataene endres. Heldigvis finnes det noen få mer effektive metoder for masseerstatning i Excel, og vi skal undersøke hver av dem i detalj.

    Finn og erstatt flere verdier med nestet ERSTATTNING

    Den enkleste måten å finne og erstatte flere oppføringer i Excel er ved å bruke ERSTATT-funksjonen.

    Formelens logikk er veldig enkel: du skriver noen få individuelle funksjoner for å erstatte en gammel verdi med en ny. . Og så legger du disse funksjonene inn i hverandre, slik at hver påfølgende ERSTATTNING bruker utdataene fra forrige ERSTATTNING for å se etter den neste verdien.

    ERSTATT(ERSTILTET( tekst, gammel_tekst1, ny_tekst1), gammel_tekst2, ny_tekst2), gammel_tekst3, ny_tekst3)

    I listen over steder i A2:A10, anta at du vil erstatte de forkortede landnavnene (som FR , UK og USA ) med full MassReplace -funksjonen fungerer bare i arbeidsboken du har satt inn koden i. Hvis du ikke er sikker på hvordan du gjør dette riktig, følg trinnene beskrevet i Slik setter du inn VBA-kode i Excel.

    Når koden er lagt til arbeidsboken din, vil funksjonen vises i formelen intellisense - bare funksjonens navn, ikke argumentene! Selv om jeg tror det ikke er så farlig å huske syntaksen:

    MassReplace(input_range, find_range, replace_range)

    Hvor:

    • Input_range - kildeområdet hvor du vil erstatte verdier.
    • Finn_område - tegnene, strengene eller ordene du skal søke etter.
    • Erstatt_område - tegnene, strengene, eller ord å erstatte med.

    I Excel 365, på grunn av støtte for dynamiske arrays, fungerer dette som en vanlig formel, som bare må legges inn i den øverste cellen (B2):

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

    I pre-dynamisk Excel fungerer dette som en gammeldags CSE-matriseformel: du velger hele kildeområdet (B2:B10), skriver inn formel, og trykk Ctrl + Shift + Enter-tastene samtidig for å fullføre den.

    Fordeler : et anstendig alternativ til en tilpasset LAMBDA-funksjon i Excel 2019 , Excel 2016 og tidligere versjoner

    Ulemper : arbeidsboken må lagres som en makroaktivert .xlsm-fil

    Masseerstatt i Excel med VBA-makro

    Hvis du elsker auto pare vanlige oppgaver med makroer, så dukan bruke følgende VBA-kode til å finne og erstatte flere verdier i et område.

    Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range Ved feil Gjenoppta neste Set SourceRng = Application.InputBox( "Kildedata: " , "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 For Every 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

    For å bruke makroen med en gang, kan du laste ned eksempelarbeidsboken vår som inneholder koden. Eller du kan sette inn koden i din egen arbeidsbok.

    Hvordan bruke makroen

    Før du kjører makroen, skriv inn de gamle og nye verdiene i to tilstøtende kolonner som vist i bildet nedenfor ( C2:D4).

    Og deretter, velg kildedataene dine, trykk Alt + F8 , velg BulkReplace -makroen og klikk Kjør .

    Når kilden rage er forhåndsvalgt, må du bare bekrefte referansen og klikke OK:

    Etter det, velg erstatt område , og klikk OK:

    Ferdig!

    Fordeler : oppsett én gang, gjenbruk når som helst

    Ulemper : makroen må kjøres med alle dataendre

    Flere finn og erstatt i Excel med delstrengverktøy

    I det aller første eksemplet nevnte jeg at nestet SUBSTITUTE er den enkleste måten å erstatte flere verdier i Excel. Jeg innrømmer at jeg tok feil. Vår Ultimate Suite gjør ting enda enklere!

    For å gjøre masseerstatting i regnearket ditt, gå over til Ablebits Data -fanen og klikk Substring Tools > Erstatt delstrenger .

    Dialogboksen Erstatt delstrenger vises og ber deg definere Kilde -området og Understrenger -område.

    Med de to områdene valgt, klikk på Erstatt -knappen og finn resultatene i en ny kolonne satt inn til høyre av de opprinnelige dataene. Jepp, så enkelt er det!

    Tips. Før du klikker Erstatt , er det én viktig ting du bør vurdere - boksen Stilling mellom store og små bokstaver . Pass på å velge det hvis du ønsker å håndtere store og små bokstaver som forskjellige tegn. I dette eksemplet krysser vi av for dette alternativet fordi vi bare ønsker å erstatte de store strengene og la understrengene som "fr", "uk" eller "ak" være intakte innenfor andre ord.

    Hvis du er nysgjerrig på å vite hvilke andre bulkoperasjoner som kan utføres på strenger, sjekk ut andre understrengverktøy som følger med vår Ultimate Suite. Eller enda bedre, last ned evalueringsversjonen nedenfor og prøv den!

    Slik finner og erstatter duflere ord og tegn samtidig i Excel. Jeg takker for at du leser og håper å se deg på bloggen vår neste uke!

    Tilgjengelige nedlastinger

    Flere finn og erstatt i Excel (.xlsm-fil)

    Ultimate Suite 14 -day fullt funksjonell versjon (.exe-fil)

    navn.

    For å få det gjort, skriv inn de gamle verdiene i D2:D4 og de nye verdiene i E2:E4 som vist på skjermbildet nedenfor. Og deretter, legg inn formelen nedenfor i B2 og trykk Enter:

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

    ...og du vil ha alle erstatningene gjort på en gang:

    Vær oppmerksom på at tilnærmingen ovenfor bare fungerer i Excel 365 som støtter dynamiske matriser.

    I pre-dynamiske versjoner av Excel 2019, Excel 2016 og tidligere, må formelen være skrevet for den øverste cellen (B2), og deretter kopiert til cellene nedenfor:

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

    Vær oppmerksom på at i dette tilfellet låser vi erstatningsverdiene med absolutte cellereferanser, så de vil ikke skifte når du kopierer formelen ned.

    Merk. ERSTATT-funksjonen er forbokstavsensitiv , noe som betyr at du bør skrive inn de gamle verdiene ( gammel_tekst ) med samme store og små bokstaver som de vises i de originale dataene.

    Så enkelt som det muligens kan være, har denne metoden en betydelig ulempe - når du har dusinvis av elementer å erstatte, blir nestede funksjoner ganske vanskelige å administrere.

    Fordeler : enkelt -å implementere; støttes i alle Excel-versjoner

    Ulemper : best å brukes for et begrenset antall finn/erstatt verdier

    Søk og erstatt flere oppføringer med XLOOKUP

    I situasjoner hvor du ønsker å erstatte hele celleinnholdet , ikke dens del, kommer XLOOKUP-funksjonen til nytte.

    La osssi at du har en liste over land i kolonne A og har som mål å erstatte alle forkortelsene med de tilsvarende fulle navnene. Som i forrige eksempel starter du med å skrive inn "Finn" og "Erstatt"-elementene i separate kolonner (henholdsvis D og E), og deretter skriver du inn denne formelen i B2:

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

    Oversatt fra Excel-språket til det menneskelige språket, her er hva formelen gjør:

    Søk etter A2-verdien (lookup_value) i D2:D4 (lookup_array) og returner et samsvar fra E2:E4 (return_array). Hvis du ikke finner den, trekk den opprinnelige verdien fra A2.

    Dobbeltklikk på fyllhåndtaket for å få formelen kopiert til cellene nedenfor, og resultatet lar deg ikke vente:

    Siden XLOOKUP-funksjonen kun er tilgjengelig i Excel 365, vil formelen ovenfor ikke fungere i tidligere versjoner. Du kan imidlertid enkelt etterligne denne oppførselen med en kombinasjon av IFERROR eller IFNA og VLOOKUP:

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

    Merk. I motsetning til SUBSTITUTE, er funksjonene XLOOKUP og VLOOKUP ikke store og små , noe som betyr at de søker etter oppslagsverdiene og ignorerer store og små bokstaver. Formelen vår ville for eksempel erstatte både FR og fr med Frankrike .

    Fordeler : uvanlig bruk av vanlige funksjoner; fungerer i alle Excel-versjoner

    Ulemper : fungerer på cellenivå, kan ikke erstatte deler av celleinnholdet

    Flere erstatning ved bruk av rekursiv LAMBDA-funksjon

    For Microsoft365 abonnenter, Excel gir en spesiell funksjon som gjør det mulig å lage tilpassede funksjoner ved hjelp av et tradisjonelt formelspråk. Jepp, jeg snakker om LAMBDA. Det fine med denne metoden er at den kan konvertere en veldig lang og kompleks formel til en veldig kompakt og enkel. Dessuten lar den deg lage dine egne funksjoner som ikke eksisterer i Excel, noe som før bare var mulig med VBA.

    For detaljert informasjon om å lage og bruke tilpassede LAMBDA-funksjoner, sjekk ut denne veiledningen: Hvordan å skrive LAMBDA-funksjoner i Excel. Her vil vi diskutere et par praktiske eksempler.

    Fordeler : Resultatet er en elegant og utrolig enkel å bruke funksjon, uansett antall erstatningspar

    Ulemper : kun tilgjengelig i Excel 365; arbeidsbokspesifikk og kan ikke gjenbrukes på tvers av forskjellige arbeidsbøker

    Eksempel 1. Søk og erstatt flere ord/strenger samtidig

    For å erstatte flere ord eller tekst på én gang, har vi laget en egendefinert LAMBDA-funksjonen, kalt MultiReplace , som kan ha en av disse formene:

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

    Eller

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

    Begge er rekursive funksjoner som kaller seg selv. Forskjellen ligger kun i hvordan utgangspunktet etableres.

    I den første formelen sjekker HVIS-funksjonen om gammel -listen ikke er tom (gammel"). Hvis TRUE, kalles MultiReplace -funksjonen. Hvis FALSE, funksjonenreturnerer tekst dens nåværende form og avslutter.

    Den andre formelen bruker omvendt logikk: hvis gammel er blank (gammel=""), returnerer du tekst og avslutt; ellers ring MultiReplace .

    Den vanskeligste delen er fullført! Det som gjenstår for deg å gjøre er å navngi MultiReplace -funksjonen i navnebehandlingen som vist på skjermbildet nedenfor. For detaljerte retningslinjer, se Hvordan navngi en LAMBDA-funksjon.

    Når funksjonen har fått et navn, kan du bruke den akkurat som alle andre innebygde funksjoner.

    Uansett hvilken av de to formelvariantene du velger, fra sluttbrukerperspektivet, er syntaksen så enkel som denne:

    MultiReplace(tekst, gammel, ny)

    Hvor:

    • Tekst - kildedataene
    • Gamle - verdiene å finne
    • Ny - verdiene som skal erstattes med

    For å ta det forrige eksemplet litt lenger, la oss erstatte ikke bare landsforkortelsene, men også statens forkortelser. For dette, skriv inn forkortelsene ( gamle -verdier) i kolonne D som begynner på D2 og de fulle navnene ( nye -verdier) i kolonne E som begynner med E2.

    I B2, skriv inn MultiReplace-funksjonen:

    =MultiReplace(A2:A10, D2, E2)

    Trykk Enter og nyt resultatene :)

    Hvordan denne formelen fungerer

    Titretet til å forstå formelen er å forstå rekursjon. Dette høres kanskje komplisert ut, men prinsippet er ganske enkelt. Med hveriterasjon, en rekursiv funksjon løser en liten forekomst av et større problem. I vårt tilfelle går MultiReplace -funksjonen gjennom de gamle og nye verdiene og utfører én erstatning med hver sløyfe:

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

    Som med nestede SUBSTITUTE-funksjoner, blir resultatet av forrige SUBSTITUTE parameteren tekst for neste ERSTATT. Med andre ord, ved hvert påfølgende kall til MultiReplace , behandler ERSTATT-funksjonen ikke den opprinnelige tekststrengen, men utdata fra forrige kall.

    For å håndtere alle elementene på gammel -listen starter vi med den øverste cellen, og bruker OFFSET-funksjonen for å flytte 1 rad ned med hver interaksjon:

    OFFSET(old, 1, 0)

    Det samme gjøres for ny liste:

    OFFSET(new, 1, 0)

    Det avgjørende er å gi et utgangspunkt for å forhindre at rekursive anrop fortsetter for alltid. Det gjøres ved hjelp av HVIS-funksjonen - hvis gamle -cellen er tom, returnerer funksjonen tekst dens nåværende form og avsluttes:

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

    eller

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

    Eksempel 2. Erstatt flere tegn i Excel

    I prinsippet kan MultiReplace -funksjonen diskutert i forrige eksempel håndtere individuelle tegn også, forutsatt at hvert gammelt og nytt tegn legges inn i en separat celle, akkurat som de forkortede og fulle navnene i skjermbildene ovenfor.

    Hvis du heller vil legge inn det gamletegn i en celle og de nye tegnene i en annen celle, eller skriv dem direkte i formelen, så kan du lage en annen egendefinert funksjon, kalt Erstatt tegn , ved å bruke en av disse formlene:

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

    Eller

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

    Husk å navngi din nye Lambda-funksjon i navnebehandlingen som vanlig:

    Og den nye egendefinerte funksjonen din er klar til bruk:

    ReplaceChars(text, old_chars, new_chars)

    Hvor:

    • Tekst - de originale strengene
    • Gamle - tegnene å søke etter
    • Ny - tegnene som skal erstattes med

    For å gi det en felttest, la oss gjøre noe som ofte utføres på importerte data - bytt ut smarte anførselstegn og smarte apostrof med rette anførselstegn og rette apostrof.

    Først legger vi inn smarte anførselstegn og smart apostrof i D2, rette anførselstegn og rette apostrof i E2 , skille tegnene med mellomrom for bedre lesbarhet. (Ettersom vi bruker samme skilletegn i begge cellene, vil det ikke ha noen innvirkning på resultatet - Excel vil bare erstatte et mellomrom med et mellomrom.)

    Deretter legger vi inn denne formelen i B2:

    =ReplaceChars(A2:A4, D2, E2)

    Og få akkurat de resultatene vi var ute etter:

    Det er også mulig å skrive inn tegnene direkte i formelen. I vårt tilfelle, bare husk å "duplisere" de rette anførselstegnene slik:

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

    Hvordan denne formelen fungerer

    The ReplaceChars funksjonen går gjennom gamle_tegn - og nye_tegn -strengene og gjør én erstatning om gangen fra det første tegnet til venstre. Denne delen gjøres av ERSTATT-funksjonen:

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

    Med hver iterasjon fjerner HØYRE-funksjonen ett tegn fra venstre for både gamle_tegnene og new_chars -strenger, slik at LEFT kunne hente neste tegnpar for substitusjon:

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

    Før hvert rekursivt kall evaluerer HVIS-funksjonen old_chars -strengen . Hvis den ikke er tom, kaller funksjonen opp seg selv. Så snart det siste tegnet er erstattet, avsluttes iterasjonsprosessen, formelen returnerer tekst dens nåværende form og avsluttes.

    Merk. Fordi ERSTATT-funksjonen som brukes i våre kjerneformler er sensitive mellom store og små bokstaver , behandler både lambdaer ( MultiReplace og ReplaceChars ) store og små bokstaver som forskjellige tegn.

    Massefinn og erstatt med UDF

    Hvis LAMBDA-funksjonen ikke er tilgjengelig i Excel, kan du skrive en brukerdefinert funksjon for multi-erstatt på en tradisjonell måte ved hjelp av VBA.

    For å skille UDF fra den LAMBDA-definerte MultiReplace -funksjonen, skal vi gi den et annet navn, si MassReplace . Koden til funksjonen er som følger:

    Funksjon MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () DimarRes() As Variant 'array for å lagre resultatene Dim arSearchReplace(), sTmp As String 'array hvor finne/erstatt-parene skal lagres, midlertidig streng Dim iFindCurRow, cntFindRows As Long 'indeks for gjeldende rad i SearchReplace-matrisen, telling av rader Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols As Long 'indeks for gjeldende rad i kildeområdet, indeks for gjeldende kolonne i kildeområdet, antall rader, antall kolonner cntInputRows = InputRng.Rows.Count InputRngs = InputRng. .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'forbereder arrayen av find/replace 1FindReplacenC iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Verdi arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Verdi Neste 'Søker og erstatter i kildeområdet For iInput1RCurCurn For iInput1RCurC For i 1 Til cntInputCols sTm p = InputRng.Cells(iInputCurRow, iInputCurCol). Verdi 'Erstatter alle finn/erstatt-par i hver celle For iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1,FindCurRow, 1,FindRow)Replace(i,FindRows) (iInputCurRow, iInputCurCol) = sTmp Neste Neste MassReplace = arRes Sluttfunksjon

    Som LAMBDA-definerte funksjoner, er UDF-er arbeidsbokomfattende . Det betyr at

    Michael Brown er en dedikert teknologientusiast med en lidenskap for å forenkle komplekse prosesser ved hjelp av programvareverktøy. Med mer enn ti års erfaring i teknologibransjen, har han forbedret ferdighetene sine i Microsoft Excel og Outlook, samt Google Sheets og Docs. Michaels blogg er dedikert til å dele sin kunnskap og ekspertise med andre, og gir enkle å følge tips og veiledninger for å forbedre produktivitet og effektivitet. Enten du er en erfaren profesjonell eller nybegynner, tilbyr Michaels blogg verdifull innsikt og praktiske råd for å få mest mulig ut av disse viktige programvareverktøyene.