fbpx

Funkcje Tekst.Przed() i Tekst.Po() w Excelu

Ile razy musiałeś „wyciągać” lub rozdzielać dynamicznie imiona i nazwiska i wyświetlać je w osobnej tabeli? A może tytuły naukowe? Prefixy numerów telefonów, aby połączyć je z odpowiednim krajem? Nawet jeśli nie miałeś takiej potrzeby to rozwiązanie tego nie jest bułką z masłem szczególnie gdy ilość znaków lub słów się zmienia z każdą komórką a i separatory się zmieniają. Narzędzie takie jak Tekst Jako Kolumny niestety nie działa dynamicznie tylko statycznie i za każdym razem trzeba czynność powtarzać. Dodatkowo trzeba by było użyć go tyle razy ile jest wariantów w danych źródłowych. I jeszcze sortować… Eh!

Aby obsłużyć te problemy można użyć zestawu zagnieżdżonych funkcji tekstowych wraz z funkcjami warunkowymi, gdy ilość słów się różni. Formuła na pewno będzie działała poprawnie, jednak utworzenie takiej wymaga doświadczenia, czasu i testów. Takiego potworka zobaczysz w późniejszym przykładzie. Na pewno nie będzie ona łatwo czytelna i na pewno będzie bardzo długa.

Microsoft wraz z wersją 365 wyszedł naprzeciw naszym cierpieniom i wprowadził nowe funkcje TEKST.PRZED i TEKST.PO, które eliminują potrzebę zagnieżdżania ze sobą funkcji w tradycyjny sposób. 

Zobacz jakie to proste! 😊

Czym są funkcje TEKST.PRZED i TEKST.PO?

Funkcje TEKST.PRZED oraz TEKST.PO zwracają tekst (zazwyczaj z odwołania/adresu) przed lub po tzw. ogranicznikiem, separatorem lub dowolnym innym znakiem. Separator w rzeczywistości nie musi być spacją, średnikiem czy myślnikiem etc. Obie funkcje są takim odbiciem lustrzanym wobec siebie tak samo jak funkcje LEWY i PRAWY. W zasadzie właśnie te ostatnie mają być zastąpione w większości przypadków przez ich omawianych tu następców.

Gdzie są dostępne funkcje TEKST.PRZED i TEKST.PO?

Jeśli posiadasz subskrypcję Microsoft 365 to możesz się cieszyć z najnowszych funkcjonalności i korzystać z tych funkcji. Technicznie znajdziesz je w bibliotece funkcji tekstowych na karcie Formuły. 

TEKST.PRZED i TEKST.PO zostały wraz z 12 innymi ogłoszone na początku 2022 roku, więc z historycznego punktu widzenia są to nowe dzieci Excela.  Dziękujemy Ci Joe McDaid i prosimy o więcej! 

Pssst… 😉 narzędzia, które masz dostępne od lat, a potrafią to samo są wbudowane w POWER QUERY :).  Zapraszamy do nas na kurs POWER QUERY!

Power Query Text.Before

Jaka jest składnia funkcji TEKST.PRZED i TEKST.PO? Ile mają argumentów?

Jedna i druga funkcja mają po 7 takich samych argumentów, a składnia jest następująca:

=TEKST.PRZED(text; delimiter; [instance_num]; [match_mode]; [match_end]; [if_not_found])

Zwróć uwagę, że na czas tworzenia tego artykułu nie ma polskiego tłumaczenia argumentów w oknie dialogowym funkcji, natomiast w pasku formuły podpowiedzi i listy rozwijane już są po polsku. Niemniej jednak bez obaw, tajemnicze nazwy za moment będą jasne i zrozumiałe.

text       Pierwszy wymagany argument jest to tekst, z którego chcesz wyodrębnić jego część. Zwykle jest to odwołanie, inaczej użycie tej funkcji miało by dość wątpliwy sens. 

delimiter       Inaczej ogranicznik, separator. Może to być zwykły znak mogący wystąpić w tekście. Oznacza punkt, który jest granicą, do której lub od której będzie zwracany tekst wynikowy. Jest to drugi i ostatni argument wymagany, który musisz podać w tych funkcjach.

instance_num       Jest to liczba, w której podajesz od którego wystąpienia ogranicznika chcesz zwracać tekst. A może od drugiego wystąpienia? Wprowadź zatem 2. Domyślnie jest od samego początku, czyli od 1. 

To z tym argumentem możesz zdziałać cuda i dynamicznie manipulować wartościami. Dodatkowo, wpisanie -1 (minus jeden) odwróci poszukiwanie (pierwszego) separatora i wystartuje z przeciwnego kierunku, a mówiąc precyzyjnie zwróci tekst przed ostatnim separatorem. Analogicznie -2 dla drugiego przed-przedostatniego. Np. z „Ala ma kota” zwróci „Ala ma” lub „Ala” dla -2.

