Tartalomjegyzék
Ez a bemutató megtanítja, hogyan lehet a szöveget és a számokat az Excelben a natív képletek és egyéni függvények segítségével elválasztani egymástól. Azt is megtanulja, hogyan lehet a szöveget és a számokat két külön oszlopba osztani.
Képzelje el a következőt: megkapja a nyers adatokat elemzésre, és kiderül, hogy a számok keverednek a szöveggel egy oszlopban. A legtöbb helyzetben bizonyára kényelmesebb lenne, ha a közelebbi vizsgálathoz külön oszlopokban lennének.
Abban az esetben, ha homogén adatokkal dolgozol, valószínűleg a LEFT, RIGHT és MID függvényeket használhatod, hogy ugyanabból a pozícióból azonos számú karaktert nyerj ki. De ez egy ideális forgatókönyv laboratóriumi vizsgálatokhoz. A való életben valószínűleg olyan eltérő adatokkal kell foglalkoznod, ahol a számok a szöveg előtt, után vagy a szöveg között vannak. Az alábbi példák pontosan erre adnak megoldást. Az alábbi példák pontosan erre adnak megoldásteset.
Hogyan lehet eltávolítani a szöveget és megtartani a számokat az Excel-cellákban?
A megoldás az Excel 365, az Excel 2021 és az Excel 2019 programokban működik.
A Microsoft Excel 2019 bevezetett néhány olyan új funkciót, amely a korábbi verziókban nem állt rendelkezésre, és az egyik ilyen funkciót, nevezetesen a TEXTJOIN-t fogjuk használni a szöveges karakterek eltávolítására egy számokat tartalmazó cellából.
Az általános képlet a következő:
TEXTJOIN("", TRUE, IFERROR(MID( sejt , ROW(INDIRECT( "1:"&LEN( sejt ))), 1) *1, ""))Az Excel 365-ben és 2021-ben ez is működik:
TEXTJOIN("", TRUE, IFERROR(MID( sejt , SEQUENCE(LEN( sejt )), 1) *1, ""))Első ránézésre a képletek kissé ijesztőnek tűnhetnek, de tényleg működnek :)
Ha például el szeretné távolítani a szöveget az A2 cellában lévő számokból, írja be az alábbi képletek egyikét a B2 cellába, majd másolja le annyi cellába, ahányszor csak szükséges.
Az Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, "")))
Az Excel 2019-ben tömbképletként kell beírni a Ctrl + Shift + Enter billentyűkombinációval . A dinamikus tömb Excelben az Enter billentyűvel befejezett normál képletként működik.
Az Excel 365 és 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, "")))
Ennek eredményeképpen a cellából minden szöveges karaktert eltávolít, a számokat pedig megtartja:
Hogyan működik ez a képlet:
A logika jobb megértéséhez kezdjük el a képletet belülről vizsgálni:
A ROW(INDIRECT("1:"&LEN(string))) vagy a SEQUENCE(LEN(string)) segítségével létrehozhat egy számsorozatot, amely megfelel a forrás stringben lévő karakterek teljes számának, majd ezeket a sorszámokat kezdő számokként a MID függvénybe táplálja. B2-ben a képlet ezen része a következőképpen néz ki:
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
A MID függvény minden egyes karaktert kivesz az A2-ből, kezdve a legelsővel, és egy tömbként adja vissza őket:
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Ezt a tömböt megszorozzuk 1-gyel. A numerikus értékek változatlanul megmaradnak, míg egy nem numerikus karakter megszorozása #VALUE! hibát eredményez:
{2;1;0;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!}
Az IFERROR függvény kezeli ezeket a hibákat, és üres karakterláncokkal helyettesíti őket:
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Ezt a végleges tömböt a TEXTJOIN függvény kapja meg, amely a tömb nem üres értékeit ( ignore_empty argumentum TRUE-ra állítva) üres karakterláncot ("") használva elválasztójelként:
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Tipp. Az Excel 2016 - 2007 számára is létezik megoldás, de a képlet sokkal összetettebb. Ebben a bemutatóban találja: Hogyan vonjunk ki számokat az Excelben.
Egyéni funkció a szöveg eltávolítására a számokból
A megoldás minden Excel-verzióban működik
Ha az Excel egy régebbi verzióját használja, vagy a fenti képleteket túl nehéz megjegyezni, semmi sem akadályozza meg abban, hogy létrehozzon egy saját függvényt egyszerűbb szintaxissal és felhasználóbarát névvel, mint például RemoveText A felhasználó által definiált függvény (UDF) kétféleképpen írható:
VBA kód 1:
Itt a forrás karakterlánc minden egyes karakterét egyenként megnézzük, és ellenőrizzük, hogy numerikus-e. Ha szám, akkor a karaktert hozzáadjuk a kapott karakterlánchoz.
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 FunctionVBA kód 2:
A kód létrehoz egy objektumot egy reguláris kifejezés feldolgozásához. A RegExp használatával a 0-9-es számjegyeken kívül minden karaktert eltávolítunk a forrássztringből.
Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End With End FunctionKis munkalapokon mindkét kód egyformán jól fog működni, de nagy munkalapokon, ahol a függvényt több száz vagy ezer alkalommal hívják meg, a VBScript.RegExp-t használó 2. kód gyorsabban fog működni.
A kódnak a munkafüzetbe való beillesztésének részletes lépései itt találhatók: Hogyan illesszünk be VBA-kódot az Excelbe.
Bármelyik megközelítést is választja, a végfelhasználó szempontjából a szöveg törlése és a számok meghagyása ilyen egyszerű:
RemoveText(string)Például, a nem számjegyek eltávolításához az A2 cellából, a B2 cellában lévő képlet a következő:
=RemoveText(A2)
Csak másolja le az oszlopba, és ezt az eredményt kapja:
Megjegyzés: Mind a natív képletek, mind az egyéni függvények kimeneti értéke egy numerikus karakterlánc Ha számmá szeretné alakítani, szorozza meg az eredményt 1-gyel, vagy adjon hozzá nullát, vagy tekerje a képletet a VALUE függvénybe. Például:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
Hogyan lehet eltávolítani a számokat a szöveges karakterláncból az Excelben
A megoldás az Excel 365, az Excel 2021 és az Excel 2019 programokban működik.
A számok alfanumerikus karakterláncból való eltávolítására szolgáló képletek nagyjából hasonlóak az előző példában tárgyaltakhoz.
Az Excel 365 - 2019:
TEXTJOIN("", TRUE, IF(ISERR(MID( sejt , ROW(INDIRECT( "1:"&LEN( sejt ) )), 1) *1), MID( sejt , ROW(INDIRECT("1:"&LEN( sejt ))), 1), ""))Az Excel 2019-ben ne feledje, hogy a tömb képlet a Ctrl + Shift + Enter billentyűk együttes lenyomásával.
Az Excel 365 és 2021 esetében:
TEXTJOIN("", TRUE, IF(ISERROR(MID( sejt , SEQUENCE(LEN( sejt 1) *1), MID( sejt , SEQUENCE(LEN( sejt )), 1), ""))Például, ha az A2 karakterláncból számokat akarunk eltávolítani, a képlet a következő:
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2)))), 1), "")))
Vagy
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), 1), "")))
Ennek eredményeképpen az összes számot eltávolítja a cellából, és megtartja a szöveges karaktereket:
Amint a fenti képernyőképen látható, a képlet a karakterlánc bármelyik pozíciójából eltávolítja a numerikus karaktereket: az elején, a végén és a közepén. Van azonban egy kikötés: ha egy karakterlánc számmal kezdődik, amelyet szóköz követ , ez a szóköz megmarad, ami a vezető szóközök problémáját okozza (mint a B2-ben).
Megszabadulni az extra szóközök a szöveg előtt , csomagolja a képletet a TRIM függvénybe a következőképpen:
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), 1), ""))))))
Nos, az eredményeid abszolút tökéletesek!
Hogyan működik ez a képlet:
A képlet lényegében ugyanúgy működik, mint az előző példában elmagyarázva. A különbség az, hogy a TEXTJOIN függvénynek szolgáltatott végső tömbből a számokat kell eltávolítani, nem pedig a szöveget. Ehhez az IF és az ISERROR függvények kombinációját használjuk.
Mint emlékszik, a MID(...)+0 egy számokból és #VALUE! hibákból álló tömböt generál, amely szöveges karaktereket reprezentál az azonos pozíciókban:
{2;1;0;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!}
Az ISERROR függvény elkapja a hibákat, és a kapott bóluszi értékek tömbjét átadja az IF-nek:
{FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Ha az IF függvény TRUE-t (hibát) lát, akkor a megfelelő szöveges karaktert egy másik MID függvény segítségével beilleszti a feldolgozott tömbbe. Ha az IF függvény FALSE-t (számot) lát, akkor egy üres karakterlánccal helyettesíti azt:
{"";"";"";"";" "; "S"; "u"; "n"; "s"; "e"; "t";" "; "R"; "o"; "a"; "d"}
Ezt a végső tömböt átadjuk a TEXTJOIN-nak, így az összefűzi a szöveges karaktereket, és kiadja az eredményt.
Egyéni funkció a számok eltávolítására a szövegből
A megoldás minden Excel-verzióban működik
Szem előtt tartva, hogy egy robusztus képletet egyszerűnek kell tartani, megosztom a felhasználó által definiált függvény (UDF) kódját a numerikus karakterek eltávolítására.
VBA kód 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 FunctionVBA kód 2:
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End With End FunctionA RemoveText függvényhez hasonlóan a második kódot a teljesítmény optimalizálása érdekében nagyobb munkalapoknál célszerű használni.
Miután a kódot hozzáadta a munkafüzethez, ezzel az egyéni funkcióval eltávolíthatja az összes numerikus karaktert egy cellából:
RemoveNumbers(string)A mi esetünkben a B2-es képlet a következő:
=RemoveNumbers(A2)
A vezető szóközök levágásához, ha vannak, az egyéni függvényt a TRIM függvényen belülre kell fészkelni, mint egy natív képlet esetében:
=TRIM(RemoveNumbers(A2))
Számok és szöveg külön oszlopokba osztása
Abban a helyzetben, amikor a szöveget és a számokat két oszlopba szeretnénk szétválasztani, jó lenne, ha ezt a feladatot egyetlen formulával végeznénk el, igaz? Ehhez csak egyesítjük a kódot a RemoveText és RemoveNumbers funkciókat egy függvénybe, melynek neve SplitTextNumbers , vagy egyszerűen Split , vagy amit csak akarsz :)
VBA kód 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 If If True = is_remove_text Then SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End If End EndFunkcióVBA kód 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 With End FunctionAz új egyéni függvényünknek két argumentumra van szüksége:
SplitTextNumbers(string, is_remove_text)Hol is_remove_text egy bóluszi érték, amely jelzi, hogy mely karaktereket kell eltávolítani:
- TRUE vagy 1 - a szöveg eltávolítása és a számok megtartása
- FALSE vagy 0 - számok eltávolítása és a szöveg megtartása
A mintaadatkészletünk esetében a képletek a következő formát ölthetik:
Nem numerikus karakterek eltávolítása:
=SplitTextNumbers(A2, TRUE)
Numerikus karakterek törlése:
=SplitTextNumbers(A2, FALSE)
Tipp: A vezető szóközökkel kapcsolatos potenciális probléma elkerülése érdekében javaslom, hogy a számokat eltávolító képletet mindig csomagolja be a TRIM függvénybe:
=TRIM(SplitTextNumbers(A2, FALSE))
Speciális eszköz számok vagy szöveg eltávolítására
Azoknak, akik nem szeretik feleslegesen bonyolítani a dolgokat, megmutatom a saját módszerünket a szöveg vagy számok Excelben történő eltávolítására.
Feltételezve, hogy az Ultimate Suite hozzá van adva az Excel szalaghoz, ezt kell tennie:
- A Ablebits adatok lapon, a Szöveg csoport, kattintson a Távolítsa el a > Karakterek eltávolítása .
Tipp: Ha az eredmények tartalmaznak néhány szóközt, a Trim Spaces eszköz pillanatok alatt eltünteti őket.
Így távolíthat el szöveges vagy numerikus karaktereket egy karakterláncból az Excelben. Köszönöm, hogy elolvastad, és várom, hogy jövő héten találkozzunk a blogon!
Elérhető letöltések
Szöveg vagy számok eltávolítása Excelben - példák (.xlsm fájl)
Ultimate Suite - próbaverzió (.exe fájl)