Spis treści
Chcesz w najbardziej efektywny sposób obsłużyć białe przestrzenie? Użyj wyrażeń regularnych, aby usunąć wszystkie spacje w komórce, zastąpić wiele spacji jednym znakiem, przyciąć spacje tylko między liczbami i wiele więcej.
Niezależnie od tego, jakich danych wejściowych używasz, trudno jest spotkać się z zestawem danych bez spacji. W większości przypadków biała przestrzeń jest dobra - używasz jej do wizualnego oddzielenia różnych informacji, aby ułatwić ich odbiór. W niektórych sytuacjach może jednak stać się złem - dodatkowe spacje mogą zepsuć twoje formuły i sprawić, że arkusze staną się niemal nie do opanowania.
Dlaczego warto używać wyrażenia regularnego do przycinania białych znaków w Excelu?
Zanim zagłębimy się w nitty-gritty używania wyrażeń regularnych do usuwania białych znaków w arkuszach Excela, chciałbym zająć się pytaniem, które przychodzi na myśl w pierwszej kolejności - po co nam regexy, skoro Excel ma już funkcję TRIM?
Aby zrozumieć różnicę, zobaczmy, co jest uważane za whitespace w każdym przypadku:
- Wbudowana funkcja TRIM może usunąć tylko znak spacji która ma wartość 32 w 7-bitowym systemie ASCII.
- Wyrażenia regularne mogą identyfikować kilka różnych form białych przestrzeni, takich jak spacja ( ), tabulator (\t), powrót karetki (\r) i nowa linia (\n). Dodatkowo istnieje znak białej spacji (\), który pasuje do wszystkich tych typów i jest niezwykle pomocny przy czyszczeniu surowych danych wejściowych.
Wiedząc dokładnie, co dzieje się za kulisami, dużo łatwiej jest wypracować rozwiązanie, prawda?
Jak włączyć wyrażenia regularne w programie Excel
Wiadomo, że Excel nie obsługuje wyrażeń regularnych. Aby je włączyć, trzeba stworzyć własną funkcję VBA. Na szczęście mamy już jedną, o nazwie RegExpReplace . zaraz, dlaczego "zastąpić", skoro mówimy o usunięciu? W języku Excela "usunąć" to po prostu inne słowo dla "zastąpić pustym ciągiem" :)
Aby dodać funkcję do Excela, wystarczy skopiować jej kod z tej strony, wkleić go do edytora VBA i zapisać plik jako skoroszyt z obsługą makr (.xlsm).
Oto składnia funkcji dla twojego odniesienia:
RegExpReplace(text, pattern, replacement, [instance_num], [match_case])Pierwsze trzy argumenty są wymagane, ostatnie dwa są opcjonalne.
Gdzie:
- Tekst - oryginalny ciąg znaków do wyszukania.
- Wzór - regex do wyszukania.
- Wymiana - tekst, który ma zostać zastąpiony. do usunąć białe plamy , ustawiłbyś ten argument na albo:
- pusty ciąg (""), aby przyciąć wszystkie spacje
- przestrzeń znak (" "), aby zastąpić wiele spacji pojedynczym znakiem spacji
- Liczba instancji (opcjonalnie) - numer instancji. W większości przypadków pominiesz go, aby zastąpić wszystkie instancje (domyślnie).
- Dopasowanie (opcjonalne) - wartość logiczna określająca czy dopasować (TRUE) czy zignorować (FALSE) wielkość liter w tekście. Dla białych znaków nie ma znaczenia i dlatego jest pomijana.
Więcej informacji na ten temat można znaleźć w funkcji RegExpReplace.
Jak usunąć białą przestrzeń za pomocą regex - przykłady
Mając funkcję RegExpReplace dodaną do swojego skoroszytu, zajmijmy się różnymi scenariuszami po kolei.
Usuń wszystkie białe znaki używając regex
Aby usunąć wszystkie spacje w łańcuchu, wystarczy wyszukać dowolny znak białej przestrzeni, włączając w to spację, tabulator, powrót karetki i podawanie linii, i zastąpić je pustym łańcuchem ("").
Wzór : \s+
Wymiana : ""
Zakładając, że ciąg źródłowy znajduje się w A5, formuła w B5 to:
=RegExpReplace(A5, "\", "")
Aby ułatwić zarządzanie wzorami, możesz wprowadzić regex w predefiniowanej komórce i dostarczyć go do formuły za pomocą bezwzględnego odniesienia, takiego jak $A$2, więc adres komórki pozostanie niezmieniony podczas kopiowania formuły w dół kolumny.
=RegExpReplace(A5, $A$2, "")
Usuń więcej niż jeden biały znak
Aby usunąć dodatkowa biała przestrzeń (tj. więcej niż jedna kolejna spacja), użyj tego samego regexu, ale zastąp znalezione dopasowania pojedynczym znakiem spacji.
Wzór : \s+
Wymiana : " "
=RegExpReplace(A5, "\", " ")
Zwróć uwagę, że ta formuła zachowuje jeden znak spacji nie tylko między słowami, ale także na początku i na końcu łańcucha, co nie jest dobre. Aby pozbyć się wiodącej i ciągnącej się przestrzeni białej, zagnieżdż powyższą formułę w innej funkcji RegExpReplace, która usuwa spacje z początku i końca:
=RegExpReplace(RegExpReplace(A5, "\", " "), "^[\
Regex do usuwania wiodących i końcowych białych znaków
Aby wyszukać białą przestrzeń na początku lub końcu linii, użyj kotwic startowych ^ i końcowych $.
Prowadzenie Whitespace:
Wzór : ^[\s]+
Podążając za Whitespace:
Wzór : [\s]+$
Prowadzenie oraz śledzący Whitespace:
Wzór : ^[\s]+
Niezależnie od tego, który regex wybierzesz, zastąp mecze niczym.
Wymiana : ""
Na przykład, aby wyeliminować wszystkie spacje na początku i na końcu ciągu w A5, formuła to:
=RegExpReplace(A5, "^[^]
Jak pokazano na poniższym zrzucie ekranu, usuwa to tylko wiodące i ciągnące się białe przestrzenie. Spacje między słowami pozostają nienaruszone, tworząc wizualnie przyjemny widok dla oka czytelnika.
Usuń dodatkowe białe przestrzenie, ale zachowaj podziały linii
Podczas pracy z ciągami wielowierszowymi możesz chcieć pozbyć się dodatkowych spacji, ale zachować podziały wierszy. Aby to zrobić, zamiast znaku białego podziału szukaj spacji [ ] lub spacji i tabulatorów [\t ]. Ten ostatni wzór przydaje się, gdy twoje dane źródłowe są importowane z innego źródła, np. z edytora tekstu.
W poniższym zestawie danych, załóżmy, że chcesz przyciąć wszystkie wiodące / wleczone spacje i wszystkie oprócz jednej pomiędzy spacjami, zachowując wiele linii nienaruszonych. Aby wykonać to zadanie, będziesz potrzebował dwóch różnych funkcji RegExpReplace.
Pierwsza funkcja zastępuje wiele spacji pojedynczym znakiem spacji.
=RegExpReplace(A5, " +", " ")
Drugi usuwa spacje z początku i końca linii:
=RegExpReplace(A5, "^ +.
Wystarczy zagnieździć te dwie funkcje jedna w drugiej:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +.
I uzyskasz doskonały efekt:
Regex do zastąpienia wielu spacji jednym znakiem
W przypadku, gdy chcesz usunąć wszystkie spacje z ciągu i zastąpić każdą grupę kolejnych spacji określonym znakiem, to jest to, co musisz zrobić:
Po pierwsze, użyj tego regex do obcięcia wiodących i końcowych białych znaków:
=RegExpReplace(A8, "^[^]
Następnie podaj powyższą funkcję do tekst argument innego RegExpReplace, który zastępuje jeden lub więcej kolejnych białych znaków określonym przez użytkownika znakiem, np. myślnikiem:
Wzór : \s+
Wymiana : -
Zakładając, że ciąg źródłowy znajduje się w A8, formuła przyjmuje taki kształt:
=RegExpReplace(RegExpReplace(A8, "^[^]+.
Lub możesz wprowadzić wzory i zamienniki w oddzielnych komórkach, jak pokazano na zrzucie ekranu:
Regex do usuwania pustych linii
Oto pytanie, które często zadają użytkownicy, którzy mają wiele linii w jednej komórce: "W moich komórkach jest wiele pustych linii. Czy jest jakiś sposób na pozbycie się ich, inny niż przejście przez każdą komórkę i ręczne usunięcie każdej linii?" Odpowiedź: To proste!
Aby dopasować puste linie, które nie mają ani jednego znaku od początku ^ bieżącej linii do następnej linii, regex to:
Wzór : ^\n
Jeśli twoje wizualnie puste linie zawierają spacje lub tabulatory, użyj tego wyrażenia regularnego:
Wzór : ^[^]
Wystarczy zastąpić regex pustym ciągiem za pomocą tej formuły, a wszystkie puste linie znikną na raz!
=RegExpReplace(A5, $A$2, "")
Usuwanie białych znaków za pomocą narzędzi RegEx
Powyższe przykłady pokazały tylko niewielką część wspaniałych możliwości, jakie dają regexy. Niestety, nie wszystkie cechy klasycznych wyrażeń regularnych są dostępne w VBA.
Na szczęście narzędzia RegEx zawarte w naszym pakiecie Ultimate Suite są wolne od tych ograniczeń, ponieważ są przetwarzane przez silnik RegEx Microsoft .NET. Pozwala to na konstruowanie bardziej skomplikowanych wzorców, które nie są obsługiwane przez VBA RegExp. Poniżej znajduje się przykład takiego wyrażenia regularnego.
Regex do usuwania spacji między liczbami
W ciągu alfanumerycznym, załóżmy, że chcesz usunąć białe spacje tylko między liczbami, więc ciąg taki jak "A 1 2 B" staje się "A 12 B".
Aby dopasować białą spację pomiędzy dowolnymi dwiema cyframi, można użyć następujących obejść:
Wzór : (?<=)
Aby stworzyć formułę opartą na powyższych regexach, oto dwa proste kroki do wykonania:
- Na Dane Ablebits zakładka, w Tekst grupa, kliknij Narzędzia Regex .
- Na Narzędzia Regex wybierz dane źródłowe, wpisz regex, wybierz Usuń i naciśnij Usuń .
Aby uzyskać wyniki jako formuły, a nie wartości, pamiętaj, aby umieścić kleszcza w Wstaw jako wzór pole wyboru.
Za chwilę zobaczysz AblebitsRegexRemove funkcja wstawiona w nowej kolumnie na prawo od oryginalnych danych.
Alternatywnie, można wprowadzić regex do jakiejś komórki, powiedzmy A5, i wstawić formułę bezpośrednio do komórki używając Funkcja wstawiania okno dialogowe, gdzie AblebitsRegexRemove jest skategoryzowany pod AblebitsUDFs .
Ponieważ ta funkcja jest specjalnie zaprojektowana do usuwania ciągów, wymaga tylko dwóch argumentów - ciągu wejściowego i regex:
=AblebitsRegexRemove(A5, $A$2)
Oto jak usunąć spacje w Excelu za pomocą wyrażeń regularnych. Dziękuję za przeczytanie i czekam na Ciebie na naszym blogu za tydzień!
Dostępne pliki do pobrania
Usuń białą przestrzeń za pomocą regex - przykłady (plik .xlsm)
Ultimate Suite - wersja próbna (plik .exe)