Innehållsförteckning
I de senaste artiklarna har vi tittat på olika sätt att ta bort tecken från strängar i Excel. I dag ska vi undersöka ytterligare ett användningsområde - hur du tar bort allt före eller efter ett visst tecken.
Ta bort text före, efter eller mellan 2 tecken med Find & Replace
För datamanipulationer i flera celler är Hitta och ersätta rätt verktyg. Om du vill ta bort en del av en sträng som föregår eller följer ett visst tecken är detta de steg du ska utföra:
- Markera alla celler där du vill ta bort text.
- Tryck på Ctrl + H för att öppna Hitta och ersätta dialog.
- I Hitta vad ange en av följande kombinationer:
- För att eliminera text före ett visst tecken , skriv det tecken som föregås av en asterisk (*char).
- Ta bort text efter ett visst tecken , skriv tecknet följt av en asterisk (char*).
- Ta bort en delsträng mellan två karaktärer , skriv en asterisk omgiven av två tecken (char*char).
- Lämna den Ersätt med boxen är tom.
- Klicka på Ersätt alla .
Om du till exempel vill ta bort allt efter ett kommatecken inklusive själva kommandot, sätt ett kommatecken och ett asterisktecken (,*) i Hitta vad och du får följande resultat:
Ta bort en delsträng före ett kommatecken , skriv en asterisk, ett kommatecken och ett mellanslag (*, ) i fältet Hitta vad box.
Observera att vi ersätter inte bara ett kommatecken utan även ett kommatecken och ett mellanslag Om dina data är separerade med kommatecken utan mellanslag, använd en asterisk följt av ett kommatecken (*,).
Ta bort text mellan två kommatecken , använd en asterisk omgiven av kommatecken (,*,).
Tips: Om du hellre vill ha namn och telefonnummer separerade med ett kommatecken, skriv ett kommatecken (,) i fältet Ersätt med fält.
Ta bort en del av texten med Flash Fill
I moderna versioner av Excel (2013 och senare) finns det ytterligare ett enkelt sätt att radera text som föregår eller följer ett visst tecken - funktionen Flash Fill. Så här fungerar den:
- Skriv det förväntade resultatet i en cell bredvid den första cellen med dina data och tryck på Enter .
- Börja skriva in ett lämpligt värde i nästa cell. När Excel känner igen mönstret i de värden du skriver in, visas en förhandsvisning av de återstående cellerna som följer samma mönster.
- Tryck på Enter för att acceptera förslaget.
Klart!
Ta bort text med hjälp av formler
I Microsoft Excel kan många datamanipulationer som utförs med hjälp av inbyggda funktioner också utföras med en formel. Till skillnad från de tidigare metoderna gör formlerna inga ändringar i de ursprungliga uppgifterna och ger dig mer kontroll över resultaten.
Hur du tar bort allt efter ett visst tecken
För att radera text efter ett visst tecken är den generiska formeln:
VÄNSTER( cell , SEARCH(" char ", cell ) -1)Här använder vi SEARCH-funktionen för att få fram positionen för tecknet och skickar den till LEFT-funktionen, så att den extraherar motsvarande antal tecken från strängens början. Ett tecken subtraheras från det antal som returneras av SEARCH för att utesluta avgränsaren från resultaten.
Om du till exempel vill ta bort en del av en sträng efter ett kommatecken skriver du nedanstående formel i B2 och drar den nedåt till B7:
=VÄNSTER(A2, SEARCH(",", A2) -1)
Hur du tar bort allt före ett visst tecken
För att radera en del av en textsträng före ett visst tecken är den generiska formeln:
RÄTT( cell , LEN( cell ) - SEARCH(" char ", cell ))Här beräknar vi återigen positionen för måltecknet med hjälp av SEARCH, subtraherar den från den totala stränglängden som returneras av LEN och skickar skillnaden till RIGHT-funktionen, så att den drar så många tecken från strängens slut.
Om du till exempel vill ta bort text före ett kommatecken är formeln:
=RIGHT(A2, LEN(A2) - SEARCH(",", A2))
I vårt fall följs kommatecknet av ett mellanslag. För att undvika ledande mellanslag i resultaten, lindar vi in kärnformeln i TRIM-funktionen:
=TRIM(HÖGER(A2, LEN(A2) - SEARCH(",", A2)))
Anteckningar:
- Båda exemplen ovan förutsätter att det endast finns ett fall av avgränsaren i den ursprungliga strängen. Om det finns flera förekomster kommer texten att tas bort före/efter avgränsaren. första instans .
- Funktionen SEARCH är inte skiftlägeskänslig vilket innebär att den inte gör någon skillnad mellan små och stora bokstäver. Om ditt specifika tecken är en bokstav och du vill skilja mellan bokstavsbokstäverna, använd då Skiftlägeskänslig Funktionen FIND i stället för SEARCH.
Hur man raderar text efter Nth förekomst av ett tecken
Om en källsträng innehåller flera instanser av avgränsaren kan du behöva ta bort text efter en viss instans. Använd följande formel för detta:
VÄNSTER( cell , FIND("#", SUBSTITUTE( cell , " char ", "#", n )) -1)Var n är tecknets förekomst efter vilket texten ska tas bort.
Den interna logiken i denna formel kräver att man använder ett tecken som inte finns någonstans i källdata, i vårt fall en hash-symbol (#). Om detta tecken förekommer i din datamängd, använd något annat i stället för "#".
Om du till exempel vill ta bort allt efter det andra kommatecknet i A2 (och själva kommatecknet) är formeln följande:
=VÄNSTER(A2, FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)
Hur denna formel fungerar:
Den viktigaste delen av formeln är FIND-funktionen som beräknar positionen för den nionde avgränsaren (i vårt fall ett kommatecken):
Vi ersätter det andra kommatecknet i A2 med en hash-symbol (eller något annat tecken som inte finns i dina data) med hjälp av SUBSTITUTE:
SUBSTITUTE(A2, ",", "#", 2)
Den resulterande strängen går till det andra argumentet i FIND, så den hittar positionen för "#" i den strängen:
FIND("#", "Emma, Design# (102) 123-4568")
FIND berättar att "#" är det 13:e tecknet i strängen. Om du vill veta hur många tecken som föregår det, drar du bara av 1 och får 12 som resultat:
FIND("#", SUBSTITUTE(A2, ",", "#", 2)) - 1
Detta nummer går direkt till num_chars argumentet LEFT och ber den att ta fram de 12 första tecknen från A2:
=VÄNSTER(A2, 12)
Det var allt!
Hur man raderar text före den N:e förekomsten av ett tecken
Den generiska formeln för att ta bort en delsträng före ett visst tecken är:
HÖGER(SUBSTITUT( cell , " char ", "#", n ), LEN( cell ) - FIND("#", SUBSTITUTE( cell , " char ", "#", n )) -1)Om du till exempel vill ta bort texten före det andra kommatecknet i A2 är formeln:
=RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)
För att ta bort ett inledande mellanslag använder vi återigen TRIM-funktionen som en omslagsfunktion:
=TRIM(RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))))
Hur denna formel fungerar:
Sammanfattningsvis tar vi reda på hur många tecken som finns efter den n:e avgränsaren och extraherar en delsträng av motsvarande längd från höger:
Först ersätter vi det andra kommatecknet i A2 med en hash-symbol:
SUBSTITUTE(A2, ",", "#", 2)
Den resulterande strängen skickas till text argumentet RIGHT:
RIGHT("Emma, Design# (102) 123-4568", ...
Därefter måste vi bestämma hur många tecken som ska extraheras från strängens slut. För detta hittar vi hash-symbolens position i strängen ovan (som är 13):
FIND("#", SUBSTITUTE(A2, ",", "#", 2))
Dra av den från den totala stränglängden (som är 28):
LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))
Skillnaden (15) går till det andra argumentet i RIGHT och instruerar den att ta ut de sista 15 tecknen från strängen i det första argumentet:
RIGHT("Emma, Design# (102) 123-4568", 15)
Resultatet är en delsträng " (102) 123-4568", som är mycket nära det önskade resultatet, förutom ett inledande mellanslag. Vi använder TRIM-funktionen för att ta bort det.
Hur du tar bort text efter den sista förekomsten av ett tecken
Om dina värden är separerade med ett variabelt antal avgränsare kan du vilja ta bort allt efter det sista exemplet av denna avgränsare. Detta kan göras med följande formel:
VÄNSTER( cell , FIND("#", SUBSTITUTE( cell , " char ", "#", LEN( cell ) - LEN(SUBSTITUT( cell , " char ", "")))) -1)Anta att kolumn A innehåller olika uppgifter om anställda, men att värdet efter det sista kommatalet alltid är ett telefonnummer. Ditt mål är att ta bort telefonnummer och behålla alla andra uppgifter.
För att uppnå målet kan du ta bort texten efter det sista kommatecknet i A2 med den här formeln:
= VÄNSTER(A2, FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))) -1)
Kopiera formeln ner i kolumnen och du får detta resultat:
Hur denna formel fungerar:
Formeln går ut på att vi bestämmer positionen för den sista avgränsaren (kommatecken) i strängen och drar en delsträng från vänster upp till avgränsaren. Att få fram positionen för avgränsaren är den svåraste delen, och så här hanterar vi det:
Först tar vi reda på hur många kommatecken det finns i den ursprungliga strängen. För detta ersätter vi varje kommatecken med ingenting ("") och serverar den resulterande strängen till LEN-funktionen:
LEN(SUBSTITUTE(A2, ",",",""))
För A2 är resultatet 35, vilket är antalet tecken i A2 utan kommatecken.
Subtrahera ovanstående antal från den totala stränglängden (38 tecken):
LEN(A2) - LEN(SUBSTITUTE(A2, ",",",""))
... och du får 3, vilket är det totala antalet kommatecken i A2 (och även det sista kommats ordningsnummer).
Därefter använder du den redan välkända kombinationen av funktionerna FIND och SUBSTITUTE för att få fram positionen för det sista kommatecknet i strängen. Instansnumret (tredje kommatecknet i vårt fall) tillhandahålls med hjälp av den ovannämnda formeln LEN SUBSTITUTE:
FIND("#", SUBSTITUTE(A2, ",", "#", 3))
Det visar sig att det tredje kommatecknet är det 23:e tecknet i A2, vilket innebär att vi måste extrahera 22 tecken före det. Så vi sätter ovanstående formel minus 1 i num_chars argument för LEFT:
VÄNSTER(A2, 23-1)
Hur man tar bort text före den sista förekomsten av ett tecken
För att radera allt före den sista förekomsten av ett visst tecken är den generiska formeln:
RÄTT( cell , LEN( cell ) - FIND("#", SUBSTITUTE( cell , " char ", "#", LEN( cell ) - LEN(SUBSTITUT( cell , " char ", "")))))I vår exempeltabell har formeln följande form för att radera texten före det sista kommatecknet:
=RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))))
Som en sista touch bäddar vi in den i TRIM-funktionen för att eliminera ledande mellanslag:
=TRIM(RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))))
Hur denna formel fungerar:
Sammanfattningsvis tar vi fram positionen för det sista kommatecknet enligt förklaringen i det föregående exemplet och subtraherar den från strängens totala längd:
LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))
Resultatet är att vi tar fram antalet tecken efter det sista kommatecknet och skickar det till RIGHT-funktionen, så att den tar med sig så många tecken från strängens slut.
Anpassad funktion för att ta bort text på båda sidor av ett tecken
Som du har sett i exemplen ovan kan du lösa nästan alla användningsfall genom att använda Excels funktioner i olika kombinationer. Problemet är att du måste komma ihåg en handfull knepiga formler. Hmm, vad händer om vi skriver en egen funktion som täcker alla scenarier? Det låter som en bra idé. Lägg till följande VBA-kod i din arbetsbok (de detaljerade stegen för att infoga VBA i Excel ärhär):
Funktion RemoveText(str As String , delimiter As String , occurrence As Integer , is_after As Boolean ) Dim delimiter_num, start_num, delimiter_len As Integer Dim str_result As String delimiter_num = 0 start_num = 1 str_result = "" delimiter_len = Len(delimiter) For i = 1 To occurrence delimiter_num = InStr(start_num, str, delimiter, vbTextCompare) If 0 <delimiter_num Then start_num =delimiter_num + delimiter_len End If Next i If 0 <delimiter_num Then If True = is_after Then str_result = Mid(str, 1, start_num - delimiter_len - 1) Else str_result = Mid(str, start_num) End If End If RemoveText = str_result End FunctionVår funktion heter RemoveText och har följande syntax:
RemoveText(sträng, avgränsare, förekomst, is_after)Var:
Sträng - är den ursprungliga textsträngen. Kan representeras av en cellreferens.
Avgränsare - tecknet före/efter vilket texten ska tas bort.
Förekomst - instansen för avgränsaren.
Är_efter - Ett boolskt värde som anger på vilken sida av avgränsaren texten ska tas bort. Kan vara ett enskilt tecken eller en sekvens av tecken.
- TRUE - raderar allt efter avgränsaren (inklusive själva avgränsaren).
- FALSE - raderar allt före avgränsaren (inklusive själva avgränsaren).
När koden för funktionen har infogats i arbetsboken kan du ta bort delsträngar från celler med hjälp av kompakta och eleganta formler.
Om du till exempel vill radera allt efter det första kommatecknet i A2 är formeln i B2 följande:
=RemoveText(A3, ", ", ", 1, TRUE)
För att radera allt före det första kommatecknet i A2 är formeln i C2 följande:
=RemoveText(A3, ", ", ", 1, FALSE)
Eftersom vår anpassade funktion accepterar en sträng för avgränsaren sätter vi ett kommatecken och ett mellanslag (", ") i det andra argumentet för att slippa skära bort inledande mellanslag i efterhand.
Vår anpassade funktion fungerar utmärkt, eller hur? Men om du tror att det är en heltäckande lösning har du inte sett nästa exempel ännu :)
Radera allt före, efter eller mellan tecken
Om du vill ha ännu fler alternativ för att ta bort enskilda tecken eller text från flera celler, efter matchning eller position, kan du lägga till vår Ultimate Suite i din Excel-verktygslåda.
Här ska vi titta närmare på den Ta bort efter position funktion som finns på den Uppgifter om Ablebits flik> Text grupp> Ta bort .
Nedan kommer vi att behandla de två vanligaste scenarierna.
Ta bort allt före eller efter en viss text
Anta att alla dina källsträngar innehåller ett gemensamt ord eller en gemensam text och att du vill radera allt före eller efter den texten. För att göra det, välj dina källdata, kör Ta bort efter position och konfigurera det på följande sätt:
- Välj den Alla tecken före texten eller . Alla tecken efter texten och skriv nyckeltexten (eller tecknet) i rutan bredvid.
- Beroende på om stora och små bokstäver ska behandlas som olika eller samma tecken, markera eller avmarkera kryssrutan Skiftlägeskänslig box.
- Hit Ta bort .
I det här exemplet tar vi bort alla tecken som föregår ordet "error" i cellerna A2:A8:
Och vi får exakt det resultat som vi vill ha:
Ta bort text mellan två tecken
Om irrelevant information finns mellan två specifika tecken kan du snabbt radera den på följande sätt:
- Välj Ta bort alla understrängar och skriv två tecken i rutorna nedan.
- Om "mellan"-tecknen också ska tas bort, kontrollera Inklusive avgränsare box.
- Klicka på Ta bort .
Som exempel tar vi bort allt mellan två tilde-tecken (~) och får en perfekt rensad sträng som resultat:
Om du vill prova andra användbara funktioner i detta multifunktionella verktyg kan du ladda ner en utvärderingsversion i slutet av det här inlägget. Tack för att du läste och vi ses på vår blogg nästa vecka!
Tillgängliga nedladdningar
Ta bort första eller sista tecken - exempel (.xlsm-fil)
Ultimate Suite - testversion (.exe-fil)