Baza wiedzy / Excel

FRAGMENT.TEKSTU w Excelu: pozycja, długość i separatory

Wycinam numer z kodu zamówienia i część po separatorze. Pokazuję przesunięcie o jeden znak, puste wyniki i alternatywę TEKST.PO.

Kajo RudzińskiOpublikowano Aktualizacja 5 min czytania

Zaznaczony środkowy fragment paska złotych elementów trafia na osobną tacę

Z numeru ORD-2024-099 chcę wyciągnąć samo 099. To dobry moment na FRAGMENT.TEKSTU: znam początek fragmentu i jego długość. Ja zaczynam od policzenia znaków, bo formuła przesunięta o jedną pozycję może zwrócić zupełnie poprawny tekst z niewłaściwego miejsca.

Składnia i dostępność

Polska nazwa funkcji to FRAGMENT.TEKSTU, a angielska MID. Dokumentacja Microsoft wymienia Microsoft 365 oraz Excel 2024, 2021, 2019 i 2016. W polskich formułach używaj nazwy FRAGMENT.TEKSTU; ŚRODEK nie jest poprawną nazwą tej funkcji.

=FRAGMENT.TEKSTU(tekst;nr_poz_pocz;liczba_znaków)

Pierwszy argument to tekst lub komórka. Drugi wskazuje pierwszy pobierany znak, liczony od 1. Trzeci określa, ile znaków pobrać, a nie numer ostatniego znaku. Spacje i myślniki również zajmują pozycje.

W przykładach używam polskich nazw oraz średników. W angielskiej wersji są nazwy MID, SEARCH i LEN oraz przecinki. Faktyczny separator zależy od ustawień regionalnych. Zmiana samej nazwy funkcji nie zawsze wystarczy do przeniesienia formuły między konfiguracjami.

Stała pozycja: numer zamówienia

Załóżmy, że A2 zawiera syntetyczny identyfikator ORD-2024-099. Litery ORD zajmują pozycje 1 do 3, pierwszy myślnik pozycję 4, rok pozycje 5 do 8, a kolejny myślnik pozycję 9. Numer zaczyna się na pozycji 10.

=FRAGMENT.TEKSTU(A2;10;3)

Wynik to tekst 099. Zapis z początkiem 9 dałby -09. To istotna poprawka: formuła jest składniowo prawidłowa w obu przypadkach, ale tylko jedna odpowiada na nasze pytanie. Zera początkowe pozostają częścią tekstu, co ma znaczenie dla identyfikatora.

Stała pozycja jest uczciwym założeniem tylko wtedy, gdy format jest stały. Jeżeli prefiks zmieni się na ORDER, ta sama formuła zacznie wycinać inny fragment. Dlatego przed użyciem jej w całej kolumnie oglądam również rekord dłuższy, krótszy i bez oczekiwanego separatora.

Kilka małych przykładów

Każdy wiersz tabeli to osobny przykład z podanym tekstem w A2. Dane są syntetyczne, a wyniki wynikają z ponumerowania znaków.

Tekst w A2 Formuła Wynik
123-ABC-456 =FRAGMENT.TEKSTU(A2;5;3) ABC
Excel2024 =FRAGMENT.TEKSTU(A2;6;4) 2024
PL-11-XYZ =FRAGMENT.TEKSTU(A2;4;2) 11
Excel to potężne narzędzie =FRAGMENT.TEKSTU(A2;7;2) to

Pierwszy przykład bierze litery między myślnikami, drugi część złożoną z cyfr. W obu przypadkach wynikiem funkcji jest tekst. Nie zakładam automatycznie, że wycięty rok jest już poprawną datą, a kod z cyfr liczbą przeznaczoną do sumowania.

Ruchoma pozycja: tekst po separatorze

Dla A2 równego ola@example.test chcę pobrać część po znaku @. Prefiks może mieć różną długość, więc stały numer początku byłby kruchy. Korzystam z SZUKAJ.TEKST oraz DŁ.

=FRAGMENT.TEKSTU(A2;SZUKAJ.TEKST("@";A2)+1;DŁ(A2))

Znak @ jest czwarty. Dodaję 1, więc zaczynam od piątego znaku, litery e. Podaję długość całego tekstu jako wystarczająco dużą liczbę pobieranych znaków; funkcja kończy na końcu ciągu. Otrzymuję example.test, bez dopisywania brakujących znaków.

To przykład wydobycia fragmentu z założeniem jednego separatora i uporządkowanego wejścia. Nie jest pełną walidacją adresu e-mail. Brak @ spowoduje błąd wyszukiwania, a dodatkowe @ wymagają decyzji, które wystąpienie ma znaczenie. Nie ukrywam takich rekordów przez automatyczną zamianę błędu na pusty wynik.

