Pozrite si video - Ako extrahovať čísla z textových reťazcov v programe Excel (pomocou vzorcov a VBA)
V programe Excel nie je vstavaná funkcia na extrahovanie čísel z reťazca v bunke (alebo naopak - odstráňte číselnú časť a extrahujte textovú časť z alfanumerického reťazca).
To sa však dá urobiť pomocou kokteilu funkcií programu Excel alebo jednoduchého kódu VBA.
Najprv vám ukážem, o čom hovorím.
Predpokladajme, že máte množinu údajov, ako je uvedené nižšie, a chcete extrahovať čísla z reťazca (ako je uvedené nižšie):
Metóda, ktorú si vyberiete, bude závisieť aj od verzie Excelu, ktorú používate:
- Vo verziách starších ako Excel 2016 musíte použiť o niečo dlhšie vzorce
- Pre Excel 2016 môžete použiť novo uvedenú funkciu TEXTJOIN
- Metódu VBA je možné použiť vo všetkých verziách programu Excel
Kliknutím sem stiahnete ukážkový súbor
Extrahujte čísla z reťazca v programe Excel (Vzorec pre Excel 2016)
Tento vzorec bude fungovať iba v Exceli 2016, pretože používa novo uvedenú funkciu TEXTJOIN.
Tento vzorec môže tiež extrahovať čísla, ktoré sú na začiatku, konci alebo v strede textového reťazca.
Všimnite si toho, že vzorec TEXTJOIN obsiahnutý v tejto časti vám poskytne všetky číselné znaky dohromady. Ak je napríklad text „Cena 10 lístkov je 200 USD“, výsledkom bude 10200.Predpokladajme, že máte množinu údajov, ako je uvedené nižšie, a chcete extrahovať čísla z reťazcov v každej bunke:
Nasleduje vzorec, ktorý vám poskytne číselnú časť z reťazca v programe Excel.
= TEXTJOIN ("", TRUE, IFERROR ((MID (A2, ROW (INDIRECT ("1:" & LEN (A2))), 1)*1), ""))
Toto je vzorec poľa, takže musíte použiť „Ctrl + Shift + Enter‘Namiesto použitia klávesu Enter.
V prípade, že v textovom reťazci nie sú žiadne čísla, tento vzorec vráti prázdny (prázdny reťazec).
Ako tento vzorec funguje?
Dovoľte mi prelomiť tento vzorec a pokúsiť sa vysvetliť, ako funguje:
- RIADOK (NEPRIAMY („1:“ & LEN (A2))) - táto časť vzorca by poskytla sériu čísel začínajúcich od jedného. Funkcia LEN vo vzorci vráti celkový počet znakov v reťazci. V prípade „Náklady sú 100 USD“ sa vráti 19. Vzorce by sa tak stali ROW (NEPRIAMY („1:19“). Funkcia ROW potom vráti sériu čísel - {1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19}
- (MID (A2, ROW (NEPRIAMY („1:“ & LEN (A2))), 1)*1) - Táto časť vzorca vráti pole #HODNOTA! chyby alebo čísla na základe reťazca. Všetky textové znaky v reťazci sa stanú #HODNOTOU! chyby a všetky číselné hodnoty zostanú tak, ako sú. Stáva sa to, pretože sme znásobili funkciu MID číslom 1.
- IFERROR ((MID (A2, ROW (INDIRECT („1:“ & LEN (A2))), 1)*1), ””)) - Keď sa použije funkcia IFERROR, odstráni sa celá #HODNOTA! chyby a zostali by iba čísla. Výstup z tejto časti by vyzeral takto - {“”; ””; ””; ””; “”; “”; “”; “”; “; ””; ””; ””; 1; 0; 0}
- = TEXTJOIN (“”, TRUE, IFERROR ((MID (A2, ROW (INDIRECT („1:” & LEN (A2))), 1)*1), ””))) - funkcia TEXTJOIN teraz jednoducho kombinuje reťazcové znaky ktorý zostane (čo sú iba čísla) a prázdny reťazec ignoruje.
Stiahnite si ukážkový súbor
Rovnakú logiku môžete použiť aj na extrahovanie textovej časti z alfanumerického reťazca. Nasleduje vzorec, ktorý by získal textovú časť z reťazca:
= TEXTJOIN ("", TRUE, IF (ISERROR (MID (A2, ROW (INDIRECT ("1:" & LEN (A2))), 1)*1)*1), MID (A2, ROW (INDIRECT ("1:" & LEN (A2))), 1), ""))
Menšou zmenou v tomto vzorci je, že funkcia IF sa používa na kontrolu, či pole, ktoré získavame z funkcie MID, sú chyby alebo nie. Ak ide o chybu, ponechá hodnotu, ktorú nahradí, prázdnym miestom.
Potom sa pomocou TEXTJOIN spoja všetky textové znaky.
Pozor: Aj keď tento vzorec funguje skvele, používa volatilnú funkciu (funkcia NEPRIAMY). To znamená, že v prípade, že ho použijete s veľkým súborom údajov, môže dosiahnutie určitého výsledku trvať nejaký čas. Pred použitím tohto vzorca v programe Excel je najlepšie vytvoriť zálohu.Extrahovať čísla z reťazcov v programe Excel (pre Excel 2013/2010/2007)
Ak máte Excel 2013. 2010. alebo 2007, nemôžete použiť vzorec TEXTJOIN, takže na jeho vykonanie budete musieť použiť zložitý vzorec.
Predpokladajme, že máte množinu údajov, ako je uvedené nižšie, a chcete extrahovať všetky čísla v reťazci v každej bunke.
Nasledujúci vzorec to urobí:
= IF (SUM (LEN (A2) -LEN (SUBSTITUTE (A2; {"0", "1", "2", "3", "4", "5", "6", "7", " 8 "," 9 "}," "))))> 0, SUMPRODUCT (MID (0 a A2, VEĽKÝ (INDEX (ISNUMBER (-MID (A2, ROW (NEPRIAMY) (" $ 1: $ "& LEN (A2))), 1)) * RIADOK (NEPRIAMY („$ 1: $“ & LEN (A2))), 0), ROW (NEPRIAMY („$ 1: $“ & LEN (A2))))+1,1) * 10^ROW (NEPRIAMY („$ 1: $“ & LEN (A2)))/10), „“)
V prípade, že v textovom reťazci nie je žiadne číslo, tento vzorec by vrátil prázdny (prázdny reťazec).
Aj keď je to vzorec poľa, vy nepotrebujem použiť na to „Control-Shift-Enter“. Pre tento vzorec funguje jednoduché zadanie.
Kredit na tento vzorec patrí úžasnému fóru Mr. Excel.
Tento vzorec opäť extrahuje všetky čísla v reťazci bez ohľadu na pozíciu. Ak je napríklad text „Cena 10 lístkov je 200 USD“, výsledkom bude 10200.
Pozor: Aj keď tento vzorec funguje skvele, používa volatilnú funkciu (funkcia NEPRIAMY). To znamená, že v prípade, že to použijete s rozsiahlou množinou údajov, môže získanie výsledkov trvať nejaký čas. Pred použitím tohto vzorca v programe Excel je najlepšie vytvoriť zálohu.Oddeľte text a čísla v programe Excel pomocou jazyka VBA
Ak oddeľovanie textu a číslic (alebo extrahovanie čísel z textu) musíte vykonávať často, môžete tiež použiť metódu VBA.
Všetko, čo musíte urobiť, je použiť jednoduchý kód VBA na vytvorenie vlastnej funkcie definovanej používateľom (UDF) v programe Excel a potom namiesto dlhých a komplikovaných vzorcov použiť tento vzorec VBA.
Ukážem vám, ako vo VBA vytvoriť dva vzorce - jeden na extrahovanie čísel a jeden na extrahovanie textu z reťazca.
Extrahujte čísla z reťazcov v programe Excel (pomocou VBA)
V tejto časti vám ukážem, ako vytvoriť vlastnú funkciu tak, aby ste z reťazca získali iba číselnú časť.
Nasleduje kód VBA, ktorý použijeme na vytvorenie tejto vlastnej funkcie:
Funkcia GetNumeric (CellRef ako reťazec) Dim StringLength ako celé číslo StringLength = Len (CellRef) For i = 1 až StringLength If IsNumeric (Mid (CellRef, i, 1)) Then Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Funkcia ukončenia výsledku
Tu je postup, ako vytvoriť túto funkciu a potom ju použiť v pracovnom hárku:
- Prejdite na kartu Vývojár.
- Kliknite na položku Visual Basic (Môžete tiež použiť klávesovú skratku ALT + F11)
- V otvorenom backende editora VB kliknite pravým tlačidlom myši na ľubovoľný objekt zošita.
- Prejdite na položku Vložiť a kliknite na modul. Tým sa vloží objekt modulu do zošita.
- V okne Kód modulu skopírujte a prilepte vyššie uvedený kód VBA.
- Zatvorte editor VB.
Teraz budete môcť v hárku používať funkciu GetText. Pretože sme urobili všetko ťažké v samotnom kóde, stačí použiť vzorec = GetNumeric (A2).
To vám okamžite poskytne iba číselnú časť reťazca.
Keďže zošit teraz obsahuje kód VBA, musíte ho uložiť s príponou .xls alebo .xlsm.
Stiahnite si ukážkový súbor
V prípade, že budete musieť tento vzorec používať často, môžete si ho uložiť aj do osobného zošita makier. To vám umožní použiť tento vlastný vzorec v ktoromkoľvek zošite programu Excel, s ktorým pracujete.
Extrahujte text z reťazca v programe Excel (pomocou VBA)
V tejto časti vám ukážem, ako vytvoriť vlastnú funkciu na získanie iba textovej časti z reťazca.
Nasleduje kód VBA, ktorý použijeme na vytvorenie tejto vlastnej funkcie:
Funkcia GetText (CellRef ako reťazec) Dim StringLength ako celé číslo StringLength = Len (CellRef) Pre i = 1 až StringLength ak nie (IsNumeric (Mid (CellRef, i, 1))) Then Result = Result & Mid (CellRef, i, 1 ) Ďalej i GetText = funkcia ukončenia výsledku
Tu je postup, ako vytvoriť túto funkciu a potom ju použiť v pracovnom hárku:
- Prejdite na kartu Vývojár.
- Kliknite na položku Visual Basic (Môžete tiež použiť klávesovú skratku ALT + F11)
- V otvorenom backende editora VB kliknite pravým tlačidlom myši na ľubovoľný objekt zošita.
- Prejdite na položku Vložiť a kliknite na modul. Tým sa vloží objekt modulu do zošita.
- Ak už modul máte, dvakrát naň kliknite (nie je potrebné vkladať nový, ak ho už máte).
- V okne Kód modulu skopírujte a prilepte vyššie uvedený kód VBA.
- Zatvorte editor VB.
Teraz budete môcť v hárku používať funkciu GetNumeric. Pretože sme urobili všetko ťažké v samotnom kóde, stačí použiť vzorec = GetText (A2).
To vám okamžite poskytne iba číselnú časť reťazca.
Keďže zošit teraz obsahuje kód VBA, musíte ho uložiť s príponou .xls alebo .xlsm.
V prípade, že budete musieť tento vzorec používať často, môžete si ho uložiť aj do osobného zošita makier. To vám umožní použiť tento vlastný vzorec v ktoromkoľvek zošite programu Excel, s ktorým pracujete.
V prípade, že používate Excel 2013 alebo predchádzajúce verzie a nemáte