Baza wiedzy / Excel

ZASTĄP w Excelu: zamiana według pozycji, REPLACE i PODSTAW

Zamiana fragmentu o znanej pozycji, końcówka liczona przez DŁ oraz różnica między ZASTĄP i PODSTAW. Małe przykłady pokazują, co pozostaje po obu stronach.

Kajo RudzińskiOpublikowano Aktualizacja 4 min czytania

Maszyna wymienia środkowy segment szeregu płytek, zachowując obie końcówki

ZASTĄP zamienia fragment tekstu określony przez pozycję początku i liczbę znaków. Angielska nazwa to REPLACE. Ja wybieram tę funkcję, gdy znam układ kodu, na przykład wiem, że znaki od piątego do ósmego oznaczają serię produktu.

Jeżeli szukasz konkretnego słowa niezależnie od miejsca, potrzebujesz PODSTAW, czyli SUBSTITUTE. W poprzedniej polskiej wersji pomylono te operacje. Poniżej obie wersje językowe opisują zamianę pozycyjną i jej cztery argumenty.

Cztery wymagane argumenty

=ZASTĄP(stary_tekst;nr_poz_pocz;liczba_znaków;nowy_tekst)

Pierwszy argument jest tekstem lub odwołaniem do komórki. Drugi wskazuje pierwszy zastępowany znak, licząc od 1. Trzeci określa liczbę usuwanych znaków, a czwarty tekst wstawiany w ich miejsce. Nowy fragment może mieć inną długość niż usuwany.

Składnię potwierdza dokumentacja Microsoft ZASTĄP. Obejmuje m.in. Microsoft 365 oraz Excel 2016, 2019, 2021 i 2024. W przykładach używam polskich nazw i średników. Angielski zapis ma postać =REPLACE(old_text,start_num,num_chars,new_text) przy założonych separatorach amerykańskich.

Przykład: wymiana środkowego segmentu kodu

W syntetycznym kodzie ABCD1234XYZ pierwsze cztery znaki to ABCD, następne cztery to 1234, a końcówka to XYZ. Chcę zmienić wyłącznie środkowy segment na 0000.

=ZASTĄP("ABCD1234XYZ";5;4;"0000")

Wynik to ABCD0000XYZ. Zaczynam na pozycji piątej, usuwam cztery znaki i wstawiam nowy fragment. Końcówka pozostaje bez zmian. Gdy kod jest w A2, zamiast stałego tekstu użyję odwołania =ZASTĄP(A2;5;4;"0000").

Nie trzeba dokładać FRAGMENT.TEKSTU, skoro już znam początek i długość. Ta dodatkowa funkcja nie zamieni numeru pozycji na wyszukiwany tekst. Argumenty muszą zachować role określone w składni.

Długość nowego fragmentu może być inna

Załóżmy, że tekst to Jan Kowalski. Cztery pierwsze znaki to imię i spacja, więc nazwisko zaczyna się na pozycji 5. Słowo Kowalski ma osiem znaków.

=ZASTĄP("Jan Kowalski";5;8;"Nowak")

Otrzymam Jan Nowak. Usunąłem osiem znaków, a wstawiłem pięć. Funkcja nie dopisuje trzech spacji w celu zachowania pierwotnej długości. Dla pliku o stałej szerokości pól byłaby to dodatkowa decyzja, którą trzeba obsłużyć osobno.

Spacje i myślniki też zajmują pozycje. Dla 123-456-789 środkowa trójka zaczyna się na pozycji 5, więc =ZASTĄP("123-456-789";5;3;"XXX") daje 123-XXX-789. To przykład na syntetycznym kodzie, bez danych osobowych.

Ostatnie trzy znaki: długość minus dwa

Jeżeli tekst w A2 ma zmienną długość, początek jego ostatnich trzech znaków wyznaczam jako długość minus dwa. Dla ExcelFunction długość wynosi 13, więc początek to pozycja 11.

