Съдържание
В този урок ще научите как да разделяте текст от числа в Excel, като използвате собствени формули и потребителски функции. Ще научите също как да разделяте текст и числа в две отделни колони.
Представете си следното: получавате необработени данни за анализ и откривате, че числата са смесени с текст в една колона. В повечето ситуации със сигурност ще е по-удобно те да бъдат в отделни колони за по-внимателно разглеждане.
В случай че работите с хомогенни данни, вероятно бихте могли да използвате функциите LEFT, RIGHT и MID, за да извлечете един и същ брой знаци от една и съща позиция. Но това е идеален сценарий за лабораторни тестове. В реалния живот най-вероятно ще се сблъскате с разнородни данни, при които числата са преди текст, след текст или между текст. Примерите по-долу предлагат решения точно за товаслучай.
Как да премахнете текста и да запазите числата в клетките на Excel
Решението работи в Excel 365, Excel 2021 и Excel 2019
В Microsoft Excel 2019 бяха въведени няколко нови функции, които не са налични в по-ранните версии, и ние ще използваме една от тези функции, а именно TEXTJOIN, за да премахнем текстови символи от клетка, съдържаща числа.
Общата формула е:
TEXTJOIN("", TRUE, IFERROR(MID( клетка , ROW(INDIRECT("1:"&LEN( клетка ))), 1) *1, ""))В Excel 365 и 2021 тази опция също ще работи:
TEXTJOIN("", TRUE, IFERROR(MID( клетка , ПОСЛЕДОВАТЕЛНОСТ(LEN( клетка )), 1) *1, ""))На пръв поглед формулите може да изглеждат малко смущаващи, но те наистина работят :)
Например, за да премахнете текст от числата в A2, въведете една от следните формули в B2 и след това я копирайте надолу в толкова клетки, колкото е необходимо.
В Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1, ""))
В Excel 2019 тя трябва да се въведе като формула за масив с Ctrl + Shift + Enter . В Excel за динамичен масив тя работи като нормална формула, завършена с клавиша Enter.
В Excel 365 и 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
В резултат на това всички текстови символи се премахват от клетката, а числата се запазват:
Как работи тази формула:
За да разберем по-добре логиката, нека започнем да изследваме формулата отвътре:
Използвате или ROW(INDIRECT("1:"&LEN(string))), или SEQUENCE(LEN(string)), за да създадете последователност от числа, съответстващи на общия брой символи в изходния низ, и след това подавате тези последователни числа на функцията MID като начални числа. В B2 тази част от формулата изглежда по следния начин:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Функцията MID извлича всеки символ от A2, започвайки от първия, и го връща като масив:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Този масив се умножава по 1. Цифровите стойности оцеляват без промяна, докато умножаването на нецифров символ води до грешка #VALUE!:
{2;1;0;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!}
Функцията IFERROR обработва тези грешки и ги заменя с празни низове:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Този окончателен масив се подава на функцията TEXTJOIN, която конкатенира непразните стойности в масива ( ignore_empty аргумент, зададен на TRUE), като за разделител се използва празен низ (""):
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Съвет: За Excel 2016 - 2007 също съществува решение, но формулата е много по-сложна. Можете да го намерите в този урок: Как да извлечете числа в Excel.
Потребителска функция за премахване на текст от числата
Решението работи за всички версии на Excel
Ако използвате по-стара версия на Excel или смятате, че горните формули са твърде трудни за запомняне, нищо не ви пречи да създадете своя собствена функция с по-опростен синтаксис и удобно за потребителя име, например Премахване на текста . Дефинираната от потребителя функция (UDF) може да бъде записана по два начина:
Код VBA 1:
Тук разглеждаме всеки символ в изходния низ един по един и проверяваме дали е число или не. Ако е число, символът се добавя към получения низ.
Функция 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 FunctionКод VBA 2:
Кодът създава обект за обработка на регулярен израз. С помощта на RegExp премахваме всички символи, различни от цифрите 0-9, от изходния низ.
Функция RemoveText(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionПри малки работни листове и двата кода ще работят еднакво добре. При големи работни листове, където функцията се извиква стотици или хиляди пъти, код 2, който използва VBScript.RegExp, ще работи по-бързо.
Подробните стъпки за вмъкване на кода в работната книга можете да намерите тук: Как да вмъкнем код VBA в Excel.
Какъвто и подход да изберете, от гледна точка на крайния потребител функцията за изтриване на текст и оставяне на числа е толкова проста:
Премахване на текст (низ)Например за премахване на нецифрови символи от клетка A2 формулата в B2 е:
=Отстраняване на текста(A2)
Просто го копирайте надолу по колоната и ще получите този резултат:
Забележка: Както оригиналните формули, така и потребителската функция извеждат a цифров низ За да я превърнете в число, умножете резултата по 1, добавете нула или обвийте формулата във функцията VALUE. Например:
=Отстраняване на текста(A2) + 0
=VALUE(RemoveText(A2))
Как да премахнете числата от текстов низ в Excel
Решението работи в Excel 365, Excel 2021 и Excel 2019
Формулите за премахване на цифри от буквено-цифров низ са доста сходни с тези, разгледани в предишния пример.
За Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( клетка , ROW(INDIRECT("1:"&LEN( клетка ) )), 1) *1), MID( клетка , ROW(INDIRECT("1:"&LEN( клетка ))), 1), ""))В Excel 2019 не забравяйте да го направите формула за масив като натиснете едновременно клавишите Ctrl + Shift + Enter.
За Excel 365 и 2021:
TEXTJOIN("", TRUE, IF(ISERROR(MID( клетка , ПОСЛЕДОВАТЕЛНОСТ(LEN( клетка 1) *1), MID( клетка , ПОСЛЕДОВАТЕЛНОСТ(LEN( клетка )), 1), ""))Например за премахване на числата от низ в A2 формулата е:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
Или
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))
В резултат на това всички цифри се премахват от клетката, а текстовите символи се запазват:
Както е показано на снимката по-горе, формулата премахва цифровите символи от всяка позиция в низ: в началото, в края и в средата. Има обаче едно предупреждение: ако низът започва с число, последвано от интервал , този интервал се запазва, което води до проблем с водещите интервали (както в B2).
За да се отървете от допълнителни интервали преди текста , обвийте формулата във функцията TRIM по следния начин:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))))
Сега резултатите ви са абсолютно перфектни!
Как работи тази формула:
По същество формулата работи по същия начин, както е обяснено в предишния пример. Разликата е, че от крайния масив, подаден на функцията TEXTJOIN, трябва да се премахнат числата, а не текстът. За да стане това, използваме комбинацията от функциите IF и ISERROR.
Както си спомняте, MID(...)+0 генерира масив от числа и грешки #VALUE!, представляващи текстови символи на същите позиции:
{2;1;0;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!;#СТОЙНОСТ!}
Функцията ISERROR улавя грешките и предава получения масив от булеви стойности на IF:
{ФАЛШИВО;ФАЛШИВО;ФАЛШИВО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО;ВЯРНО}
Когато функцията IF види TRUE (грешка), тя вмъква съответния текстов символ в обработвания масив с помощта на друга функция MID. Когато функцията IF види FALSE (число), тя го заменя с празен низ:
{"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d"}
Този краен масив се предава на TEXTJOIN, за да събере текстовите символи и да изведе резултата.
Потребителска функция за премахване на числа от текст
Решението работи за всички версии на Excel
Като имам предвид, че една надеждна формула трябва да бъде проста, ще споделя кода на функцията, дефинирана от потребителя (UDF), за да премахна всеки цифров символ.
Код VBA 1:
Функция 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 FunctionКод VBA 2:
Функция RemoveNumbers(str As String ) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionКакто и в случая с функцията RemoveText, вторият код е по-добре да се използва в големи работни листове, за да се оптимизира производителността.
След като кодът бъде добавен в работната ви книга, можете да премахнете всички цифрови символи от дадена клетка с помощта на тази персонализирана функция:
Премахване на числата(string)В нашия случай формулата в B2 е:
=Отстраняване на числата(A2)
За да изрежете началните интервали, ако има такива, вмъкнете персонализираната функция в TRIM, както бихте направили с оригинална формула:
=TRIM(RemoveNumbers(A2))
Разделяне на числата и текста в отделни колони
В случаите, когато искате да разделите текст и числа в две колони, би било хубаво работата да се свърши с една формула, съгласни ли сте? За тази цел просто обединяваме кода на Премахване на текста и RemoveNumbers в една функция, наречена SplitTextNumbers или просто Сплит или каквото ви харесва :)
Код VBA 1:
Функция 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 EndФункцияКод VBA 2:
Функция 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 FunctionНовата ни потребителска функция изисква два аргумента:
SplitTextNumbers(string, is_remove_text)Къде: is_remove_text е булева стойност, указваща кои символи да бъдат премахнати:
- TRUE или 1 - премахване на текста и запазване на числата
- FALSE или 0 - премахване на числата и запазване на текста
За нашия примерен набор от данни формулите имат следния вид:
Премахване на нецифрови символи:
=SplitTextNumbers(A2, TRUE)
Изтриване на цифрови символи:
=SplitTextNumbers(A2, FALSE)
Съвет: За да избегнете потенциален проблем с водещи интервали, препоръчвам винаги да обвивате формулата, която премахва числата, във функцията TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
Специален инструмент за премахване на числа или текст
За тези, които не обичат да усложняват излишно нещата, ще покажа наш собствен начин за премахване на текст или числа в Excel.
Ако приемем, че нашият Ultimate Suite е добавен към лентата на Excel, ще направите следното:
- На Данни от Ablebits в раздела Текст група, щракнете върху Премахване на > Премахване на символите .
Съвет. Ако резултатите съдържат някои начални интервали, инструментът Trim Spaces ще ги премахне за нула време.
Това е начинът за премахване на текстови или числови символи от низ в Excel. Благодаря ви, че прочетохте, и с нетърпение очаквам да ви видя в нашия блог следващата седмица!
Налични изтегляния
Премахване на текст или числа в Excel - примери (.xlsm файл)
Ultimate Suite - пробна версия (.exe файл)