match_mode    Typ dopasowania, gdybyśmy chcieli tłumaczyć na język polski. Ustawiamy 0 lub 1 gdy chcemy szukać separatora w postaci litery z rozróżnieniem na wielkie i małe litery. Tu należy uważać, ponieważ domyślnie jest wrażliwy na wielkość liter, czyli 0. Pozbywamy funkcji tej wrażliwości zmieniając argument na 1. 

Używałeś kiedyś kombinacji LEWY i ZNAJDŹ? Właśnie ZNAJDŹ jest domyślnie wrażliwe na wielkość liter (Case sensitive). SZUKAJ.TEKST natomiast wrażliwy nie jest. O wiele łatwiej jest wpisać 0 lub 1 niż zagnieżdżać kolejne funkcje, prawda?

match_end     Ten argument można przetłumaczyć dla wygody jako dopasuj końcówkę. Oznacza to, że na końcu tekstu zostanie dodany „niewidzialny” separator. Zero (0) nie wstawia go, a jeden (1) wstawia. W praktyce, gdy separator nie zostanie znaleziony to zwrócony zostanie cały tekst, inaczej będzie błąd #N/D.

Gdybyś chciał to osiągnąć w tradycyjny sposób, należy całą zagnieżdżoną formułę (LEWY/ZNAJDŹ) użyć ponownie w JEŻELI.BŁĄD, ponieważ wynikiem będzie #ARG!. 

if_not_found    Ostatni opcjonalny argument pozwala nam wyświetlić tekst lub odwołanie w przypadku nie znalezionego fragmentu, a dokładniej mówiąc gdy szukany separator nie istnieje w tekście. Do naszego monstrum z poprzedniego argumentu, należy dodać JEŻELI.ND na sam początek, aby uzyskać taki sam efekt w tradycyjnym rozwiązaniu z przed pakietu 365.

Jak wyodrębnić tekst za pomocą TEKST.PRZED oraz TEKST.PO? Jak używać tych funkcji?

Aby wyodrębnić tekst przed ogranicznikiem lub po wystarczy użyć dwóch wymaganych argumentów text i delimiter. Załóżmy, że chcemy dynamicznie rozdzielać imiona od nazwisk

Tekst-przed - ex1

W jaki sposób wyodrębniamy imię i nazwisko tradycyjną metodą? A tak jak poniżej. Widać różnicę?

Imię

=LEWY(A2; ZNAJDŹ(” „;A2)-1)

Nazwisko

=PRAWY(A2;DŁ(A2)-ZNAJDŹ(” „;A2))

Jak wyodrębnić tekst za pomocą TEKST.PRZED oraz TEKST.PO bez uwzględnienia wielkości znaków?

Jak już wcześniej zobaczyłeś/aś, aby włączyć lub wyłączyć sprawdzanie wielkości liter używasz argumentu match_mode. Domyślnie funkcje, które omawiamy mają włączoną opcję uwzględniania wielkości liter. Aby to wyłączyć należy czwarty argument podać w postaci liczby 1. Zobacz, że zlepek danych w tabelce ma wyraz Country, który w całości jest naszym separatorem. Raz występuje z wielkiej litery a raz z małej. Żaden problem dla nas!

Jeśli zdarzy się kiedyś taka potrzeba to poniżej jest przykład użycia:

Jak wygląda wersja tradycyjna w tym przykładzie?

=PRAWY(A2;DŁ(A2)-SZUKAJ.TEKST(„country”;A2)-6)

Jak wyodrębnić tekst po n-tym separatorze?

Argument służący do wyboru, od którego separatora chcemy zacząć poszukiwanie to instance_number – pierwszy opcjonalny. W przykładzie mamy zrzut z systemu transakcyjnego w formie ciągu tekstowego, z którego potrzebujemy do dalszych analiz wyodrębnić datę, którą Excel będzie wstanie rozpoznać. Póki co jest tekstem połączonym z innym ciągiem i występuje po 3 separatorze myślnika. A myślników jest 5. Plik tekstowe csv mogą być długim ciągiem oddzielonym przecinkami lub średnikami.

=TEKST.PRZED(text,delimiter,[instance_num], [match_mode], [match_end], [if_not_found])

Tekst-po- instNum ex3

W związku z tym, że w przykładzie posługuję się wyodrębnianiem daty, która ma stałą długość dziesięciu znaków to tradycyjna metoda za pomocą funkcji PRAWY sprawdzi się nawet lepiej a przynajmniej o jeden argument krócej. Jednak nie zawsze może być to data i/lub stała ilość znaków.

Czym jest argument match_end w funkcji TEKST.PRZED oraz TEKST.PO?

=TEKST.PRZED(text,delimiter,[instance_num], [match_mode], [match_end], [if_not_found])

