Indholdsfortegnelse
I denne vejledning vil vi se på flere måder at finde og erstatte flere ord, strenge eller enkelte tegn på, så du kan vælge den måde, der passer bedst til dine behov.
Hvordan søger folk normalt i Excel? For det meste ved at bruge funktionen Find & Replace, som fungerer fint til enkelte værdier. Men hvad nu, hvis du har ti eller endda hundredvis af elementer, der skal udskiftes? Ingen vil vel have lyst til at foretage alle disse udskiftninger manuelt én for én og derefter gøre det hele igen, når dataene ændres. Heldigvis er der et par mere effektive metoder til at foretage masseudskiftning i Excel, ogVi vil undersøge hver af dem i detaljer.
Find og erstat flere værdier med indlejret SUBSTITUTE
Den nemmeste måde at finde og erstatte flere poster i Excel på er ved at bruge funktionen SUBSTITUTE.
Logikken i formlen er meget enkel: Du skriver et par individuelle funktioner til at erstatte en gammel værdi med en ny. Og så integrerer du disse funktioner i hinanden, så hver efterfølgende SUBSTITUTE bruger resultatet af den foregående SUBSTITUTE til at finde den næste værdi.
ERSTATNING(ERSTATNING(ERSTATNING(ERSTATNING( tekst , old_text1 , new_text1 ), gammel_tekst2 , new_text2 ), old_text3 , new_text3 )Antag, at du i listen over lokaliteter i A2:A10 vil erstatte de forkortede landenavne (f.eks. FR , UK og USA ) med fulde navne.
Indtast de gamle værdier i D2:D4 og de nye værdier i E2:E4 som vist i skærmbilledet nedenfor. Indsæt derefter nedenstående formel i B2 og tryk på Enter:
=SUBSTITUT(SUBSTITUT(SUBSTITUT(SUBSTITUT(A2:A10, D2, E2), D3, E3), D4, E4)
...og du får alle udskiftninger foretaget på én gang:
Bemærk venligst, at ovenstående fremgangsmåde kun fungerer i Excel 365 der understøtter dynamiske arrays.
I de før-dynamiske versioner af Excel 2019, Excel 2016 og tidligere skal formlen skrives til den øverste celle (B2) og derefter kopieres til de efterfølgende celler:
=SUBSTITUT(SUBSTITUT(SUBSTITUT(SUBSTITUT(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Vær opmærksom på, at vi i dette tilfælde låser erstatningsværdierne med absolutte cellereferencer, så de ikke flytter sig, når du kopierer formlen ned.
Bemærk. SUBSTITUTE-funktionen er skraldefølsom , hvilket betyder, at du skal skrive de gamle værdier ( gammel_tekst ) med samme bogstavsinddeling som i de oprindelige data.
Selv om det er nemt, har denne metode en væsentlig ulempe - når du har snesevis af elementer, der skal udskiftes, bliver det ret svært at administrere de indlejrede funktioner.
Fordele : let at implementere; understøttet i alle Excel-versioner
Ulemper : bedst til brug for et begrænset antal find/erstat værdier
Søg og erstat flere poster med XLOOKUP
I situationer, hvor du ønsker at udskifte den hele celleindholdet , ikke dens del, er XLOOKUP-funktionen praktisk.
Lad os sige, at du har en liste over lande i kolonne A og ønsker at erstatte alle forkortelser med de tilsvarende fulde navne. Ligesom i det foregående eksempel starter du med at indtaste elementerne "Find" og "Erstat" i separate kolonner (henholdsvis D og E) og indtaster derefter denne formel i B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Oversat fra Excel-sprog til menneskesprog, er det her, hvad formlen gør:
Søg efter A2-værdien (lookup_value) i D2:D4 (lookup_array) og returner et match fra E2:E4 (return_array). Hvis den ikke findes, hentes den oprindelige værdi fra A2.
Dobbeltklik på udfyldningshåndtaget for at få formlen kopieret til de nedenstående celler, og resultatet vil ikke lade dig vente:
Da XLOOKUP-funktionen kun er tilgængelig i Excel 365, virker ovenstående formel ikke i tidligere versioner. Du kan dog nemt efterligne denne opførsel med en kombination af IFERROR eller IFNA og VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Bemærk. I modsætning til SUBSTITUTE er funktionerne XLOOKUP og VLOOKUP ikke skivensitiv , hvilket betyder, at de søger efter opslagsværdierne uden at tage hensyn til bogstaver. Vores formel ville f.eks. erstatte både FR og fr med Frankrig .
Fordele : usædvanlig brug af sædvanlige funktioner; virker i alle Excel-versioner
Ulemper : virker på celleniveau, kan ikke erstatte en del af celleindholdet
Flere erstatter ved hjælp af rekursiv LAMBDA-funktion
For Microsoft 365-abonnenter har Excel en særlig funktion, der gør det muligt at oprette brugerdefinerede funktioner ved hjælp af et traditionelt formelsprog. Jep, jeg taler om LAMBDA. Det smukke ved denne metode er, at den kan konvertere en meget lang og kompleks formel til en meget kompakt og enkel formel. Desuden kan du oprette dine egne funktioner, der ikke findes i Excel, noget, der før varkun muligt med VBA.
Du kan finde detaljerede oplysninger om oprettelse og brug af brugerdefinerede LAMBDA-funktioner i denne vejledning: Hvordan man skriver LAMBDA-funktioner i Excel. Her vil vi diskutere et par praktiske eksempler.
Fordele : resultatet er en elegant og utrolig enkel funktion, der er utrolig nem at bruge, uanset antallet af erstatningspar.
Ulemper : kun tilgængelig i Excel 365; arbejdsbogsspecifik og kan ikke genbruges på tværs af forskellige arbejdsbøger
Eksempel 1. Søg og erstat flere ord/strenge på én gang
For at erstatte flere ord eller tekst på én gang har vi oprettet en brugerdefineret LAMBDA-funktion, der hedder MultiReplace , som kan antage en af disse former:
=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 funktioner, der kalder sig selv. Forskellen ligger kun i, hvordan udgangspunktet fastlægges.
I den første formel kontrolleres det med IF-funktionen, om gamle listen er ikke tom (gammel""). Hvis den er TRUE, vil MultiReplace funktionen kaldes. Hvis FALSE, returnerer funktionen tekst den i sin nuværende form og forlader den.
I den anden formel anvendes den omvendte logik: hvis gamle er tom (old=""), så returneres tekst og afslutte; ellers kalder du MultiReplace .
Den vanskeligste del er klaret! Det, du mangler, er at navngive den MultiReplace funktion i Name Manager som vist i skærmbilledet nedenfor. For detaljerede retningslinjer, se Hvordan man navngiver en LAMBDA-funktion.
Når funktionen har fået et navn, kan du bruge den som enhver anden indbygget funktion.
Uanset hvilken af de to formularvarianter du vælger, er syntaksen lige så enkel som denne set fra slutbrugerens syntaks:
MultiReplace(tekst, gammel, ny)Hvor:
- Tekst - kildedata
- Gamle - de værdier, der skal findes
- Ny - de værdier, der skal erstattes med
Hvis vi går lidt videre med det foregående eksempel, kan vi ikke kun erstatte forkortelserne for lande, men også forkortelserne for stater. Skriv forkortelserne ( gamle værdier) i kolonne D, der begynder i D2, og de fulde navne ( ny værdier) i kolonne E, der begynder i E2.
I B2 skal du indtaste funktionen MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Tryk på Enter og nyd resultatet :)
Sådan fungerer denne formel
For at forstå formlen skal man forstå rekursion. Det lyder måske kompliceret, men princippet er ganske enkelt. Med hver gentagelse løser en rekursiv funktion en lille del af et større problem. I vores tilfælde er det MultiReplace funktionen gennemløber de gamle og nye værdier og foretager én udskiftning ved hver sløjfe:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Som med indlejrede SUBSTITUTE-funktioner bliver resultatet af den foregående SUBSTITUTE-funktion det tekst parameter for den næste SUBSTITUTE. Med andre ord, ved hvert efterfølgende kald af MultiReplace , SUBSTITUTE-funktionen behandler ikke den oprindelige tekststreng, men resultatet af det foregående kald.
For at håndtere alle punkterne på gamle listen, starter vi med den øverste celle og bruger OFFSET-funktionen til at flytte en række nedad ved hver interaktion:
OFFSET(old, 1, 0)
Det samme gælder for ny liste:
OFFSET(new, 1, 0)
Det afgørende er at give en udgangssted for at forhindre, at rekursive kald fortsætter for evigt. Det gøres ved hjælp af IF-funktionen - hvis gamle celle er tom, returnerer funktionen tekst den i sin nuværende form og udgår:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(...))))
eller
=LAMBDA(tekst, gammel, ny, IF(gammel"", MultiReplace(...), tekst)))
Eksempel 2. Udskift flere tegn i Excel
I princippet er det MultiReplace funktionen, som blev diskuteret i det foregående eksempel, kan også håndtere individuelle tegn, forudsat at hvert gammelt og nyt tegn indtastes i en separat celle, præcis som de forkortede og fulde navne i ovenstående skærmbilleder.
Hvis du hellere vil indtaste de gamle tegn i en celle og de nye tegn i en anden celle eller skrive dem direkte i formlen, kan du oprette en anden brugerdefineret funktion, der hedder ReplaceChars , ved hjælp af en af disse formler:
=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 at navngive din nye Lambda-funktion i Name Manager som sædvanlig:
Og din nye brugerdefinerede funktion er klar til brug:
ReplaceChars(text, old_chars, new_chars)Hvor:
- Tekst - de oprindelige strenge
- Gamle - de tegn, der skal søges efter
- Ny - de tegn, der skal erstattes med
For at afprøve det i praksis kan vi gøre noget, som ofte udføres på importerede data - erstatte smarte anførselstegn og smarte apostroffer med lige anførselstegn og lige apostroffer.
Først indtaster vi de smarte anførselstegn og den smarte apostrof i D2 og de lige anførselstegn og den lige apostrof i E2, idet vi adskiller tegnene med mellemrum for at forbedre læsbarheden. (Da vi bruger samme afgrænser i begge celler, har det ingen indflydelse på resultatet - Excel erstatter bare et mellemrum med et mellemrum.)
Herefter indtaster vi denne formel i B2:
=ReplaceChars(A2:A4, D2, E2)
Og vi fik præcis de resultater, vi søgte:
Det er også muligt at skrive tegnene direkte i formlen. I vores tilfælde skal du blot huske at "duplikere" de lige anførselstegn på følgende måde:
=ReplaceChars(A2:A4, "" " '", """ "" '" '")
Sådan fungerer denne formel
ReplaceChars funktionen gennemløber de gamle_karakterer og nye_karakterer strenge og foretager en udskiftning ad gangen fra det første tegn til venstre. Denne del udføres af funktionen SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Ved hver gentagelse fjerner RIGHT-funktionen et tegn fra venstre i både gamle_karakterer og nye_karakterer strenge, så LEFT kunne hente det næste par tegn til erstatning:
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 kald evaluerer IF-funktionen gamle_karakterer Hvis den ikke er tom, kalder funktionen sig selv. Så snart det sidste tegn er blevet erstattet, afsluttes iterationsprocessen, og formlen returnerer tekst den i sin nuværende form og udgår.
Bemærk. Da SUBSTITUTE-funktionen, der anvendes i vores kerneformler, er skraldefølsom , både lambdaer ( MultiReplace og ReplaceChars ) behandler store og små bogstaver som forskellige tegn.
Massefinde og erstatte med UDF
Hvis LAMBDA-funktionen ikke er tilgængelig i din Excel, kan du skrive en brugerdefineret funktion til multi-replace på traditionel vis ved hjælp af VBA.
For at adskille UDF fra den LAMBDA-definerede MultiReplace funktion, skal vi give den et andet navn, f.eks. MassReplace Koden for funktionen er som følger:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'array til lagring af resultaterne Dim arSearchReplace(), sTmp As String 'array til lagring af find/replace-parrene, midlertidig string Dim iFindCurRow, cntFindRows As Long 'indeks for den aktuelle række i SearchReplace-arrayet, antal rækker Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'indeks for den aktuelle række i kildeområdet, indeks for den aktuelle kolonne i kildeområdet, antal rækker, antal kolonner 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) 'forberedelse af arrayet af find/replace-par ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Søgning og erstatning i kildeområdet For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Udskiftning af alle find/replace-par i hver celleFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2))) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next Next MassReplace = arRes End FunctionLigesom LAMBDA-definerede funktioner er UDF'er hele arbejdsbogen . Det betyder, at den MassReplace funktionen fungerer kun i det regneark, som du har indsat koden i. Hvis du ikke er sikker på, hvordan du gør det korrekt, skal du følge de trin, der er beskrevet i Sådan indsætter du VBA-kode i Excel.
Når koden er tilføjet til din projektmappe, vises funktionen i formel-intellisense - kun funktionens navn, ikke argumenterne! Jeg tror dog ikke, at det er noget problem at huske syntaksen:
MassReplace(input_range, find_range, replace_range)Hvor:
- Input_range - det kildeområde, hvor du vil erstatte værdier.
- Find_range - de tegn, strenge eller ord, der skal søges efter.
- Udskift_område - de tegn, strenge eller ord, der skal erstattes med.
I Excel 365 fungerer dette på grund af understøttelsen af dynamiske arrays som en normal formel, som kun skal indtastes i den øverste celle (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
I Excel fra før dynamisk tid fungerer dette som en gammeldags CSE-formel: Du markerer hele kildeområdet (B2:B10), skriver formlen og trykker på tasterne Ctrl + Shift + Enter samtidig for at fuldføre den.
Fordele : et anstændigt alternativ til en brugerdefineret LAMBDA-funktion i Excel 2019, Excel 2016 og tidligere versioner
Ulemper : arbejdsmappen skal gemmes som en makroaktiveret .xlsm-fil
Bulk erstatte i Excel med VBA-makro
Hvis du elsker at automatisere almindelige opgaver med makroer, kan du bruge følgende VBA-kode til at finde og erstatte flere værdier i et område.
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 SubHvis du vil bruge makroen med det samme, kan du downloade vores prøvearbejdsbog med koden, eller du kan indsætte koden i din egen arbejdsbog.
Sådan bruger du makroen
Før du kører makroen, skal du skrive den gamle og den nye værdi i to tilstødende kolonner som vist i billedet nedenfor (C2:D4).
Vælg derefter dine kildedata, tryk på Alt + F8 , vælg den BulkReplace makro, og klik på Kør .
Som den kilde raseri er forvalgt, skal du blot bekræfte referencen og klikke på OK:
Derefter skal du vælge den erstatte rækkevidde , og klik på OK:
Færdig!
Fordele : opsætning én gang, genbrug når som helst
Ulemper : makroen skal køres ved hver dataændring
Flere finde og erstatte i Excel med værktøjet Substring
I det allerførste eksempel nævnte jeg, at indlejret SUBSTITUTE er den nemmeste måde at erstatte flere værdier i Excel på. Jeg indrømmer, at jeg tog fejl. Vores Ultimate Suite gør det endnu nemmere!
Hvis du vil foretage masseudskiftning i dit regneark, skal du gå over til Ablebits Data og klik på Værktøjer til understreng > Udskift understrenge .
Udskift understrenge dialogboksen vises og beder dig om at definere den Kilde rækkevidde og Understrenge rækkevidde.
Når de to intervaller er valgt, skal du klikke på Udskift knappen og find resultaterne i en ny kolonne, der indsættes til højre for de oprindelige data. Ja, så nemt er det!
Tip. Før du klikker på Udskift , er der én vigtig ting, du skal overveje - den Skrivefølsom Sørg for at markere den, hvis du ønsker at behandle store og små bogstaver som forskellige tegn. I dette eksempel markerer vi denne mulighed, fordi vi kun ønsker at erstatte de store strenge og lade understrenge som "fr", "uk" eller "ak" i andre ord forblive intakte.
Hvis du er nysgerrig efter at vide, hvilke andre bulk-operationer der kan udføres på strenge, kan du tjekke andre Substring Tools, der er inkluderet i vores Ultimate Suite. Eller endnu bedre, download evalueringsversionen nedenfor og prøv det!
Sådan finder og erstatter du flere ord og tegn på én gang i Excel. Tak for din læsning, og jeg håber at se dig på vores blog i næste uge!
Tilgængelige downloads
Flere finde og erstatte i Excel (.xlsm-fil)
Ultimate Suite 14-dages fuldt funktionsdygtig version (.exe-fil)