Innehållsförteckning
I den här handledningen tittar vi på flera olika sätt att hitta och ersätta flera ord, strängar eller enskilda tecken, så att du kan välja det som passar bäst för dina behov.
Hur söker man vanligtvis i Excel? Oftast genom att använda funktionen Hitta och ersätta, vilket fungerar bra för enskilda värden. Men vad händer om du har tiotals eller till och med hundratals objekt som ska ersättas? Ingen vill säkert göra alla dessa ersättningar manuellt, en efter en, och sedan göra om allt igen när uppgifterna ändras. Lyckligtvis finns det några effektivare metoder för att göra massersättning i Excel, ochVi kommer att undersöka var och en av dem i detalj.
Hitta och ersätta flera värden med inbäddade SUBSTITUTE
Det enklaste sättet att hitta och ersätta flera poster i Excel är att använda funktionen SUBSTITUTE.
Formelns logik är mycket enkel: du skriver några enskilda funktioner för att ersätta ett gammalt värde med ett nytt. Sedan bäddar du in dessa funktioner i varandra, så att varje efterföljande SUBSTITUTE använder resultatet från den föregående SUBSTITUTE för att leta efter nästa värde.
SUBSTITUT(SUBSTITUT(SUBSTITUT(SUBSTITUT(( text , gammal_text1 , new_text1 ), gammal_text2 , new_text2 ), gammal_text3 , new_text3 )Anta att du i listan över platser i A2:A10 vill ersätta de förkortade landsnamnen (t.ex. FR , STORBRITANNIEN och USA ) med fullständiga namn.
Ange de gamla värdena i D2:D4 och de nya värdena i E2:E4 som visas i skärmdumpen nedan. Lägg sedan in nedanstående formel i B2 och tryck på Enter:
= SUBSTITUT(SUBSTITUT(SUBSTITUT(SUBSTITUT(A2:A10, D2, E2), D3, E3), D4, E4)
...och du kommer att få alla utbyten gjorda på en gång:
Observera att ovanstående tillvägagångssätt endast fungerar i Excel 365 som stöder dynamiska matriser.
I de pre-dynamiska versionerna av Excel 2019, Excel 2016 och tidigare måste formeln skrivas för den översta cellen (B2) och sedan kopieras till cellerna nedanför:
= SUBSTITUT(SUBSTITUT(SUBSTITUT(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Observera att vi i det här fallet låser ersättningsvärdena med absoluta cellreferenser, så att de inte flyttas när du kopierar formeln ner.
Observera: Funktionen SUBSTITUTE är Skiftlägeskänslig vilket innebär att du ska skriva in de gamla värdena ( gammal_text ) i samma bokstavsordning som de förekommer i de ursprungliga uppgifterna.
Även om det är enkelt har den här metoden en stor nackdel - när du har dussintals objekt som ska ersättas blir det svårt att hantera inbäddade funktioner.
Fördelar : lätt att genomföra; stöds i alla Excel-versioner
Nackdelar : bäst att använda för ett begränsat antal värden för att hitta/ersätta.
Sök och ersätt flera poster med XLOOKUP
Om du vill byta ut en hela cellinnehållet , men inte för sin del är XLOOKUP-funktionen praktisk.
Låt oss säga att du har en lista med länder i kolumn A och att du vill ersätta alla förkortningar med motsvarande fullständiga namn. Precis som i det föregående exemplet börjar du med att skriva in punkterna "Hitta" och "Ersätt" i separata kolumner (D respektive E) och skriver sedan in formeln i B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Översatt från Excel till mänskligt språk är det här vad formeln gör:
Sök efter A2-värdet (lookup_value) i D2:D4 (lookup_array) och återge en matchning från E2:E4 (return_array). Om det inte hittas, hämta det ursprungliga värdet från A2.
Dubbelklicka på fyllningshandtaget för att få formeln kopierad till cellerna nedanför, och resultatet kommer inte att låta dig vänta:
Eftersom XLOOKUP-funktionen endast är tillgänglig i Excel 365 fungerar inte formeln ovan i tidigare versioner. Du kan dock enkelt efterlikna detta beteende med en kombination av IFERROR eller IFNA och VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Obs. Till skillnad från SUBSTITUTE är funktionerna XLOOKUP och VLOOKUP inte skiftlägeskänslig vilket innebär att de söker efter uppslagsvärdena utan att ta hänsyn till bokstavsbeteckningen. Vår formel skulle till exempel ersätta både FR och fr med Frankrike .
Fördelar : ovanlig användning av vanliga funktioner; fungerar i alla Excel-versioner
Nackdelar : fungerar på cellnivå, kan inte ersätta en del av cellinnehållet.
Flera ersättningar med hjälp av rekursiv LAMBDA-funktion
För Microsoft 365-prenumeranter tillhandahåller Excel en särskild funktion som gör det möjligt att skapa egna funktioner med hjälp av ett traditionellt formelspråk. Ja, jag talar om LAMBDA. Det fina med denna metod är att den kan omvandla en mycket lång och komplex formel till en mycket kompakt och enkel formel. Dessutom kan du skapa egna funktioner som inte finns i Excel, något som tidigare inte fanns.endast möjligt med VBA.
Detaljerad information om hur man skapar och använder anpassade LAMBDA-funktioner finns i denna handledning: Hur man skriver LAMBDA-funktioner i Excel. Här kommer vi att diskutera ett par praktiska exempel.
Fördelar : resultatet är en elegant och otroligt enkel funktion att använda, oavsett antalet utbytespar.
Nackdelar : endast tillgänglig i Excel 365; arbetsboksspecifik och kan inte återanvändas i olika arbetsböcker.
Exempel 1. Sök och ersätt flera ord/strängar samtidigt
För att ersätta flera ord eller text på en gång har vi skapat en egen LAMBDA-funktion som heter MultiReplace , som kan ha en av följande former:
=LAMBDA(text, gammal, ny, IF(gammal"", MultiReplace(SUBSTITUTE(text, gammal, ny), OFFSET(gammal, 1, 0), OFFSET(ny, 1, 0)), text))
Eller
=LAMBDA(text, gammal, ny, IF(gammal="", text, MultiReplace(SUBSTITUTE(text, gammal, ny), OFFSET(gammal, 1, 0), OFFSET(ny, 1, 0))))
Båda är rekursiva funktioner som anropar sig själva. Skillnaden ligger endast i hur utgångspunkten fastställs.
I den första formeln kontrollerar IF-funktionen om gamla listan inte är tom (gammal""). Om den är TRUE, är MultiReplace funktionen anropas. Om den är FALSE, returnerar funktionen text den i sin nuvarande form och avslutas.
I den andra formeln används den omvända logiken: om gamla är tom (old=""), återge då text och avsluta; i annat fall anropar du MultiReplace .
Den svåraste delen är klar! Det som återstår för dig är att namnge MultiReplace funktionen i namnhanteraren som visas i skärmbilden nedan. För detaljerade riktlinjer, se Hur man namnger en LAMBDA-funktion.
När funktionen har fått ett namn kan du använda den precis som alla andra inbyggda funktioner.
Oavsett vilken av de två formelvarianterna du väljer är syntaxen så här enkel ur slutanvändarens perspektiv:
MultiReplace(text, gammal, ny)Var:
- Text - Källdata.
- Gamla - de värden som ska hittas
- Ny - de värden som ska ersättas med
Om vi går lite längre i det tidigare exemplet kan vi ersätta inte bara landförkortningarna utan även förkortningarna för delstaterna. Skriv in förkortningarna ( gamla värden) i kolumn D med början i D2 och de fullständiga namnen ( ny värden) i kolumn E med början i E2.
I B2 anger du funktionen MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Tryck på Enter och njut av resultatet :)
Hur denna formel fungerar
Ledtråden till att förstå formeln är att förstå rekursion. Det kan låta komplicerat, men principen är ganska enkel. Med varje iteration löser en rekursiv funktion en liten del av ett större problem. I vårt fall är det MultiReplace funktionen loopar genom de gamla och nya värdena och utför en ersättning i varje loop:
MultiReplace (SUBSTITUTE(text, gammal, ny), OFFSET(gammal, 1, 0), OFFSET(ny, 1, 0))
Precis som med inbäddade SUBSTITUTE-funktioner blir resultatet av den föregående SUBSTITUTE-funktionen den text parametern för nästa SUBSTITUTE. Med andra ord, vid varje efterföljande anrop av MultiReplace SUBSTITUTE-funktionen bearbetar inte den ursprungliga textsträngen, utan resultatet från föregående anrop.
För att hantera alla objekt på gamla listan börjar vi med den översta cellen och använder OFFSET-funktionen för att flytta en rad nedåt vid varje interaktion:
OFFSET(gammal, 1, 0)
Samma sak gäller för ny lista:
OFFSET(new, 1, 0)
Det viktigaste är att tillhandahålla en utgångspunkt. för att förhindra att rekursiva anrop fortsätter i all oändlighet. Det görs med hjälp av IF-funktionen - om gamla cellen är tom, returnerar funktionen text den i sin nuvarande form och utgår:
=LAMBDA(text, gammal, ny, IF(gammal="", text, MultiReplace(...)))
eller .
=LAMBDA(text, gammal, ny, IF(gammal"", MultiReplace(...), text))
Exempel 2. Ersätt flera tecken i Excel
I princip kan MultiReplace som vi diskuterade i det föregående exemplet kan också hantera enskilda tecken, förutsatt att varje gammalt och nytt tecken skrivs in i en separat cell, precis som de förkortade och fullständiga namnen i skärmdumparna ovan.
Om du hellre vill ange de gamla tecknen i en cell och de nya tecknen i en annan cell, eller skriva dem direkt i formeln, kan du skapa en annan anpassad funktion som heter ReplaceChars genom att använda en av dessa 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))))
Kom ihåg att namnge din nya Lambda-funktion i namnhanteraren som vanligt:
Din nya anpassade funktion är redo att användas:
ReplaceChars(text, old_chars, new_chars)Var:
- Text - de ursprungliga strängarna
- Gamla - de tecken som ska sökas
- Ny - de tecken som ska ersättas med
För att testa det på fältet kan vi göra något som ofta utförs på importerade data - ersätta smarta citationstecken och smarta apostrofer med raka citationstecken och raka apostrofer.
Först matar vi in smarta citationstecken och smart apostrof i D2, raka citationstecken och rak apostrof i E2, och separerar tecknen med mellanslag för bättre läsbarhet. (Eftersom vi använder samma avgränsare i båda cellerna har det ingen inverkan på resultatet - Excel ersätter bara ett mellanslag med ett mellanslag.)
Därefter skriver vi in denna formel i B2:
=ReplaceChars(A2:A4, D2, E2)
Och vi fick exakt de resultat vi sökte:
Det går också att skriva in tecknen direkt i formeln. I vårt fall behöver du bara komma ihåg att "duplicera" de raka citattecknen på följande sätt:
=ReplaceChars(A2:A4, "" " '", """ "" '" '")
Hur denna formel fungerar
ReplaceChars funktionen går igenom de olika gamla_karaktärer och new_chars strängar och ersätter en i taget från det första tecknet till vänster. Denna del görs av funktionen SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Vid varje iteration tar RIGHT-funktionen bort ett tecken från vänster i både gamla_karaktärer och new_chars strängar, så att LEFT kan hämta nästa teckenpar för substitution:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Före varje rekursivt anrop utvärderar IF-funktionen gamla_karaktärer Om det inte är tomt kallar funktionen sig själv. Så snart det sista tecknet har ersatts avslutas iterationsprocessen, formeln returnerar text den i sin nuvarande form och utgår.
Observera: Eftersom SUBSTITUTE-funktionen som används i våra huvudformler är Skiftlägeskänslig , båda lambdas ( MultiReplace och ReplaceChars ) behandlar stora och små bokstäver som olika tecken.
Massfynd och ersättning med UDF
Om LAMBDA-funktionen inte finns tillgänglig i Excel kan du skriva en användardefinierad funktion för multi-replace på ett traditionellt sätt med VBA.
För att särskilja UDF från LAMBDA-definierade MultiReplace funktionen, kommer vi att namnge den på ett annat sätt, till exempel MassReplace Koden för funktionen är följande:
Funktion MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'matris för att lagra resultaten Dim arSearchReplace(), sTmp As String 'matris för att lagra sök/ersätt-paren, tillfällig sträng Dim iFindCurRow, cntFindRows As Long 'index för den aktuella raden i SearchReplace-matrisen, antal rader Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'index för den aktuella raden i källområdet, index för den aktuella kolumnen i källområdet, antal rader, antal kolumner 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) 'förbereder matrisen med sök/ersätt-par ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Sökning och ersättning i källområdet For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Ersättning av alla sök/ersättningspar i varje cellFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next Next MassReplace = arRes End FunctionLiksom LAMBDA-definierade funktioner är UDF:er arbetsboksövergripande Det innebär att MassReplace fungerar endast i den arbetsbok där du har lagt in koden. Om du inte är säker på hur du ska göra detta på rätt sätt kan du följa de steg som beskrivs i Hur man lägger in VBA-kod i Excel.
När koden har lagts till i arbetsboken kommer funktionen att visas i formelns intellisense - bara funktionens namn, inte argumenten! Jag tror dock inte att det är någon större sak att komma ihåg syntaxen:
MassReplace(input_range, find_range, replace_range)Var:
- Input_range - det källområde där du vill ersätta värden.
- Hitta_intervall - de tecken, strängar eller ord som ska sökas.
- Ersätta_intervall - de tecken, strängar eller ord som ska ersättas med.
I Excel 365 fungerar detta som en vanlig formel, som bara behöver skrivas in i den översta cellen (B2), eftersom det finns stöd för dynamiska matriser:
=MassReplace(A2:A10, D2:D4, E2:E4)
I det fördynamiska Excel fungerar detta som en gammal CSE-formel för matriser: du markerar hela källområdet (B2:B10), skriver formeln och trycker samtidigt på tangenterna Ctrl + Shift + Enter för att slutföra den.
Fördelar : ett anständigt alternativ till en egen LAMBDA-funktion i Excel 2019, Excel 2016 och tidigare versioner.
Nackdelar : arbetsboken måste sparas som en makroaktiverad .xlsm-fil.
Bulk ersätta i Excel med VBA-makro
Om du älskar att automatisera vanliga uppgifter med makron kan du använda följande VBA-kod för att hitta och ersätta flera värden i ett intervall.
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 SubOm du vill använda makrot direkt kan du ladda ner vår exempelarbetsbok med koden, eller så kan du infoga koden i din egen arbetsbok.
Hur man använder makroet
Innan du kör makrot skriver du in det gamla och det nya värdet i två intilliggande kolumner enligt bilden nedan (C2:D4).
Välj sedan dina källdata, tryck på Alt + F8, välj BulkReplace makro och klicka på Kör .
Eftersom källan rage är förvald, kontrollera bara referensen och klicka på OK:
Därefter väljer du byta ut sortimentet och klicka på OK:
Klart!
Fördelar : du installerar en gång och kan återanvända när som helst
Nackdelar : makrot måste köras vid varje dataändring.
Hitta och ersätta flera gånger i Excel med verktyget Substring
I det allra första exemplet nämnde jag att inbäddad SUBSTITUTE är det enklaste sättet att ersätta flera värden i Excel. Jag erkänner att jag hade fel. Vår Ultimate Suite gör det ännu enklare!
Om du vill göra massersättning i ditt kalkylblad går du till Uppgifter om Ablebits och klickar på Verktyg för delsträngar > Ersätt delsträngar .
Ersätt delsträngar dialogrutan visas och du uppmanas att definiera Källa sortiment och Understrängar sortiment.
När de två områdena är markerade klickar du på Ersätt och hitta resultaten i en ny kolumn som infogas till höger om de ursprungliga uppgifterna. Ja, det är så enkelt!
Tips: Innan du klickar på Ersätt Det finns en viktig sak som du måste tänka på: hur Skiftlägeskänslig Markera den om du vill hantera stora och små bokstäver som olika tecken. I det här exemplet kryssar vi för det här alternativet eftersom vi bara vill ersätta strängar med stor bokstav och låta understrängar som "fr", "uk" eller "ak" i andra ord vara intakta.
Om du är nyfiken på vilka andra bulkoperationer som kan utföras på strängar kan du kolla in andra Substring-verktyg som ingår i vår Ultimate Suite. Eller ännu bättre, ladda ner utvärderingsversionen nedan och prova det!
Så här gör du för att hitta och ersätta flera ord och tecken samtidigt i Excel. Tack för att du läste och hoppas att vi ses på vår blogg nästa vecka!
Tillgängliga nedladdningar
Flera sökningar och ersättningar i Excel (.xlsm-fil)
Ultimate Suite 14-dagars fullt fungerande version (.exe-fil)