=ZASTĄP(A2;DŁ(A2)-2;3;"XYZ")

Przy A2 równym ExcelFunction wynikiem będzie ExcelFunctXYZ. Poprzedni angielski przykład odejmował 3, zaczynał na pozycji 10 i zostawiał końcowe n. Poprawka wynika z liczenia pozycji od 1: końcowy fragment długości k zaczyna się na pozycji n-k+1.

Formuła zakłada co najmniej trzy znaki w źródle. Przy krótszych kodach najpierw ustal regułę postępowania, zamiast udawać, że końcowy segment zawsze istnieje. Microsoft DŁ opisuje także liczenie spacji i różnice zgodności dla złożonych znaków Unicode. Nasze przykłady używają prostych liter i cyfr.

Stała bramka wskazuje pozycje w jednym szeregu, a lupa szuka charakterystycznego elementu w drugim

ZASTĄP i PODSTAW na tych samych danych

Dla AA-BB-AA zamiana pierwszych dwóch znaków na ZZ daje ZZ-BB-AA. Pozycja jest ustalona z góry:

=ZASTĄP("AA-BB-AA";1;2;"ZZ")

Jeżeli chcesz zamienić każde wystąpienie tekstu AA, użyjesz =PODSTAW("AA-BB-AA";"AA";"ZZ"). Wynik to ZZ-BB-ZZ. Z kolei czwarty argument PODSTAW może wskazać wybrane wystąpienie. W ZASTĄP czwarty argument zawsze oznacza nowy tekst.

Rozróżnienie potwierdza dokumentacja SUBSTITUTE. Więcej o zamianie treści pokazuję w poradniku PODSTAW. Podobne czasowniki w opisie nie oznaczają identycznej składni.

Układ kodów musi być rzeczywiście stały

Pozycja piąta ma sens tylko wtedy, gdy źródło zachowuje przyjęty układ. Dodatkowa spacja, zmienna długość prefiksu lub inny separator mogą przesunąć segment. Funkcja nadal może oddać poprawny tekst technicznie, lecz zmienić niewłaściwy fragment.

Przed skopiowaniem formuły na całą kolumnę oglądam kilka różnych kodów: krótki, długi i taki z odstępem. Zachowuję oryginał w osobnej kolumnie. Po zmianie porównuję początek i koniec, żeby upewnić się, że pozostały nietknięte.

Jeśli struktura jest zmienna, najpierw potrzebuję reguły odnalezienia segmentu. Czasem odpowiednią drogą będzie wyszukanie separatora, a czasem PODSTAW. Nie próbuję ratować dowolnego tekstu jedną stałą pozycją. W szerszym procesie przyda się też plan czyszczenia danych.

Ćwiczenie: przewidź, co zostaje po obu stronach

Dla ABCD1234XYZ zmień cztery znaki od pozycji 5 na Q. Oczekiwany wynik to ABCDQXYZ. Następnie wstaw 987654 w miejsce tego samego segmentu. Powinno wyjść ABCD987654XYZ. Zmieniasz długość środka, zachowując obie strony.

Na końcu dodaj jedną spację na początku źródła i wyjaśnij, dlaczego dawna pozycja 5 przestaje wskazywać początek cyfr. Taki przypadek sprawdza założenie o formacie danych, którego sam poprawny zapis funkcji nie potrafi zagwarantować.

Najważniejsze w pigułce

Czym ZASTĄP różni się od PODSTAW?

ZASTĄP używa pozycji i liczby znaków. PODSTAW szuka określonej treści i może wybrać konkretne wystąpienie.

Jak policzyć początek ostatnich trzech znaków?

Dla tekstu mającego co najmniej trzy znaki użyj DŁ(A2)-2. Ogólny wzór początku końcówki to długość minus liczba zastępowanych znaków plus jeden.

Czy nowy fragment musi mieć tę samą długość?

Nie. Argument liczba_znaków określa usuwany fragment, a nowy tekst może być krótszy lub dłuższy.

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.