Usuń tekst przed, po lub pomiędzy dwoma znakami w programie Excel

  • Udostępnij To
Michael Brown

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:

    1. Zaznacz wszystkie komórki, w których chcesz usunąć tekst.
    2. Naciśnij Ctrl + H, aby otworzyć Znajdź i zamień dialog.
    3. 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).
    4. Zostaw Wymienić z pudełko puste.
    5. 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:

    1. W komórce obok pierwszej komórki ze swoimi danymi wpisz oczekiwany wynik i naciśnij Enter .
    2. 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.
    3. 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 Function

    Nasza 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:

    1. Wybierz Wszystkie znaki przed tekstem lub Wszystkie znaki po tekście i wpisz tekst klucza (lub znak) w polu obok.
    2. 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.
    3. 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ąć:

    1. Wybierz Usuń wszystkie podłańcuchy i wpisz dwa znaki w poniższych polach.
    2. Jeśli znaki "pomiędzy" również powinny zostać usunięte, sprawdź Włącznie z delimitatorami pudełko.
    3. 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)

    Michael Brown jest oddanym entuzjastą technologii z pasją do upraszczania złożonych procesów za pomocą narzędzi programowych. Dzięki ponad dziesięcioletniemu doświadczeniu w branży technologicznej doskonalił swoje umiejętności w programach Microsoft Excel i Outlook, a także w Arkuszach i Dokumentach Google. Blog Michaela jest poświęcony dzieleniu się swoją wiedzą i doświadczeniem z innymi, dostarczając łatwych do zastosowania wskazówek i samouczków w celu poprawy produktywności i wydajności. Niezależnie od tego, czy jesteś doświadczonym profesjonalistą, czy początkującym, blog Michaela oferuje cenne spostrzeżenia i praktyczne porady dotyczące maksymalnego wykorzystania tych niezbędnych narzędzi programowych.