Excel: Szám kivonása szöveges karakterláncból

  • Ossza Meg Ezt
Michael Brown

A bemutató azt mutatja be, hogyan lehet az Excelben különböző szöveges karakterláncokból számot kinyerni képletek és a Kivonat eszköz segítségével.

Amikor egy adott hosszúságú szöveges karakterlánc egy részének kivonására kerül sor, az Excel három Substring függvényt (Bal, Jobb és Közép) biztosít a feladat gyors megoldására. Amikor számok kivonására kerül sor egy alfanumerikus karakterláncból, a Microsoft Excel... semmit sem biztosít.

Ahhoz, hogy az Excelben egy számot kapjunk egy karakterláncból, egy kis leleményességre, némi türelemre és egy csomó különböző, egymásba ágyazott függvényre van szükség. Vagy futtathatjuk a Kivonatolás eszközt, és a feladatot egy egérkattintással elvégezhetjük. Az alábbiakban mindkét módszerről teljes részletességet talál.

    Hogyan lehet kivonni a számot a szöveges karakterlánc végéből?

    Ha van egy olyan alfanumerikus karakterláncokból álló oszlopunk, ahol a szöveg után szám következik, akkor a következő képletet használhatjuk.

    RIGHT( sejt , LEN( sejt ) - MAX(IF(ISNUMBER(MID( sejt , ROW(INDIRECT("1:"&LEN( sejt )))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( sejt ))), 0)))

    A képlet logikájára kicsit később térjünk ki. Most egyszerűen csak cseréljük ki a sejt az eredeti karakterláncot tartalmazó cellára (esetünkben A2) való hivatkozással, és írja be a képletet ugyanannak a sornak bármelyik üres cellájába, mondjuk a B2-be:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0))))))

    Ez a képlet csak a végétől kap számot. Ha a karakterlánc elején vagy közepén is vannak számok, azokat figyelmen kívül hagyja:

    A kivonatolás a RIGHT függvénnyel történik, amely a Text függvények kategóriájába tartozik. Ennek a függvénynek a kimenete mindig a következő szöveg A mi esetünkben az eredmény egy numerikus részlánc , ami az Excel szempontjából szintén szöveg, nem pedig szám.

    Ha azt szeretné, hogy az eredmény egy szám (amelyet a további számításokban felhasználhat), majd csomagolja a képletet a VALUE függvénybe, vagy végezzen olyan aritmetikai műveletet, amely nem változtatja meg az eredményt, mondjuk szorozzon 1-gyel vagy adjon hozzá 0-t. Az olyan karakterláncok hibáinak kiszűrésére, amelyek nem tartalmaznak egyetlen számot sem, használja az IFERROR függvényt. Például:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0)))), ""))

    vagy

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0))) +0, ""))

    Megjegyzés: A Dinamikus tömb Excelben (Office 365 és 2021) a képletet a szokásos módon, az Enter billentyűvel írja be. Az Excel 2019 és korábbi változatban csak tömbképletként működik, ezért ne feledje, hogy a Ctrl + Shift + Enter billentyűkombinációval fejezze be.

    Hogyan működik ez a képlet:

    Ahhoz, hogy egy alfanumerikus karakterláncból számot vonjunk ki, először is tudnunk kell, hogy hol kezdjük a kivonást. A karakterlánc utolsó nem numerikus karakterének pozícióját a következő trükkös képlet segítségével határozzuk meg:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0)))

    Hogy megértsük a logikát, vizsgáljuk meg belülről:

    A ROW(INDIRECT("1:"&LEN(A2))) kombináció létrehoz egy számsorozatot, amely megfelel a forrás karakterlánc (A2) összes karakterének, és ezeket a sorszámokat adjuk meg a MID-nek kezdőszámként:

    MID(A2, {1;2;3;4;5;6;7;8}, 1)

    A MID függvény minden egyes karaktert kivesz az A2-ből, és egy tömbként adja vissza őket:

    {"0";"5";"-";"E";"C";"-";"0";"1"}

    Mivel a MID egy szövegfüggvény, a kimenete mindig szöveg (mint láthatjuk, minden karakter idézőjelbe van zárva). Ahhoz, hogy a numerikus egyeseket számokká alakítsuk, megszorozzuk a tömböt 1-gyel (a dupla negáció --MID() ugyanezt a hatást éri el). A művelet eredménye egy számokból és a nem numerikus karaktereket jelölő #VALUE! hibákból álló tömb:

    ISNUMBER({0;5;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;#ÉRTÉK!;0;1})

    Az ISNUMBER függvény kiértékeli a tömb minden egyes elemét, és Boolean értékek formájában adja meg az ítéletet - számok esetén TRUE, minden más esetben FALSE:

    {IGAZ;IGAZ;IGAZ;HAMIS;HAMIS;HAMIS;HAMIS;HAMIS;IGAZ;IGAZ;IGAZ}

    Ez a tömb az IF függvény logikai tesztjébe kerül, ahol a tömb minden egyes elemét FALSE értékkel hasonlítja össze:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2)))), 0)

    Minden FALSE (nem numerikus érték) esetén egy másik ROW(INDIRECT()) függvény adja vissza a relatív pozícióját a karakterláncban. Minden TRUE (numerikus érték) esetén egy nullát kapunk vissza. Az így kapott tömb a következőképpen néz ki:

    {0;0;3;4;5;6;0;0}

    A többi egyszerű. A MAX függvény megtalálja a fenti tömbben a legmagasabb számot, ami a karakterlánc utolsó nem numerikus értékének pozíciója (esetünkben 6). Egyszerűen kivonjuk ezt a pozíciót a karakterlánc LEN által visszaadott teljes hosszából, és az eredményt átadjuk a RIGHT-nak, hogy tudja, hány karaktert kell kivenni a karakterlánc jobb oldalából:

    JOBBRA(A2, LEN(A2) - 6)

    Kész!

    Hogyan lehet kivonni a számot a szöveges karakterlánc elejéről?

    Ha olyan rekordokkal dolgozik, amelyekben a szám után szöveg jelenik meg, akkor a számot a karakterlánc elejéről kiveheti a következő általános képlet segítségével:

    LEFT( sejt , MATCH(FALSE, ISNUMBER(MID( sejt , ROW(INDIRECT("1:"&LEN( sejt )+1)), 1) *1), 0) -1)

    Az A2-ben lévő eredeti karakterlánccal a következő képlet segítségével kapjuk meg a számot:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1) -1)

    Nem számít, hány számjegy van a közepén vagy a végén, csak a kezdőszámot vonja ki:

    Megjegyzés: Az Excel 365 és Excel 2021 programokban a dinamikus tömbök támogatása miatt a normál képlet is működik. Az Excel 2019 és korábbi programokban a Ctrl + Shift + Enter billentyűkombinációval kell kifejezetten a tömb képlet .

    Hogyan működik ez a képlet:

    Itt ismét a ROW, INDIRECT és LEN függvények kombinációját használjuk, hogy létrehozzunk egy számsorozatot, amely megegyezik a forrás karakterláncban lévő karakterek számával plusz 1 karakterrel (a további karakter szerepe kicsit később válik világossá).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    A MID és az ISNUMBER ugyanazt a feladatot végzi, mint az előző példában - a MID az egyes karaktereket húzza ki, az ISNUMBER pedig logikai értékekké alakítja őket. Az így kapott TRUE és FALSE tömb a MATCH függvénybe kerül, mint egy keresési tömb:

    MATCH(FALSE, {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE}, 0)

    A MATCH kiszámítja az első FALSE relatív pozícióját, így megkapjuk a karakterlánc első nem numerikus karakterének pozícióját (3 az A2-ben). Az előző számok kivonásához kivonjuk az 1-et az első szöveges karakter pozíciójából, és a különbséget a num_chars a LEFT függvény argumentuma:

    LEFT(A2, 3-1)

    Most pedig vissza egy "extra" karakterhez a ROW(INDIRECT()+1)) által generált szekvenciában. Mint már tudjuk, ez a szekvencia adja a kiindulási pontokat a MID függvény számára. +1 nélkül a MID pontosan annyi karaktert vonna ki, amennyi az eredeti karakterláncban van. Ha a karakterlánc csak számokat tartalmaz, az ISNUMBER csak TRUE-kat fog visszaadni, míg a MATCH-nak legalább egy FALSE-ra van szüksége. Hogy ezt biztosítsuk, hozzáadunk egytöbb karaktert a karakterlánc teljes hosszához, amelyet a MID függvény üres karakterlánccá alakítana. Például a B7-ben a MID ezt a tömböt adja vissza:

    {"1"; "2"; "3"; "4";""}

    Megjegyzés: A RIGHT függvényhez hasonlóan a LEFT függvény is visszaad egy numerikus részlánc , ami technikailag szöveg, nem szám. Ha az eredményt számként szeretné megkapni, nem pedig numerikus karakterláncként, akkor a képletet a VALUE függvénybe kell beágyazni, vagy az eredményt meg kell szorozni 1-gyel, ahogy az első példában látható.

    Hogyan kapunk számot egy karakterlánc bármelyik pozíciójából

    Ha az Ön feladata számok kivonása egy karakterlánc bármely pontjából, akkor a MrExcel fórumon közzétett alábbi, észbontó képletet használhatja:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1))) * ROW(INDIRECT("1:"&LEN(A2)))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10))

    Ahol A2 az eredeti szöveges karakterlánc.

    Ennek a képletnek a lebontása külön cikket igényelne, ezért egyszerűen másold át a munkalapodra, hogy megbizonyosodj róla, hogy tényleg működik :)

    Az eredményeket megvizsgálva azonban észrevehetünk egy jelentéktelen hátrányt - ha a forráslánc nem tartalmaz számot, a képlet nullát ad vissza, mint a fenti képernyőkép 6. sorában. Ennek kijavítására a képletet IF utasításba csomagolhatjuk, amelynek logikai tesztje ellenőrzi, hogy a forráslánc tartalmaz-e számot. Ha igen, a képlet kivonja a számot, ellenkező esetben üres értéket ad vissza.zsinór:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    Amint az alábbi képernyőképen látható, a javított képlet gyönyörűen működik (dicséret Alexnek, az Excel-gurunak ezért a fejlesztésért):

    Az előző példáktól eltérően ennek a képletnek az eredménye a következő szám Hogy erről meggyőződjünk, csak figyeljük meg a B oszlopban a jobbra igazított értékeket és a csonkolt vezető nullákat.

    Tipp. Az Excel 365 - Excel 2019-ben sokkal egyszerűbb megoldás létezik a TEXTJOIN funkció segítségével. Lásd: Hogyan távolítsuk el a szöveget és tartsuk meg a számokat.

    Szám kivonása szöveges karakterláncból az Ultimate Suite segítségével

    Amint az imént láthatta, nincs triviális Excel-képlet arra, hogy számot húzzon ki egy szöveges karakterláncból. Ha nehézségei vannak a képletek megértésével vagy az adatkészletekhez való igazításával, akkor tetszhet ez az egyszerű módja annak, hogy számot kapjon a karakterláncból az Excelben.

    Az Excel szalaghoz hozzáadott Ultimate Suite programcsomagunkkal így gyorsan lekérdezhet számot bármilyen alfanumerikus karakterláncból:

    1. Menjen a Ablebits adatok tab> Szöveg csoport, és kattintson a Kivonat :

    2. Jelölje ki az összes cellát a forrás karakterláncokkal.
    3. A Kivonat eszköz ablaktábláján válassza ki a Kivonatszámok rádiógomb.
    4. Attól függően, hogy az eredmények képletek vagy értékek legyenek, válassza ki a Beillesztés képletként mezőt, vagy hagyja kijelölve (alapértelmezett).

      Azt tanácsolom, hogy jelölje be ezt a négyzetet, ha azt szeretné, hogy a kinyert számok automatikusan frissüljenek, amint a forrássztringeken bármilyen változás történik. Ha azt szeretné, hogy az eredmények függetlenek legyenek az eredeti sztringektől (pl. abban az esetben, ha a forrásadatokat egy későbbi időpontban el akarja távolítani), akkor ne jelölje be ezt a négyzetet.

    5. Kattintson a Eredmények beillesztése Kész!

    Az előző példához hasonlóan a kivonatolás eredményei a következők számok , ami azt jelenti, hogy szabadon számolhat, összegezhet, átlagolhat, vagy bármilyen más számítást végezhet velük.

    Ebben a példában úgy döntöttünk, hogy az eredményeket a következő formában illesztjük be értékek , és a bővítmény pontosan azt tette, amit kértünk:

    Ha a Beillesztés képletként jelölőnégyzet be volt jelölve, akkor megfigyelhet egy formula a képlet sávban. Kíváncsi vagy, hogy melyik? Csak töltsd le az Ultimate Suite próbaverzióját és győződj meg róla :)

    Elérhető letöltések

    Excel kivonat szám - minta munkafüzet (.xlsx fájl)

    Ultimate Suite - próbaverzió (.exe fájl)

    Michael Brown elkötelezett technológiai rajongó, aki szenvedélyesen egyszerűsíti a bonyolult folyamatokat szoftvereszközök segítségével. A technológiai iparban szerzett több mint egy évtizedes tapasztalatával a Microsoft Excel és az Outlook, valamint a Google Táblázatok és a Dokumentumok területén fejlesztette tudását. Michael blogja célja, hogy megossza tudását és szakértelmét másokkal, könnyen követhető tippeket és oktatóanyagokat adva a termelékenység és a hatékonyság javításához. Akár tapasztalt szakember, akár kezdő, Michael blogja értékes betekintést és gyakorlati tanácsokat kínál, amelyek segítségével a legtöbbet hozhatja ki ezekből az alapvető szoftvereszközökből.