Spis treści
Ten samouczek nauczy Cię, jak oddzielić tekst od liczb w Excelu za pomocą natywnych formuł i funkcji niestandardowych. Dowiesz się również, jak podzielić tekst i liczby na dwie oddzielne kolumny.
Wyobraź sobie taką sytuację: otrzymujesz surowe dane do analizy i dowiadujesz się, że liczby są wymieszane z tekstem w jednej kolumnie. W większości sytuacji z pewnością wygodniej będzie mieć je w osobnych kolumnach do bliższego zbadania.
W przypadku, gdy pracujesz z jednorodnymi danymi, możesz prawdopodobnie użyć funkcji LEFT, RIGHT i MID, aby wyodrębnić tę samą liczbę znaków z tej samej pozycji. Jest to jednak idealny scenariusz dla badań laboratoryjnych. W prawdziwym życiu, najprawdopodobniej masz do czynienia z niepodobnymi danymi, gdzie liczby pojawiają się przed tekstem, po tekście lub pomiędzy tekstami. Poniższe przykłady dostarczają rozwiązań dokładnie dla tego problemusprawa.
Jak usunąć tekst i zachować liczby w komórkach programu Excel
Rozwiązanie działa w programach Excel 365, Excel 2021 i Excel 2019
Microsoft Excel 2019 wprowadził kilka nowych funkcji, które nie są dostępne we wcześniejszych wersjach, a my zamierzamy wykorzystać jedną z takich funkcji, a mianowicie TEXTJOIN, do usuwania znaków tekstowych z komórki zawierającej liczby.
Ogólna formuła to:
TEXTJOIN("", TRUE, IFERROR(MID( komórka , ROW(INDIRECT("1:"&LEN( komórka ))), 1) *1, ""))W Excelu 365 i 2021 ten też będzie działał:
TEXTJOIN("", TRUE, IFERROR(MID( komórka , SEQUENCE(LEN( komórka )), 1) *1, ""))Na pierwszy rzut oka wzory mogą wyglądać nieco onieśmielająco, ale działają :)
Na przykład, aby usunąć tekst z liczb w A2, wprowadź jedną z poniższych formuł w B2, a następnie skopiuj ją w dół do tylu komórek, ile potrzeba.
W Excelu 365 - 2019 r:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1, ""))
W Excelu 2019 musi być wprowadzony jako formuła tablicowa z Ctrl + Shift + Enter . W dynamicznej tablicy Excel działa jako normalna formuła zakończona klawiszem Enter.
W Excelu 365 i 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
W rezultacie wszystkie znaki tekstowe są usuwane z komórki, a liczby są zachowywane:
Jak działa ta formuła:
Aby lepiej zrozumieć logikę, zacznijmy badać formułę od środka:
Używasz albo ROW(INDIRECT("1:"&LEN(string))) lub SEQUENCE(LEN(string)), aby stworzyć sekwencję liczb odpowiadających całkowitej liczbie znaków w łańcuchu źródłowym, a następnie podajesz te kolejne liczby do funkcji MID jako numery początkowe. W B2 ta część formuły wygląda następująco:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Funkcja MID wyciąga każdy znak z A2 zaczynając od pierwszego i zwraca je jako tablicę:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Tablica ta jest mnożona przez 1. Wartości numeryczne przeżywają bez zmian, natomiast mnożenie znaków nienumerycznych powoduje błąd #VALUE!
{2;1;0;#WARTOŚĆ!!!}
Funkcja IFERROR obsługuje te błędy i zastępuje je pustymi ciągami:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Ta ostateczna tablica jest podawana do funkcji TEXTJOIN, która łączy niepuste wartości w tablicy ( ignorować_puste argument ustawiony na TRUE) używając pustego łańcucha ("") jako separatora:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Wskazówka. dla Excel 2016 - 2007 rozwiązanie również istnieje, ale formuła jest znacznie bardziej skomplikowana. Znajdziesz ją w tym tutorialu: Jak wyodrębnić liczby w Excelu.
Funkcja niestandardowa do usuwania tekstu z liczb
Rozwiązanie działa dla wszystkich wersji Excela
Jeśli używasz starszej wersji Excela lub uważasz, że powyższe formuły są zbyt trudne do zapamiętania, nic nie stoi na przeszkodzie, abyś stworzył własną funkcję o prostszej składni i przyjaznej dla użytkownika nazwie, np. RemoveText Funkcja zdefiniowana przez użytkownika (UDF) może być napisana na dwa sposoby:
Kod VBA 1:
Tutaj przyglądamy się każdemu znakowi w łańcuchu źródłowym po kolei i sprawdzamy, czy jest on numeryczny czy nie. Jeśli jest to liczba, to znak jest dodawany do wynikowego łańcucha.
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionKod VBA 2:
Kod tworzy obiekt do przetwarzania wyrażenia regularnego. Za pomocą RegExp usuwamy z ciągu źródłowego wszystkie znaki inne niż cyfry 0-9.
Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionNa małych arkuszach oba kody będą działać równie dobrze. Na dużych arkuszach, gdzie funkcja jest wywoływana setki lub tysiące razy, szybciej będzie działać kod 2, który wykorzystuje VBScript.RegExp.
Szczegółowe kroki wstawiania kodu do skoroszytu znajdziesz tutaj: Jak wstawić kod VBA w Excelu.
Niezależnie od wybranego podejścia, z perspektywy użytkownika końcowego, funkcja usuwania tekstu i pozostawiania liczb jest tak prosta jak to:
RemoveText(string)Na przykład, aby usunąć znaki nienumeryczne z komórki A2, formuła w B2 to:
=RemoveText(A2)
Wystarczy skopiować go w dół kolumny, a otrzymasz ten wynik:
Uwaga. Zarówno formuły natywne, jak i funkcje własne wyprowadzają a ciąg liczbowy . Aby zamienić ją w liczbę, pomnóż wynik przez 1 lub dodaj zero, albo zawiń formułę w funkcję VALUE. Na przykład:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Jak usunąć liczby z ciągu tekstowego w programie Excel
Rozwiązanie działa w programach Excel 365, Excel 2021 i Excel 2019
Formuły do usuwania liczb z ciągu alfanumerycznego są dość podobne do tych omówionych w poprzednim przykładzie.
Dla programu Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( komórka , ROW(INDIRECT("1:"&LEN( komórka )), 1) *1), MID( komórka , ROW(INDIRECT("1:"&LEN( komórka ))), 1), ""))W Excelu 2019 pamiętaj, aby było to np. formuła macierzowa naciskając razem klawisze Ctrl + Shift + Enter.
Dla programu Excel 365 i 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( komórka , SEQUENCE(LEN( komórka 1) *1), MID( komórka , SEQUENCE(LEN( komórka )), 1), ""))Na przykład, aby usunąć liczby z ciągu w A2, formuła to:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Lub
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1)), MID(A2, SEQUENCE(LEN(A2)), 1)), ""))
W efekcie z komórki usuwane są wszystkie liczby, a zachowywane są znaki tekstowe:
Jak pokazano na powyższym zrzucie ekranu, formuła usuwa znaki numeryczne z dowolnej pozycji w łańcuchu: na początku, na końcu i w środku. Jest jednak pewne zastrzeżenie: jeśli łańcuch zaczyna się od liczby, po której następuje spacja , ta przestrzeń jest zachowana, co produkuje problem wiodących spacji (jak w B2).
Aby pozbyć się dodatkowych spacje przed tekstem , zawiń formułę w funkcję TRIM w taki sposób:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1)), MID(A2, SEQUENCE(LEN(A2)), 1)), "")))
Teraz twoje wyniki są absolutnie doskonałe!
Jak działa ta formuła:
W zasadzie formuła działa tak samo, jak wyjaśniono w poprzednim przykładzie. Różnica polega na tym, że z końcowej tablicy podanej do funkcji TEXTJOIN trzeba usunąć liczby, a nie tekst. Aby to zlecić, używamy kombinacji funkcji IF i ISERROR.
Jak pamiętasz, MID(...)+0 generuje tablicę liczb i błędów #VALUE! reprezentujących znaki tekstowe na tych samych pozycjach:
{2;1;0;#WARTOŚĆ!!!}
Funkcja ISERROR wyłapuje błędy i przekazuje wynikową tablicę wartości logicznych do IF:
{FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Gdy funkcja JEŻELI widzi TRUE (błąd), to za pomocą innej funkcji MID wstawia do przetwarzanej tablicy odpowiedni znak tekstowy. Gdy funkcja JEŻELI widzi FALSE (liczbę), to zastępuje ją pustym łańcuchem:
{"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";""; "R"; "o"; "a"; "d"}
Ta ostateczna tablica jest przekazywana do TEXTJOIN, więc konkatenuje ona znaki tekstowe i wyprowadza wynik.
Funkcja niestandardowa do usuwania liczb z tekstu
Rozwiązanie działa dla wszystkich wersji Excela
Pamiętając o tym, że solidna formuła powinna być utrzymana w prostocie, podzielę się kodem funkcji zdefiniowanej przez użytkownika (UDF), aby pozbawić ją dowolnego znaku liczbowego.
Kod VBA 1:
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionKod VBA 2:
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionPodobnie jak w przypadku funkcji RemoveText, drugi kod lepiej stosować w dużych arkuszach, aby zoptymalizować wydajność.
Po dodaniu kodu do swojego skoroszytu możesz usunąć wszystkie znaki numeryczne z komórki za pomocą tej niestandardowej funkcji:
RemoveNumbers(string)W naszym przypadku wzór w B2 to:
=RemoveNumbers(A2)
Aby przyciąć wiodące spacje, jeśli są, zagnieżdż funkcję niestandardową wewnątrz TRIM, tak jak w przypadku formuły natywnej:
=TRIM(RemoveNumbers(A2))
Podziel liczby i tekst na osobne kolumny
W sytuacji, gdy chcemy rozdzielić tekst i liczby na dwie kolumny, dobrze byłoby wykonać to zadanie za pomocą jednej formuły, zgadza się? W tym celu po prostu łączymy kod RemoveText oraz RemoveNumbers funkcji w jedną funkcję o nazwie SplitTextNumbers lub po prostu Podziel się , czy jak kto woli :)
Kod VBA 1:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If EndFunkcjaKod VBA 2:
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End FunctionNasza nowa funkcja niestandardowa wymaga dwóch argumentów:
SplitTextNumbers(string, is_remove_text)Gdzie jest_remove_text jest wartością logiczną wskazującą, które znaki należy usunąć:
- TRUE lub 1 - usuń tekst i zachowaj liczby
- FALSE lub 0 - usuwa liczby i zachowuje tekst
Dla naszego przykładowego zbioru danych formuły przyjmują taką postać:
Aby usunąć znaki nienumeryczne:
=SplitTextNumbers(A2, TRUE)
Aby usunąć znaki numeryczne:
=SplitTextNumbers(A2, FALSE)
Wskazówka. Aby uniknąć potencjalnego problemu wiodących spacji, zalecam zawsze zawijanie formuły usuwającej liczby w funkcji TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Specjalne narzędzie do usuwania liczb lub tekstu
Dla tych, którzy nie lubią niepotrzebnego komplikowania spraw, pokażę nasz własny sposób na usunięcie tekstu lub liczb w Excelu.
Zakładając, że nasz Ultimate Suite jest dodany do wstążki Excela, to właśnie to robisz:
- Na Dane Ablebits zakładka, w Tekst grupa, kliknij Usuń > Usuń znaki .
Wskazówka. Jeśli wyniki zawierają kilka wiodących spacji, narzędzie Przytnij spacje błyskawicznie je wyeliminuje.
Oto jak usunąć znaki tekstowe lub numeryczne z ciągu w Excelu. Dziękuję za przeczytanie i czekam na Ciebie na naszym blogu za tydzień!
Dostępne pliki do pobrania
Usuwanie tekstu lub liczb w Excelu - przykłady (plik .xlsm)
Ultimate Suite - wersja próbna (plik .exe)