Spis treści
W tym tutorialu przyjrzymy się kilku sposobom znajdowania i zastępowania wielu słów, ciągów znaków lub pojedynczych znaków, abyś mógł wybrać ten, który najlepiej odpowiada Twoim potrzebom.
W jaki sposób ludzie zazwyczaj wyszukują w programie Excel? Najczęściej za pomocą funkcji Znajdź & Zamień, która działa dobrze dla pojedynczych wartości. Ale co, jeśli masz dziesiątki, a nawet setki pozycji do zastąpienia? Z pewnością nikt nie chciałby dokonać wszystkich tych zastąpień ręcznie jeden po drugim, a następnie zrobić to wszystko od nowa, gdy dane się zmieniają. Na szczęście istnieje kilka bardziej skutecznych metod, aby zrobić masowe zastąpienie w programie Excel, azamierzamy szczegółowo zbadać każdy z nich.
Znajdź i zastąp wiele wartości za pomocą zagnieżdżonego SUBSTITUTE
Najprostszym sposobem na znalezienie i zastąpienie wielu wpisów w Excelu jest użycie funkcji SUBSTITUTE.
Logika formuły jest bardzo prosta: piszesz kilka pojedynczych funkcji, które zastępują starą wartość nową, a następnie zagnieżdżasz te funkcje jedna w drugą, tak że każda kolejna funkcja SUBSTITUTE używa wyjścia poprzedniej SUBSTITUTE do szukania następnej wartości.
SUBSTYTUT(SUBSTYTUT(SUBSTYTUT( tekst , stary_tekst1 , nowy_tekst1 ), stary_tekst2 , nowy_tekst2 ), stary_tekst3 , nowy_tekst3 )Załóżmy, że na liście lokalizacji w A2:A10 chcemy zastąpić skrócone nazwy krajów (np. FR , UK oraz USA ) z pełnymi nazwami.
Aby to zrobić, wprowadź stare wartości w D2:D4 i nowe wartości w E2:E4, jak pokazano na poniższym zrzucie ekranu. A następnie umieść poniższą formułę w B2 i naciśnij Enter:
=SUBSTYTUT(SUBSTYTUT(SUBSTYTUT(A2:A10, D2, E2), D3, E3), D4, E4)
...i będziesz miał wszystkie wymiany zrobione za jednym razem:
Proszę zauważyć, że powyższe podejście działa tylko w Excel 365 który obsługuje dynamiczne tablice.
W przeddynamicznych wersjach Excela 2019, Excela 2016 i wcześniejszych formuła musi być napisana dla najwyższej komórki (B2), a następnie skopiowana do komórek poniżej:
=SUBSTYTUT(SUBSTYTUT(SUBSTYTUT(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
Zwróć uwagę, że w tym przypadku wartości zastępcze blokujemy bezwzględnymi odwołaniami do komórek, więc nie będą się one przesuwać podczas kopiowania formuły w dół.
Uwaga. Funkcja SUBSTITUTE jest rozróżnianie wielkości liter , czyli należy wpisać stare wartości ( stary_tekst ) w tej samej wielkości liter, w jakiej występują w oryginalnych danych.
Tak prosta, jak to tylko możliwe, metoda ta ma istotną wadę - gdy masz dziesiątki elementów do zastąpienia, zagnieżdżone funkcje stają się dość trudne do zarządzania.
Zalety : łatwy do wdrożenia; obsługiwany we wszystkich wersjach programu Excel
Wady : najlepiej używać dla ograniczonej liczby wartości find/replace
Wyszukiwanie i zastępowanie wielu wpisów za pomocą XLOOKUP
W sytuacji, gdy szukasz wymiany cała zawartość komórki , nie jego część, z pomocą przychodzi funkcja XLOOKUP.
Powiedzmy, że masz listę krajów w kolumnie A i masz na celu zastąpienie wszystkich skrótów odpowiadającymi im pełnymi nazwami. Podobnie jak w poprzednim przykładzie, zaczynasz od wprowadzenia elementów "Znajdź" i "Zastąp" w oddzielnych kolumnach (odpowiednio D i E), a następnie wprowadzasz tę formułę w B2:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
Przetłumaczone z języka Excela na język ludzki, oto co robi formuła:
Wyszukaj wartość A2 (lookup_value) w D2:D4 (lookup_array) i zwróć dopasowanie z E2:E4 (return_array). Jeśli nie zostanie znaleziona, wyciągnij oryginalną wartość z A2.
Kliknij dwukrotnie uchwyt wypełnienia, aby formuła została skopiowana do poniższych komórek, a wynik nie kazał Ci czekać:
Ponieważ funkcja XLOOKUP jest dostępna tylko w Excelu 365, powyższa formuła nie będzie działać we wcześniejszych wersjach. Możesz jednak łatwo naśladować to zachowanie za pomocą kombinacji IFERROR lub IFNA i VLOOKUP:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
Uwaga. W przeciwieństwie do funkcji SUBSTITUTE, funkcje XLOOKUP i VLOOKUP są niewrażliwy na wielkość liter Oznacza to, że szukają one wartości lookup, ignorując wielkość liter. Na przykład, nasza formuła zastąpiłaby zarówno FR oraz fr z Francja .
Zalety : nietypowe wykorzystanie zwykłych funkcji; działa we wszystkich wersjach Excela
Wady : działa na poziomie komórki, nie może zastąpić części zawartości komórki
Wielokrotne zastępowanie przy użyciu rekurencyjnej funkcji LAMBDA
Dla subskrybentów Microsoft 365, Excel zapewnia specjalną funkcję, która pozwala na tworzenie niestandardowych funkcji przy użyciu tradycyjnego języka formuły.Yep, mówię o LAMBDA.Piękno tej metody jest to, że może przekształcić bardzo długi i złożony wzór w bardzo kompaktowy i prosty.Ponadto, pozwala tworzyć własne funkcje, które nie istnieją w programie Excel, coś, co było przedmożliwe tylko przy użyciu VBA.
Szczegółowe informacje na temat tworzenia i używania niestandardowych funkcji LAMBDA można znaleźć w tym samouczku: Jak pisać funkcje LAMBDA w Excelu. Tutaj omówimy kilka praktycznych przykładów.
Zalety : wynikiem jest elegancka i zadziwiająco prosta w użyciu funkcja, bez względu na liczbę par zastępczych
Wady : dostępne tylko w programie Excel 365; specyficzne dla danego skoroszytu i niemożliwe do ponownego wykorzystania w różnych skoroszytach
Przykład 1. Wyszukiwanie i zastępowanie wielu słów/ciągów jednocześnie
Aby zastąpić wiele słów lub tekstu za jednym razem, stworzyliśmy niestandardową funkcję LAMBDA o nazwie MultiReplace , która może przyjąć jedną z tych form:
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
Albo
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
Obie są funkcjami rekurencyjnymi, które same się wywołują. Różnica polega tylko na tym, jak ustalony jest punkt wyjścia.
W pierwszej formule funkcja JEŻELI sprawdza, czy. stary lista nie jest pusta (stara""). Jeśli TRUE, to MultiReplace Jeżeli FALSE, to funkcja zwraca tekst to jego obecna forma i wychodzi.
Drugi wzór wykorzystuje odwrotną logikę: jeśli stary jest puste (old=""), to zwróć tekst i wyjść; w przeciwnym razie wywołaj MultiReplace .
Najtrudniejsza część została wykonana! Pozostaje jeszcze nadać nazwę MultiReplace Funkcja w Menedżerze nazw jak pokazano na poniższym zrzucie ekranu. Szczegółowe wytyczne znajdziesz na stronie Jak nazwać funkcję LAMBDA.
Gdy funkcja otrzyma nazwę, możesz jej używać tak jak każdej innej funkcji wbudowanej.
Niezależnie od tego, który z dwóch wariantów formuły wybierzesz, z perspektywy użytkownika końcowego składnia jest tak prosta, jak to:
MultiReplace(tekst, stary, nowy)Gdzie:
- Tekst - dane źródłowe
- Stary - wartości, które należy znaleźć
- Nowy - wartości, które należy zastąpić
Posuwając się nieco dalej w poprzednim przykładzie, zastąpmy nie tylko skróty krajów, ale także skróty stanów. W tym celu wpisz skróty ( stary wartości) w kolumnie D począwszy od D2 oraz pełne nazwy ( nowy wartości) w kolumnie E począwszy od E2.
W B2 należy wprowadzić funkcję MultiReplace:
=MultiReplace(A2:A10, D2, E2)
Naciśnij Enter i ciesz się wynikami :)
Jak działa ta formuła
Wskazówką do zrozumienia wzoru jest zrozumienie rekurencji. Może to brzmieć skomplikowanie, ale zasada jest dość prosta. Z każdą iteracją funkcja rekurencyjna rozwiązuje jeden mały przypadek większego problemu. W naszym przypadku MultiReplace Funkcja zapętla się przez stare i nowe wartości i przy każdej pętli wykonuje jedną zamianę:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
Tak jak w przypadku zagnieżdżonych funkcji SUBSTITUTE, wynik poprzedniego SUBSTITUTE staje się wynikiem tekst parametr dla następnego SUBSTITUTE. Innymi słowy, przy każdym kolejnym wywołaniu MultiReplace , funkcja SUBSTITUTE przetwarza nie oryginalny ciąg tekstowy, ale wyjście z poprzedniego wywołania.
Aby obsłużyć wszystkie pozycje na stary zaczynamy od najwyższej komórki i za pomocą funkcji OFFSET przesuwamy się o jeden rząd w dół przy każdej interakcji:
OFFSET(old, 1, 0)
Podobnie postępuje się w przypadku. nowy lista:
OFFSET(nowy, 1, 0)
Najważniejsze jest, aby zapewnić punkt wyjścia aby zapobiec wiecznym wywołaniom rekurencyjnym. Odbywa się to za pomocą funkcji IF - jeśli funkcja stary komórka jest pusta, funkcja zwraca tekst to jego obecna forma i wyjścia:
=LAMBDA(tekst, stary, nowy, IF(stary="", tekst, MultiReplace(...)))
lub
=LAMBDA(tekst, stary, nowy, IF(stary"", MultiReplace(...), tekst))
Przykład 2. Zastępowanie wielu znaków w programie Excel
W zasadzie. MultiReplace Funkcja omówiona w poprzednim przykładzie może obsługiwać również pojedyncze znaki, pod warunkiem, że każdy stary i nowy znak zostanie wpisany do osobnej komórki, dokładnie tak jak skrócone i pełne nazwy na powyższych zrzutach ekranu.
Jeśli wolisz wprowadzić stare znaki w jednej komórce, a nowe w innej, lub wpisać je bezpośrednio do formuły, to możesz stworzyć kolejną funkcję niestandardową o nazwie ReplaceChars , wykorzystując jeden z tych wzorów:
=LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text))
Albo
=LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
Pamiętaj, aby nazwać swoją nową funkcję Lambda w menedżerze nazw jak zwykle:
I twoja nowa funkcja niestandardowa jest gotowa do użycia:
ReplaceChars(text, old_chars, new_chars)Gdzie:
- Tekst - oryginalne struny
- Stary - znaki do wyszukania
- Nowy - znaki, które mają być zastąpione przez
Aby dać mu test terenowy, zróbmy coś, co często wykonuje się na importowanych danych - zastąpmy inteligentne cudzysłowy i inteligentne apostrofy prostymi cudzysłowami i prostymi apostrofami.
Najpierw wprowadzamy inteligentny cudzysłów i inteligentny apostrof w D2, prosty cudzysłów i prosty apostrof w E2, oddzielając znaki spacjami dla lepszej czytelności. (Ponieważ używamy tego samego delimitera w obu komórkach, nie będzie to miało żadnego wpływu na wynik - Excel po prostu zastąpi spację spacją).
Następnie wpisujemy ten wzór w B2:
=ReplaceChars(A2:A4, D2, E2)
I uzyskać dokładnie takie wyniki, jakich szukaliśmy:
Możliwe jest również wpisanie znaków bezpośrednio do formuły. W naszym przypadku wystarczy pamiętać o "zdublowaniu" cudzysłowów prostych w taki sposób:
=ReplaceChars(A2:A4, "" " '", "" "")
Jak działa ta formuła
Na stronie ReplaceChars Funkcja ta przechodzi cyklicznie przez stare_chary oraz nowe_chary ciągów znaków i zastępuje je po kolei, zaczynając od pierwszego znaku po lewej stronie. Tę część wykonuje funkcja SUBSTITUTE:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
Przy każdej iteracji funkcja PRAWO usuwa jeden znak z lewej strony obu stron stare_chary oraz nowe_chary łańcuchów, tak by LEWY mógł pobrać następną parę znaków do podstawienia:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
Przed każdym wywołaniem rekurencyjnym, funkcja JEŻELI ocenia stare_chary Jeśli nie jest pusta, funkcja wywołuje samą siebie. Gdy tylko ostatni znak zostanie zastąpiony, proces iteracji kończy się, formuła zwraca tekst to jego obecna forma i wyjścia.
Uwaga. Ponieważ funkcja SUBSTITUTE używana w naszych podstawowych formułach jest rozróżnianie wielkości liter , zarówno Lambdas (. MultiReplace oraz ReplaceChars ) traktują wielkie i małe litery jako różne znaki.
Masowe wyszukiwanie i zastępowanie za pomocą UDF
W przypadku, gdy funkcja LAMBDA nie jest dostępna w Twoim Excelu, możesz napisać funkcję zdefiniowaną przez użytkownika dla multi-replace w tradycyjny sposób za pomocą VBA.
Aby odróżnić UDF od zdefiniowanego przez LAMBDA MultiReplace funkcję, nazwiemy ją inaczej, np. MassReplace Kod funkcji jest następujący:
Function MassReplace(InputRng As Range, FindRng As Range, ReplaceRng As Range) As Variant () Dim arRes() As Variant 'tablica do przechowywania wyników Dim arSearchReplace(), sTmp As String 'tablica, w której przechowywane są pary find/replace, tymczasowy ciąg znaków Dim iFindCurRow, cntFindRows As Long 'indeks bieżącego wiersza tablicy SearchReplace, liczba wierszy Dim iInputCurRow, iInputCurCol, cntInputRows,cntInputCols As Long 'indeks bieżącego wiersza w zakresie źródłowym, indeks bieżącej kolumny w zakresie źródłowym, liczba wierszy, liczba kolumn cntInputRows = InputRng.Rows.Count cntInputCols = InputRng.Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 To cntInputRows, 1 To cntInputCols) ReDim arSearchReplace(1 To cntFindRows, 1 To 2) 'przygotowanie tablicy par znajdź/zastąp ForiFindCurRow = 1 To cntFindRows arSearchReplace(iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'Wyszukiwanie i zastępowanie w zakresie źródłowym For iInputCurRow = 1 To cntInputRows For iInputCurCol = 1 To cntInputCols sTmp = InputRng.Cells(iInputCurRow, iInputCurCol).Value 'Zastępowanie wszystkich par znajdź/zamień w każdej komórceFor iFindCurRow = 1 To cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, 1), arSearchReplace(iFindCurRow, 2)) Next arRes(iInputCurRow, iInputCurCol) = sTmp Next Next MassReplace = arRes End FunctionPodobnie jak funkcje zdefiniowane przez LAMBDA, UDF są w całym zeszycie To znaczy, że MassReplace Funkcja będzie działać tylko w tym skoroszycie, w którym wstawiłeś kod. Jeśli nie jesteś pewien, jak to zrobić poprawnie, wykonaj kroki opisane w Jak wstawić kod VBA w Excelu.
Po dodaniu kodu do skoroszytu, funkcja pojawi się w intellisense formuły - tylko nazwa funkcji, a nie argumenty! Choć uważam, że zapamiętanie składni to nic wielkiego:
MassReplace(input_range, find_range, replace_range)Gdzie:
- Zakres wejściowy - zakres źródłowy, w którym chcesz zastąpić wartości.
- Znajdź_zakres - znaki, ciągi lub słowa do wyszukania.
- Zastąpić_zakres - znaki, ciągi znaków lub słowa, które mają być zastąpione.
W Excelu 365, ze względu na obsługę tablic dynamicznych, działa to jak zwykła formuła, którą należy wpisać tylko w górnej komórce (B2):
=MassReplace(A2:A10, D2:D4, E2:E4)
W przeddynamicznym Excelu działa to jak formuła tablicowa CSE w starym stylu: zaznaczasz cały zakres źródłowy (B2:B10), wpisujesz formułę i naciskasz jednocześnie klawisze Ctrl + Shift + Enter, aby ją zakończyć.
Zalety : przyzwoita alternatywa dla niestandardowej funkcji LAMBDA w programie Excel 2019, Excel 2016 i wcześniejszych wersjach
Wady : skoroszyt musi być zapisany jako plik .xlsm z obsługą makr
Masowe zastępowanie w Excelu za pomocą makra VBA
Jeśli uwielbiasz automatyzować wspólne zadania za pomocą makr, to możesz użyć następującego kodu VBA, aby znaleźć i zastąpić wiele wartości w zakresie.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "Source data:" , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng Is Nothing Then Set ReplaceRng = Application.InputBox( "Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng Is Nothing Then.Application.ScreenUpdating = False For Each Rng In ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End SubAby od razu skorzystać z makra, możesz pobrać nasz przykładowy skoroszyt zawierający kod. Możesz też wstawić kod do własnego skoroszytu.
Jak używać makra
Przed uruchomieniem makra należy wpisać stare i nowe wartości do dwóch sąsiadujących ze sobą kolumn, jak na poniższym obrazku (C2:D4).
A następnie wybierz swoje dane źródłowe, naciśnij Alt + F8 , wybierz BulkReplace makro, a następnie kliknij Uruchom .
Jako że źródło wściekłości jest wstępnie zaznaczona, wystarczy zweryfikować odniesienie i kliknąć OK:
Następnie należy wybrać wymienić zakres , a następnie kliknij przycisk OK:
Zrobione!
Zalety : ustaw raz, używaj ponownie w dowolnym czasie
Wady : makro musi być uruchamiane przy każdej zmianie danych
Wielokrotne wyszukiwanie i zastępowanie w programie Excel za pomocą narzędzia Substring
W pierwszym przykładzie wspomniałem, że zagnieżdżone SUBSTITUTE to najprostszy sposób na zastąpienie wielu wartości w Excelu. Przyznaję, że byłem w błędzie. Nasz Ultimate Suite sprawia, że wszystko jest jeszcze prostsze!
Aby dokonać masowego zastąpienia w swoim arkuszu, przejdź do Dane Ablebits zakładka i kliknij Narzędzia do tworzenia podciągów > Zamień podłańcuchy .
Na stronie Zamień podłańcuchy Pojawi się okno dialogowe z prośbą o zdefiniowanie Źródło zakres i Podłańcuchy zakres.
Mając wybrane dwa zakresy, kliknij przycisk Wymienić i znaleźć wyniki w nowej kolumnie wstawionej po prawej stronie oryginalnych danych. Tak, to takie proste!
Wskazówka. Przed kliknięciem Wymienić jest jedna ważna rzecz, którą musisz wziąć pod uwagę - Rozróżnianie wielkości liter W tym przykładzie zaznaczamy tę opcję, ponieważ chcemy zamieniać tylko wielkie litery, a podłańcuchy takie jak "fr", "uk" czy "ak" w innych słowach pozostawiamy nietknięte.
Jeśli jesteś ciekaw, jakie inne operacje masowe mogą być wykonywane na łańcuchach, sprawdź inne narzędzia do tworzenia łańcuchów zawarte w naszym pakiecie Ultimate Suite. Albo jeszcze lepiej, pobierz wersję testową poniżej i wypróbuj ją!
Oto jak znaleźć i zastąpić wiele słów i znaków jednocześnie w Excelu. Dziękuję za przeczytanie i mam nadzieję, że zobaczymy się na naszym blogu za tydzień!
Dostępne pliki do pobrania
Wielokrotne znajdowanie i zastępowanie w Excelu (plik .xlsm)
Ultimate Suite 14-dniowa w pełni funkcjonalna wersja (plik .exe)