Содржина
Овој туторијал ќе ве научи како да го одделите текстот од броевите во 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( ќелија, SEQUENCE(LEN( ќелија)), 1) *1, ""))На прв поглед, формулите може да изгледаат малку застрашувачки, но тие функционираат :)
На пример, за да отстраните текст од броевите во А2, внесете една од долунаведените формули во 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;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Функцијата IFERROR се справуваовие грешки и ги заменува со празни низи:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Оваа конечна низа се служи на функцијата TEXTJOIN, која ги поврзува непразни вредности во низата ( ignore_empty аргумент поставен на TRUE) користејќи празна низа ("") за разграничувачот:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Совет. За Excel 2016 - 2007 година, исто така постои решение, но формулата е далеку посложена. Можете да го најдете во ова упатство: Како да извлечете броеви во Excel.
Прилагодена функција за отстранување текст од броеви
Решението работи за сите верзии на Excel
Ако користите постара верзија на Excel или ги најдете и горенаведените формули тешко да се запомни, ништо не ве спречува да креирате своја сопствена функција со поедноставна синтакса и име погодно за корисникот како што е RemoveText . Функцијата дефинирана од корисникот (UDF) може да се напише на два начина:
VBA код 1:
Овде, го разгледуваме секој знак во изворната низа по еден по еден и проверете дали е нумерички или не. Ако е број, знакот се додава на добиената низа.
Функција RemoveText(str како низа ) Dim sRes As String sRes = "" За i = 1 До Лен(str) If True = IsNumeric(Mid(str, i , 1)) Потоа sRes = sRes & засилувач; Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionVBA код 2:
Кодот создава објект за обработка на регуларен израз. Користејќи го RegExp, ги отстрануваме сите знаци освен цифрите 0-9 од изворната низа.
Функција RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) Крај со крајна функцијаНа мали работни листови и двата кодови ќе работат подеднакво добро. На големи работни листови каде функцијата се повикува стотици или илјадници пати, кодот 2 што користи VBScript.RegExp ќе работи побрзо.
Деталните чекори за вметнување на кодот во работната книга можете да ги најдете овде: Како да вметнете VBA код во Excel.
Кој пристап и да го изберете, од перспектива на крајниот корисник, функцијата за бришење текст и оставање броеви е едноставна како оваа:
RemoveText(string)На пример, до отстранете ги ненумеричките знаци од ќелијата A2, формулата во B2 е:
=RemoveText(A2)
Само копирајте ја во колоната и ќе го добиете овој резултат:
Забелешка. И природните формули и прилагодената функција даваат нумеричка низа . За да го претворите во број, помножете го резултатот со 1 или додадете нула или завиткајте ја формулата во функцијата VALUE. На пример:
=RemoveText(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( ќелија , SEQUENCE(LEN( ќелија 1) *1), MID ( клетка , SEQUENCE(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;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Функцијата ISERROR ги фаќа грешките и ја пренесува добиената низа од Булова вредности на IF:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Кога функцијата 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 Како низа sRes = "" За i = 1 До Лен(str) Ако неточно = е Нумеричко(Средна(ул, и, 1)) Потоа sRes = sRes & засилувач; Mid(str, i, 1) End If Next i RemoveNumbers = sRes Крајна функцијаVBA код 2:
Функција RemoveNumbers(str како стринг ) Како низа со CreateObject ( „VBScript.RegExp“ ). големиработни листови за да се оптимизираат перформансите.Откако кодот ќе се додаде во вашата работна книга, можете да ги отстраните сите нумерички знаци од ќелијата користејќи ја оваа приспособена функција:
RemoveNumbers(string)Во нашиот случај, формулата во B2 е:
=RemoveNumbers(A2)
За да ги намалите водечките простори доколку ги има, вгнездувајте ја приспособената функција во TRIM како домашна формула:
=TRIM(RemoveNumbers(A2))
Поделете ги броевите и текстот во посебни колони
Во ситуација кога сакате да ги одделите текстот и броевите во две колони, би било убаво работата да се заврши со една формула , се согласувате? За ова, ние само го спојуваме кодот на функциите RemoveText и RemoveNumbers во една функција, наречена SplitTextNumbers , или едноставно Split , или што сакаш :)
VBA код 1:
Функција SplitTextNumbers(str As String , is_remove_text as Boolean ) Како низа Dim sNum, sText, sChar Како низа sCurChar = sNum = sText = "" За i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = Is Numeric(sCurChar) Тогаш sNum = sNum & sCurChar Друго sText = sText & засилувач; sCurChar End If Next i If True = is_remove_text Потоа SplitTextNumbers = sNum Друго SplitTextNumbers = sText End If End FunctionVBA код 2:
Функција SplitTextNumbers(str As String Asremoole_ext) Со CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Потоа .Pattern = "[^0-9]" Друго.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 Data , во групата Текст , кликнете Отстрани > Отстрани знаци .
Совет. Ако резултатите содржат некои водечки празни места, Намали просториалатка ќе ги елиминира за кратко време.
Така да отстраните текст или нумерички знаци од низа во Excel. Ви благодарам што прочитавте и со нетрпение очекувам да се видиме на нашиот блог следната недела!
Достапни преземања
Отстранете текст или броеви во Excel - примери (датотека .xlsm)
Ultimate Suite - пробна верзија (датотека .exe)