Dwa paski o różnej długości mają zaznaczone fragmenty po wspólnym rodzaju separatora

Końcówka tekstu i przesunięcie o jeden

Jeżeli chcę pobrać ostatnie pięć znaków tekstu o długości co najmniej pięciu, początek wynosi długość minus pięć plus jeden. Dla A2 zawierającego ABCDE12345 długość to 10, więc zaczynam od pozycji 6.

=FRAGMENT.TEKSTU(A2;DŁ(A2)-5+1;5)

Wynik to 12345. Pominięcie dodawanej jedynki przesunęłoby początek na 5 i dało E1234. Dla tekstu krótszego niż pięć znaków ten konkretny wzór może dać niepoprawny początek. Jeśli zadanie dotyczy po prostu końcówki, wygodniej dobrać funkcję PRAWY zamiast rozbudowywać wycinanie ze środka.

Podobnego założenia wymaga pobieranie inicjałów. Numer 5 wpisany na sztywno może pasować do jednego imienia, a dla innego wskazać spację. W ogólnym rozwiązaniu trzeba zdefiniować separator oraz sposób traktowania nazw wieloczłonowych. Nie przedstawiam jednego szczęśliwego przykładu jako uniwersalnej reguły dla ludzi.

Pusty tekst i błąd to różne wyniki

Dla tekstu ABC początek 5 zwróci pusty tekst "". Początek 2 i długość 10 zwrócą BC. Długość 0 zwróci pusty tekst. Początek mniejszy od 1 lub ujemna długość powodują błąd typu VALUE, widoczny w polskim Excelu jako #ARG!, a w angielskim jako #VALUE!.

Nie opisuję zatem początku poza końcem tekstu jako błędu. Pusty wynik może być poprawnym działaniem funkcji i jednocześnie sygnałem, że dane nie spełniają założonego formatu. W kontroli importu potrzebuję widzieć obie rzeczy: wynik oraz informację, dlaczego oczekiwany fragment nie powstał.

W tekście używam zwykłych liter i cyfr. Microsoft dokumentuje również różnice liczenia niektórych znaków Unicode zależne od wersji zgodności skoroszytu. Gdy format dopuszcza takie znaki, nie utożsamiam automatycznie jednego widocznego symbolu z jedną pozycją. Dla naszego kodu ASCII ta dodatkowa komplikacja nie występuje.

Kiedy wybrać TEKST.PO

Jeżeli zadanie brzmi „weź wszystko po @”, w Microsoft 365 lub Excelu 2024 mogę użyć TEKST.PO: =TEKST.PO(A2;"@"). To bezpośrednio opisuje separator i oszczędza składanie kilku funkcji. Nie przypisuję tej dostępności pudełkowemu Excelowi 2016 czy 2019.

FRAGMENT.TEKSTU nadal ma sens przy stałych pozycjach, określonej długości oraz pracy w starszych wspieranych wersjach. Wybór zależy od formatu danych i środowiska odbiorcy. Dobra formuła ma pasować do tych warunków, zamiast być po prostu najnowszą dostępną funkcją.

Ćwiczenie na zmianę formatu

Dla INV-2026-007 wskaż pozycję początku końcówki 007 i pobierz trzy znaki. Oczekiwany początek to 10. Następnie zmień prefiks na INVOICE i wyjaśnij, dlaczego stała pozycja przestała pasować. To dobry punkt do wyboru formuły opartej na separatorze.

Potem dopisz przykład bez separatora i zdecyduj, jak go oznaczysz do poprawy. Więcej o szukaniu początku znajdziesz w haśle SZUKAJ.TEKST. Do odtwarzania tekstu z gotowych części przyda się POŁĄCZ.TEKSTY.

Najważniejsze w pigułce

Czy ŚRODEK jest poprawną nazwą MID w polskim Excelu?

Nie. Poprawna polska nazwa MID to FRAGMENT.TEKSTU.

Co się stanie, gdy początek jest poza końcem tekstu?

Funkcja zwróci pusty tekst, a nie błąd. Początek mniejszy od 1 i ujemna długość powodują błąd.

Jak pobrać 099 z ORD-2024-099?

Użyj początku 10 i długości 3. Dziewiąty znak jest myślnikiem, więc początek 9 dałby -09.

Przy pracy nad artykułem użyto w zautomatyzowany sposób sztucznej inteligencji. Jeśli też chcesz tak umieć, sprawdź ten projekt.

Kajo Rudziński

Newsletter KajoData

Zostańmy w kontakcie.

Piszę o analizie danych, uczeniu się i zmianie pracy. Dzielę się tym, co pomaga mi ogarniać technologię i zawodowe decyzje. Jeśli lubisz ten sposób myślenia, zapraszam do mojego newslettera.