Argument match_end umożliwia nam wybranie dwóch wariantów. W przypadku gdy szukany separator w tekście do podzielenia nie występuje (w argumencie text) to możemy otrzymać wynik #N/D lub wyświetlić cały tekst. Obie wersje w zależności od naszego projektu mogą być bardzo przydatne. Takie #N/D możemy wyświetlić i sformatować warunkowo narzędziem formatowanie warunkowe i/lub wykorzystać ostatni argument opcjonalny funkcji [if_not_found].

W poniższym przykładzie naszym zadaniem jest wyświetlenie pełnych tytułów naukowych, które są co najmniej „doktorem”.

Naszym ogranicznikiem, przed którym chcemy wyodrębnić tekst jest ostatnia kropka. Czasem kropek w tekście jest 3, czasem 2 a czasem zero gdy tytuł to magister lub wcale nie ma tytułu. W takim przypadku funkcja ułatwia nam to zadanie i zaczniemy poszukiwania od końca tekstu. Ustawiamy argument instance_number na -1. Oznacza to dosłownie znajdź pierwszy od prawej. Argument związany z wielkością liter możemy pominąć i zostawić domyślne 0 (case sensitive). Kropka jako separator tego nie rozróżnia. Ostatecznie nasz zwrócony tekst jest pozbawiony separatora kropki, z przed którego wyciągnęliśmy ciąg znaków, zatem dołączamy znakiem konkatenacji (ampersandem) brakujące ogniwo.

=TEKST.PRZED(A3;”.”;-1;;0) &”.”

Tekst-przed - ex4 - m_e0

Gdyby zdarzyło się, że tytułów jest więcej i chcielibyśmy wyświetlić je wszystkie wtedy musimy lekko zmodyfikować logikę naszej funkcji. Zakładamy, że osoba bez żadnego tytułu posiada wykształcenie średnie. Zwróć uwagę że Mira Kwiatkowska nie ma dwóch spacji, a szukamy drugiej spacji od prawej strony, która wskazuje nam, że dalej powinien być tytuł naukowy.

Aby uzyskać ten sam efekt możemy użyć tradycyjnej metody, którą możesz sobie przeanalizować poniżej… jeśli masz odpowiednią motywację 😊 .

Nowe rozwiązanie:

=TEKST.PRZED(A3;” „;-2;;0;”średnie”)

Stare rozwiązanie (propozycja):

=JEŻELI.BŁĄD(LEWY(A3;JEŻELI(DŁ(A3)-DŁ(PODSTAW(A3;” „;””))>1;ZNAJDŹ(” „;A3;DŁ(A3)-DŁ(PODSTAW(A3;” „;””))+2);”średnie”));”średnie”)

Tekst.Przed Tekst.Po

Czemu i kiedy TEKST.PRZED oraz TEKST.PO zwracają błędy? Jakie i jak temu zaradzić?

Obie funkcje mogą zwrócić 2 rodzaje błędów: 

  • #ARG!
    • Aby uniknąć tego błędu należy pamiętać, aby argument instance_number nie był 0, oraz aby wartość tego argumentu nie była większa niż ilość znaków w tekście do podzielenia.
  • #N/D
    • Ten błąd pojawi się gdy w tekście nie ma ogranicznika, którego szukamy (argumentu delimiter).
    • Jeśli szukamy np. od 3 spacji w tekście, a spacje są tylko 2 to również otrzymamy błąd #N/D jeśli ta 3 nie jest dłuższa od długości całego tekstu, bo wystąpi #ARG!.
    • Jeśli w ostatnim argumencie funkcji [if_not_found] wprowadzimy jakieś odwołanie lub tekst, wtedy ten błąd oczywiście nie wystąpi. 

Uwaga! To są podstawowe błędy przewidziane dla tej funkcji przez Microsoft, ale inwencja twórcza użytkowników Excela nie zna granic, dlatego też jest pewne, że takie błędy jak #NAZWA?, #WARTOŚĆ! czy #DZIEL/0! wystąpią prędzej czy później. Tu nasuwa się zasadnicze pytanie jak na to zaradzić? Odpowiedź jest prosta! 😊 Zapraszamy na nasze kursy Excel

Jak używać znaków wieloznacznych w funkcjach TEKST.PRZED i TEKST.PO?

Znaki wieloznaczne takie jak „*” (dowolny ciąg znaków)  i „?” (dowolny jeden znak) nie są obsługiwane przez te funkcje. To oznacza, że przy takim tekście do podziału jak „ala ma kota”, nie możemy jako separatora użyć np. „??”, który miałby znaleźć dowolny (pierwszy) ciąg dwóch znaków i zwrócić „ala „.

Oczywiście są możliwości na obejście tego problemu, ale nie o to chodzi, aby sobie sprawy komplikować tylko ułatwiać. 

W Excelu generalnie nie ma rzeczy, których się nie da zrobić!

Zobacz również:

Szkolenia:

udostępnij:
Gratulacje!
Wniosek został wysłany prawidłowo.
Dziękujemy za przesłanie zapytania. Skontaktujemy się z Tobą najszybciej jak to możliwe.