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.

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.

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.
