Преглед садржаја
Овај водич ће вас научити како да одвојите текст од бројева у Екцел-у користећи изворне формуле и прилагођене функције. Такође ћете научити како да поделите текст и бројеве у две одвојене колоне.
Замислите ово: добијате сирове податке за анализу и сазнаћете да су бројеви помешани са текстом у једној колони. У већини ситуација ће свакако бити згодније да их имате у одвојеним колонама ради детаљнијег прегледа.
У случају да радите са хомогеним подацима, вероватно бисте могли да користите функције ЛЕФТ, РИГХТ и МИД да бисте издвојили исти број знакова са исте позиције. Али то је идеалан сценарио за лабораторијске тестове. У стварном животу, највероватније ћете имати посла са различитим подацима где бројеви долазе пре текста, после текста или између текста. Примери у наставку пружају решења управо за овај случај.
Како уклонити текст и задржати бројеве у Екцел ћелијама
Решење ради у Екцел 365, Екцел 2021 , и Екцел 2019
Мицрософт Екцел 2019 увео је неколико нових функција које нису доступне у ранијим верзијама, а ми ћемо користити једну од таквих функција, наиме ТЕКСТЈОИН, да уклонимо текстуалне знакове из ћелије садржи бројеве.
Генеричка формула је:
ТЕКСТЈОИН("", ТРУЕ, ИФЕРРОР(МИД( целл, РОВ(ИНДИРЕЦТ( "1:"&амп;ЛЕН(<1)>целл))), 1) *1, ""))У Екцел 365 и 2021, ово ће такође радити:
ТЕКСТЈОИН("", ТРУЕ,ИФЕРРОР(МИД( целл, СЕКУЕНЦЕ(ЛЕН( целл)), 1) *1, ""))На први поглед, формуле могу изгледати помало застрашујуће, али раде :)
На пример, да бисте уклонили текст из бројева у А2, унесите једну од доле наведених формула у Б2, а затим је копирајте у онолико ћелија колико је потребно.
У Екцел 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
У Екцел 2019, мора се унети као формула низа помоћу Цтрл + Схифт + Ентер . У динамичком низу Екцел функционише као нормална формула довршена тастером Ентер.
У Екцел 365 и 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
Као резултат, сви текстуални знакови су уклоњени из ћелије и бројеви се чувају:
Како ова формула функционише:
Да бисмо боље разумели логику, хајде да почнемо да истражујемо формула изнутра:
Користите или РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН(стринг))) или СЕКУЕНЦЕ(ЛЕН(стринг)) да бисте креирали низ бројева који одговарају укупном броју знакова у изворном низу, а затим унесите те секвенцијалне бројеве функцији МИД као почетне бројеве. У Б2, овај део формуле изгледа овако:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
Функција МИД издваја сваки знак из А2 почевши од првог и враћа их као низ:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Овај низ се множи са 1. Нумеричке вредности остају без промене, док множење ненумеричког карактера резултира #ВРЕДНОСТ! грешка:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Управља функција ИФЕРРОРове грешке и замењује их празним стринговима:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Овај коначни низ се сервира функцији ТЕКСТЈОИН, која спаја непразне вредности у низу ( игноре_емпти аргумент постављен на ТРУЕ) користећи празан стринг ("") за граничник:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Савет. За Екцел 2016 - 2007 такође постоји решење, али је формула далеко сложенија. Можете га пронаћи у овом водичу: Како издвојити бројеве у Екцел-у.
Прилагођена функција за уклањање текста из бројева
Решење ради за све верзије Екцел-а
Ако користите старију верзију Екцел-а или пронађете и горе наведене формуле тешко запамтити, ништа вас не спречава да креирате сопствену функцију са једноставнијом синтаксом и корисничким именом као што је РемовеТект . Кориснички дефинисана функција (УДФ) се може написати на два начина:
ВБА код 1:
Овде гледамо сваки карактер у изворном низу по један један и провери да ли је нумерички или не. Ако је број, резултујућем низу се додаје знак.
Функција РемовеТект(стр Ас Стринг) Дим сРес Ас Стринг сРес = "" За и = 1 То Лен(стр) Ако је Труе = ИсНумериц(Мид(стр, и) , 1)) Тада је сРес = сРес &амп; Мид(стр, и, 1) Енд Иф Нект и РемовеТект = сРес Енд ФунцтионВБА код 2:
Код креира објекат за обраду регуларног израза. Користећи РегЕкп, уклањамо све знакове осим цифара 0-9 из изворног низа.
Функција РемовеТект(стр Ас Стринг) Као стринг са ЦреатеОбјецт ("ВБСцрипт.РегЕкп") .Глобал = Труе .Паттерн = "[^0-9]" РемовеТект = .Реплаце(стр, "" ) Завршава са функцијом ЕндНа малим радним листовима, оба кода ће радити подједнако добро. На великим радним листовима где се функција позива стотине или хиљаде пута, код 2 који користи ВБСцрипт.РегЕкп ће радити брже.
Детаљне кораке за уметање кода у радну свеску можете пронаћи овде: Како да уметнете ВБА кода у Екцел-у.
Који год приступ да одаберете, из перспективе крајњег корисника, функција брисања текста и остављања бројева је једноставна као ова:
РемовеТект(стринг)На пример, да уклоните ненумеричке знакове из ћелије А2, формула у Б2 је:
=RemoveText(A2)
Само је копирајте низ колону и добићете овај резултат:
Напомена. И матичне формуле и прилагођена функција излазе нумерички стринг . Да бисте га претворили у број, помножите резултат са 1, или додајте нулу, или умотајте формулу у функцију ВАЛУЕ. На пример:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Како уклонити бројеве из текстуалног низа у Екцел-у
Решење ради у Екцел 365, Екцел 2021 и Екцел 2019
Формуле за уклањање бројева из алфанумеричког низа су прилично сличне онима о којима се расправљало у претходном примеру.
За Екцел 365 - 2019:
ТЕКСТЈОИН(" ", ТРУЕ, ИФ(ИСЕРР(СРЕДИНА( ћелија , РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН( ћелија ) )), 1) *1), СРЕДИНА( ћелија , РОВ(ИНДИРЕЦТ("1:"&амп;ЛЕН( ) целл ))), 1), ""))У програму Екцел 2019, не заборавите да га направите формулом низа тако што ћете заједно притиснути тастере Цтрл + Схифт + Ентер.
За Екцел 365 и 2021:
ТЕКСТЈОИН("", ТРУЕ, ИФ(ИСЕРРОР(МИД( целл , СЕКУЕНЦЕ(ЛЕН( целл 1) *1), МИД) ( целл , СЕКУЕНЦЕ(ЛЕН( целл )), 1), ""))На пример, да бисте уклонили бројеве из низа у А2, формула је:
=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), ""))
Као резултат, сви бројеви се уклањају из ћелије, а знакови текста се задржавају:
Као што је приказано на слици изнад, формула уклања нумеричке знакове са било које позиције у низу: на почетку, на крају и у средини. Међутим, постоји упозорење: ако је стринг почиње бројем иза којег следи размак , тај размак се задржава, што ствара проблем са водећим размацима (као у Б2).
Да бисте се решили додатних размака пре текста , умотајте формулу у функцију ТРИМ овако:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
Сада, ваши резултати су апсолутно савршени!
Како ова формула функционише:
У суштини, формула функционише исто као што је објашњено у претходном примеру. Разлика је у томе што, из коначног низа који се сервира функцији ТЕКСТЈОИН, морате уклонити бројеве, а не текст. Да бисмо то урадили, користимо комбинацију функција ИФ и ИСЕРРОР.
Као што се сећате,МИД(…)+0 генерише низ бројева и #ВРЕДНОСТ! грешке које представљају текстуалне знакове на истим позицијама:
{2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}
Функција ИСЕРРОР хвата грешке и прослеђује резултујући низ Булових вредности у ИФ:
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Када функција ИФ види ТРУЕ (грешка), она убацује одговарајући текстуални карактер у обрађени низ уз помоћ друге МИД функције. Када функција ИФ види ФАЛСЕ (број), она га замењује празним стрингом:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Овај коначни низ се прослеђује на ТЕКСТЈОИН, тако да спаја текстуалне знакове и излази резултат.
Прилагођена функција за уклањање бројева из текста
Решење ради за све верзије Екцел-а
Имајући на уму да треба задржати робусну формулу једноставно, поделићу код кориснички дефинисане функције (УДФ) да бих уклонио било који нумерички карактер.
ВБА код 1:
Функција РемовеНумберс(стр Ас Стринг) Дим сРес Ас Стринг сРес = "" За и = 1 То Лен(стр) Ако је Фалсе = ИсНумериц(Мид(стр, и, 1)) Тада је сРес = сРес &амп; Мид(стр, и, 1) Енд Иф Нект и РемовеНумберс = сРес Енд ФункцијаВБА код 2:
Функција РемовеНумберс(стр Ас Стринг) Као стринг са ЦреатеОбјецт ( "ВБСцрипт.РегЕкп" ) .Глобал = Труе .Паттерн = "[0-9]" РемовеНумберс2 = .Реплаце(стр, "" ) Енд Витх Енд ФунцтионКао што је случај са функцијом РемовеТект, други код је боље користити у великирадне листове за оптимизацију перформанси.
Када се код дода у радну свеску, можете уклонити све нумеричке знакове из ћелије користећи ову прилагођену функцију:
РемовеНумберс(стринг)У нашем случају, формула у Б2 је:
=RemoveNumbers(A2)
Да бисте скратили водеће размаке ако их има, угнездите прилагођену функцију унутар ТРИМ-а као што бисте то урадили у изворној формули:
=TRIM(RemoveNumbers(A2))
Раздвојите бројеве и текст у засебне колоне
У ситуацији када желите да раздвојите текст и бројеве у две колоне, било би лепо да се посао обави помоћу једне формуле , договорити се? За ово, само спојимо код функција РемовеТект и РемовеНумберс у једну функцију, под називом СплитТектНумберс , или једноставно Сплит , или шта год желите :)
ВБА код 1:
Функција СплитТектНумберс(стр Ас Стринг , ис_ремове_тект као Боолеан ) Као Низ Дим сНум, сТект, сЦхар Као стринг сЦурЦхар = сНум = сТект = "" За и = 1 За Лен(стр) сЦурЦхар = Мид(стр, и, 1) Ако је Тачно = ИсНумериц(сЦурЦхар) Тада је сНум = сНум &амп; сЦурЦхар Елсе сТект = сТект &амп; сЦурЦхар Енд Иф Нект и Иф Труе = ис_ремове_тект Онда СплитТектНумберс = сНум Елсе СплитТектНумберс = сТект Енд Иф Енд ФункцијаВБА код 2:
Функција СплитТектНумберс(стр Ас Стринг , ис_ремове_тект) Као Стринг Са ЦреатеОбјецт ( "ВБСцрипт.РегЕкп" ) .Глобал = Труе Ако је Труе = ис_ремове_тект Онда .Паттерн = "[^0-9]" Иначе.Паттерн = "[0-9]" Енд Иф СплитТектНумберс = .Реплаце(стр, "" ) Енд Витх Енд ФунцтионНаша нова прилагођена функција захтева два аргумента:
СплитТектНумберс(стринг, ис_ремове_тект)Где ис_ремове_тект је Боолеан вредност која показује које знакове треба уклонити:
- ТРУЕ или 1 - уклонити текст и задржати бројеве
- ФАЛСЕ или 0 - уклонити бројеве и задржати текст
За наш пример скупа података, формуле имају овај облик:
Да бисте уклонили ненумеричке знакове:
=SplitTextNumbers(A2, TRUE)
Да бисте избрисали нумеричке знакове :
=SplitTextNumbers(A2, FALSE)
Савет. Да бисте избегли потенцијални проблем са водећим размацима, препоручујем да увек умотате формулу која уклања бројеве у функцију ТРИМ:
=TRIM(SplitTextNumbers(A2, FALSE))
Специјална алатка за уклањање бројева или текста
За оне који то раде не волим да непотребно компликујемо ствари, показаћу наш сопствени начин уклањања текста или бројева у Екцел-у.
Под претпоставком да је наш Ултимате Суите додат на вашу Екцел траку, ово је оно што радите:
- На картици Аблебитс Дата , у групи Тект кликните на Уклони &гт; Уклони знакове .
Савет. Ако резултати садрже неке водеће размаке, Трим Спацесалат ће их елиминисати за кратко време.
Тако можете уклонити текстуалне или нумеричке знакове из стринга у Екцел-у. Захваљујем вам на читању и радујем се што ћу вас видети на нашем блогу следеће недеље!
Доступна преузимања
Уклоните текст или бројеве у Екцел-у – примери (.клсм датотека)
Ултимате Суите - пробна верзија (.еке датотека)