Spis treści
W ostatnich kilku artykułach przyjrzeliśmy się różnym sposobom usuwania znaków z ciągów w Excelu. Dziś zbadamy jeszcze jeden przypadek użycia - jak usunąć wszystko przed lub po określonym znaku.
Usuń tekst przed, po lub pomiędzy 2 znakami za pomocą funkcji Find & Replace
Do manipulacji danymi w wielu komórkach właściwym narzędziem jest funkcja Znajdź i zamień. Aby usunąć część ciągu poprzedzającego lub następującego po określonym znaku, należy wykonać następujące czynności:
- Zaznacz wszystkie komórki, w których chcesz usunąć tekst.
- Naciśnij Ctrl + H, aby otworzyć Znajdź i zamień dialog.
- W Znajdź to, co wprowadź jedną z następujących kombinacji:
- Aby wyeliminować tekst przed danym znakiem , wpisz znak poprzedzony gwiazdką (*char).
- Aby usunąć tekst po pewnej postaci , wpisz znak, po którym następuje gwiazdka (char*).
- Aby usunąć podłańcuch między dwoma postaciami , wpisz gwiazdkę otoczoną przez 2 znaki (char*char).
- Zostaw Wymienić z pudełko puste.
- Kliknij Wymienić wszystkie .
Na przykład, aby usunąć wszystko po przecinku łącznie z samym przecinkiem, umieść przecinek i znak gwiazdki (,*) w Znajdź to, co box, a otrzymasz następujący wynik:
Aby usunąć podłańcuch przed przecinkiem , wpisz gwiazdkę, przecinek i spację (*, ) w miejscu Znajdź to, co pudełko.
Proszę zauważyć, że zastępujemy nie tylko przecinek, ale przecinek i spacja Jeśli dane są oddzielone przecinkami bez spacji, użyj gwiazdki, a następnie przecinka (*,).
Aby usunąć tekst między dwoma przecinkami , użyj gwiazdki otoczonej przecinkami (,*,).
Wskazówka. Jeśli wolisz, aby nazwiska i numery telefonów były oddzielone przecinkiem, wpisz przecinek (,) w polu Zastąpić pole.
Usuń część tekstu za pomocą Flash Fill
W nowoczesnych wersjach Excela (2013 i nowszych) istnieje jeszcze jeden prosty sposób na wymazanie tekstu poprzedzającego lub następującego po określonym znaku - funkcja Flash Fill.Oto jak działa:
- W komórce obok pierwszej komórki ze swoimi danymi wpisz oczekiwany wynik i naciśnij Enter .
- Zacznij wpisywać odpowiednią wartość w kolejnej komórce. Gdy Excel wyczuje wzór we wprowadzanych wartościach, wyświetli podgląd dla pozostałych komórek podążających za tym samym wzorem.
- Naciśnij klawisz Enter, aby zaakceptować sugestię.
Zrobione!
Usuwanie tekstu za pomocą formuł
W programie Microsoft Excel wiele manipulacji danymi wykonywanych za pomocą wbudowanych funkcji można również wykonać za pomocą formuły. W przeciwieństwie do poprzednich metod, formuły nie wprowadzają żadnych zmian w oryginalnych danych i dają większą kontrolę nad wynikami.
Jak usunąć wszystko po określonym znaku
Aby usunąć tekst po konkretnym znaku, ogólna formuła to:
LEWA( komórka , SEARCH(" char ", komórka ) -1)Tutaj używamy funkcji SEARCH, aby uzyskać pozycję znaku i przekazać ją do funkcji LEFT, dzięki czemu pobiera ona odpowiednią liczbę znaków z początku łańcucha. Jeden znak jest odejmowany od liczby zwróconej przez SEARCH, aby wykluczyć delimiter z wyników.
Na przykład, aby usunąć część ciągu po przecinku, wprowadzasz poniższą formułę w B2 i przeciągasz ją w dół przez B7:
=LEFT(A2, SEARCH(",", A2) -1)
Jak usunąć wszystko przed określonym znakiem
Aby usunąć część ciągu tekstowego przed określonym znakiem, ogólna formuła to:
PRAWDA( komórka , LEN( komórka ) - SEARCH(" char ", komórka ))Tutaj ponownie obliczamy pozycję znaku docelowego za pomocą funkcji SEARCH, odejmujemy ją od całkowitej długości łańcucha zwróconej przez LEN i przekazujemy różnicę do funkcji PRAWDA, dzięki czemu wyciąga ona tyle znaków z końca łańcucha.
Na przykład, aby usunąć tekst przed przecinkiem, formuła to:
=RIGHT(A2, LEN(A2) - SEARCH(",", A2))
W naszym przypadku po przecinku występuje znak spacji. Aby uniknąć wiodących spacji w wynikach, zawijamy formułę podstawową w funkcję TRIM:
=TRIM(RIGHT(A2, LEN(A2) - SEARCH(",", A2)))
Uwagi:
- Oba powyższe przykłady zakładają, że istnieje tylko jeden przypadek Jeśli istnieje wiele wystąpień, tekst zostanie usunięty przed/po delimiterze. pierwszy przypadek .
- Funkcja SEARCH to. niewrażliwy na wielkość liter Jeśli określony znak jest literą i chcesz rozróżnić wielkość litery, użyj funkcji rozróżnianie wielkości liter Funkcja FIND zamiast SEARCH.
Jak usunąć tekst po N-tym wystąpieniu znaku
W sytuacji, gdy ciąg źródłowy zawiera wiele instancji delimitera, może zaistnieć potrzeba usunięcia tekstu po określonej instancji. W tym celu należy użyć następującej formuły:
LEWA( komórka , FIND("#", SUBSTITUTE( komórka , " char ", "#", n )) -1)Gdzie n to wystąpienie znaku, po którym ma zostać usunięty tekst.
Wewnętrzna logika tej formuły wymaga użycia jakiegoś znaku, który nie występuje nigdzie w danych źródłowych, w naszym przypadku symbolu hash (#). Jeśli ten znak występuje w twoim zestawie danych, to użyj czegoś innego zamiast "#".
Na przykład, aby usunąć wszystko po 2. przecinku w A2 (i sam przecinek), formuła to:
=LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)
Jak działa ta formuła:
Kluczową częścią formuły jest funkcja FIND, która oblicza pozycję n-tego delimitera (przecinka w naszym przypadku).Oto jak:
Zastępujemy 2. przecinek w A2 symbolem hash (lub dowolnym innym znakiem, który nie występuje w Twoich danych) za pomocą SUBSTITUTE:
SUBSTYTUT(A2, ",", "#", 2)
Wynikowy ciąg trafia do 2. argumentu FIND, więc znajduje pozycję "#" w tym ciągu:
FIND("#", "Emma, Design# (102) 123-4568")
FIND mówi nam, że "#" jest 13. znakiem w łańcuchu. Aby poznać liczbę poprzedzających go znaków, wystarczy odjąć 1, a w wyniku otrzymamy 12:
FIND("#", SUBSTYTUT(A2, ",", "#", 2)) - 1
Numer ten trafia bezpośrednio do num_chars argument LEFT prosząc go o wyciągnięcie pierwszych 12 znaków z A2:
=LEFT(A2, 12)
To jest to!
Jak usunąć tekst przed N-tym wystąpieniem znaku
Ogólna formuła do usuwania podciągu przed określonym znakiem to:
PRAWO(SUBSTYTUT( komórka , " char ", "#", n ), LEN( komórka ) - FIND("#", SUBSTITUTE( komórka , " char ", "#", n )) -1)Na przykład, aby pozbawić tekstu przed 2 przecinkiem w A2, formuła to:
=RIGHT(SUBSTYTUT(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTYTUT(A2, ",", "#", 2)) -1)
Aby wyeliminować spację wiodącą, ponownie używamy funkcji TRIM jako wrappera:
=TRIM(RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))))
Jak działa ta formuła:
Podsumowując, dowiadujemy się ile znaków znajduje się po n-tym delimiterze i wyodrębniamy z prawej strony podłańcuch o odpowiedniej długości. Poniżej znajduje się rozkład formuły:
Najpierw zastępujemy 2. przecinek w A2 symbolem hash:
SUBSTYTUT(A2, ",", "#", 2)
Powstały w ten sposób ciąg znaków trafia do tekst argument PRAWDA:
RIGHT("Emma, Design# (102) 123-4568", ...
Następnie musimy określić, ile znaków wyodrębnić z końca ciągu. W tym celu znajdujemy pozycję symbolu hash w powyższym ciągu (czyli 13):
FIND("#", SUBSTITUTE(A2, ",", "#", 2))
I odejmij go od całkowitej długości ciągu (która jest równa 28):
LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))
Różnica (15) trafia do drugiego argumentu PRAWDA instruując go, aby wyciągnął ostatnie 15 znaków z ciągu w pierwszym argumencie:
RIGHT("Emma, Design# (102) 123-4568", 15)
Wyjściem jest podciąg " (102) 123-4568", który jest bardzo bliski pożądanemu rezultatowi, z wyjątkiem wiodącej spacji. Używamy więc funkcji TRIM, aby się jej pozbyć.
Jak usunąć tekst po ostatnim wystąpieniu znaku
W przypadku, gdy twoje wartości są oddzielone zmienną liczbą delimiterów, możesz chcieć usunąć wszystko po ostatniej instancji tego delimitera. Można to zrobić za pomocą następującej formuły:
LEWA( komórka , FIND("#", SUBSTITUTE( komórka , " char ", "#", LEN( komórka ) - LEN(SUBSTYTUT( komórka , " char ", "")))) -1)Załóżmy, że kolumna A zawiera różne informacje o pracownikach, ale wartością po ostatnim przecinku jest zawsze numer telefonu. Twoim celem jest usunięcie numerów telefonów i zachowanie wszystkich innych szczegółów.
Aby osiągnąć cel, możesz usunąć tekst po ostatnim przecinku w A2 za pomocą tej formuły:
=LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))) -1)
Skopiuj formułę w dół kolumny, a otrzymasz taki wynik:
Jak działa ta formuła:
Istota formuły polega na tym, że określamy pozycję ostatniego delimitera (przecinka) w łańcuchu i wyciągamy podłańcuch od lewej strony aż do delimitera. Uzyskanie pozycji delimitera jest najtrudniejszą częścią, a oto jak sobie z tym poradzimy:
Najpierw dowiadujemy się, ile przecinków znajduje się w oryginalnym ciągu. W tym celu zastępujemy każdy przecinek niczym ("") i podajemy powstały ciąg do funkcji LEN:
LEN(SUBSTYTUT(A2, ",","))
Dla A2 wynikiem jest 35, czyli liczba znaków w A2 bez przecinków.
Odejmij powyższą liczbę od całkowitej długości ciągu (38 znaków):
LEN(A2) - LEN(SUBSTYTUT(A2, ",","))
... a otrzymasz 3, czyli całkowitą liczbę przecinków w A2 (a także liczbę porządkową ostatniego przecinka).
Następnie wykorzystujesz znaną już kombinację funkcji FIND i SUBSTITUTE, aby uzyskać pozycję ostatniego przecinka w ciągu. Numer instancji (w naszym przypadku 3. przecinek) dostarczany jest przez wspomnianą formułę LEN SUBSTITUTE:
FIND("#", SUBSTITUTE(A2, ",", "#", 3))
Okazuje się, że trzeci przecinek jest 23. znakiem w A2, co oznacza, że musimy wyodrębnić 22 znaki poprzedzające go. Umieszczamy więc powyższą formułę minus 1 w polu num_chars argument z LEWEJ:
LEWA(A2, 23-1)
Jak usunąć tekst przed ostatnim wystąpieniem znaku
Aby usunąć wszystko przed ostatnią instancją określonego znaku, ogólna formuła to:
PRAWDA( komórka , LEN( komórka ) - FIND("#", SUBSTITUTE( komórka , " char ", "#", LEN( komórka ) - LEN(SUBSTYTUT( komórka , " char ", "")))))W naszej przykładowej tabeli, aby zlikwidować tekst przed ostatnim przecinkiem, formuła przyjmuje taką postać:
=RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))))
Jako wykończenie, zagnieżdżamy go w funkcji TRIM, aby wyeliminować przestrzenie wiodące:
=TRIM(RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))))
Jak działa ta formuła:
Podsumowując, otrzymujemy pozycję ostatniego przecinka, jak wyjaśniono w poprzednim przykładzie, i odejmujemy ją od całkowitej długości ciągu:
LEN(A2) - FIND("#", SUBSTYTUT(A2, ",", "#", LEN(A2) - LEN(SUBSTYTUT(A2, ",",""))))
Jako wynik otrzymujemy liczbę znaków po ostatnim przecinku i przekazujemy ją do funkcji PRAWDA, dzięki czemu wyprowadza ona tyle znaków z końca ciągu.
Funkcja niestandardowa do usuwania tekstu po obu stronach znaku
Jak widać na powyższych przykładach, można rozwiązać prawie każdy przypadek użycia, używając natywnych funkcji Excela w różnych kombinacjach. Problem polega na tym, że trzeba zapamiętać garść skomplikowanych formuł. Hmm, a co jeśli napiszemy własną funkcję, która obejmie wszystkie scenariusze? Brzmi jak dobry pomysł. Więc dodaj następujący kod VBA do swojego skoroszytu (szczegółowe kroki, aby wstawić VBA w Excelu totu):
Function 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 FunctionNasza funkcja nazywa się RemoveText i ma następującą składnię:
RemoveText(string, delimiter, occurrence, is_after)Gdzie:
String - to oryginalny ciąg tekstowy. Może być reprezentowany przez odwołanie do komórki.
Delimiter - znak przed/po którym ma być usunięty tekst.
Występowanie - instancja delimitera.
Czy po - wartość logiczna określająca, po której stronie ogranicznika usunąć tekst. Może to być pojedynczy znak lub ciąg znaków.
- TRUE - usuwa wszystko po delimiterze (łącznie z samym delimiterem).
- FALSE - usuwa wszystko przed delimiterem (łącznie z samym delimiterem).
Po wstawieniu kodu funkcji do skoroszytu można usunąć podłańcuchy z komórek za pomocą kompaktowych i eleganckich formuł.
Na przykład, aby wymazać wszystko po 1. przecinku w A2, formuła w B2 to:
=RemoveText(A3, ", ", 1, TRUE)
Aby usunąć wszystko przed 1. przecinkiem w A2, formuła w C2 to:
=RemoveText(A3, ", ", 1, FALSE)
Ponieważ nasza funkcja akceptuje łańcuch dla delimitera , umieszczamy przecinek i spację (", ") w 2. argumencie, aby oszczędzić kłopotów z przycinaniem wiodących spacji po tym.
Nasza niestandardowa funkcja działa pięknie, prawda? Ale jeśli myślisz, że to kompleksowe rozwiązanie, to jeszcze nie widziałeś następnego przykładu :)
Usuń wszystko przed, po lub pomiędzy znakami
Aby uzyskać jeszcze więcej opcji usuwania pojedynczych znaków lub tekstu z wielu komórek, według dopasowania lub pozycji, dodaj nasz pakiet Ultimate Suite do swojego zestawu narzędzi Excela.
Tutaj przyjrzymy się bliżej Usuń według pozycji funkcja znajdująca się na Dane Ablebits tab> Tekst grupa> Usuń .
Poniżej omówimy dwa najczęstsze scenariusze.
Usuń wszystko przed lub po określonym tekście
Załóżmy, że wszystkie łańcuchy źródłowe zawierają jakieś wspólne słowo lub tekst i chcesz usunąć wszystko przed lub po tym tekście. Aby to zrobić, zaznacz dane źródłowe, uruchom program Usuń według pozycji i skonfigurować go tak, jak pokazano poniżej:
- Wybierz Wszystkie znaki przed tekstem lub Wszystkie znaki po tekście i wpisz tekst klucza (lub znak) w polu obok.
- W zależności od tego, czy duże i małe litery mają być traktowane jako różne czy takie same znaki, należy zaznaczyć lub odznaczyć opcję Rozróżnianie wielkości liter pudełko.
- Hit Usuń .
W tym przykładzie usuwamy wszystkie znaki poprzedzające słowo "błąd" w komórkach A2:A8:
I uzyskać dokładnie taki wynik, jakiego szukamy:
Usuń tekst pomiędzy dwoma znakami
W sytuacji, gdy nieistotne informacje znajdują się pomiędzy 2 konkretnymi znakami, oto jak można je szybko usunąć:
- Wybierz Usuń wszystkie podłańcuchy i wpisz dwa znaki w poniższych polach.
- Jeśli znaki "pomiędzy" również powinny zostać usunięte, sprawdź Włącznie z delimitatorami pudełko.
- Kliknij Usuń .
Jako przykład, usuwamy wszystko pomiędzy dwoma znakami tyldy (~), a w wyniku otrzymujemy idealnie oczyszczone ciągi znaków:
Aby wypróbować inne przydatne funkcje zawarte w tym wielofunkcyjnym narzędziu, zachęcam do pobrania wersji ewaluacyjnej na końcu tego wpisu. Dziękuję za lekturę i mam nadzieję, że zobaczymy się na naszym blogu w przyszłym tygodniu!
Dostępne pliki do pobrania
Usuń pierwsze lub ostatnie znaki - przykłady (plik .xlsm)
Ultimate Suite - wersja próbna (plik .exe)