Cuprins
Tutorialul arată cum se extrag numere din diverse șiruri de text în Excel, utilizând formule și instrumentul Extragere.
Când vine vorba de extragerea unei părți dintr-un șir de text de o anumită lungime, Excel oferă trei funcții Substring (Left, Right și Mid) pentru a rezolva rapid această sarcină. Când vine vorba de extragerea de numere dintr-un șir alfanumeric, Microsoft Excel nu oferă... nimic.
Pentru a obține un număr dintr-un șir de caractere în Excel, este nevoie de puțină ingeniozitate, de puțină răbdare și de o mulțime de funcții diferite imbricate unele în altele. Sau, puteți rula instrumentul Extract și puteți face treaba cu un simplu clic de mouse. Mai jos veți găsi detalii complete despre ambele metode.
Cum se extrage numărul de la sfârșitul șirului de text
Atunci când aveți o coloană de șiruri alfanumerice în care numărul vine după text, puteți utiliza următoarea formulă pentru a-l obține.
RIGHT( celulă , LEN( celulă ) - MAX(IF(ISNUMBER(MID( celulă , ROW(INDIRECT("1:"&LEN( celulă )))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( celulă ))), 0)))Ne vom opri puțin mai târziu asupra logicii formulei. Deocamdată, este suficient să înlocuim celulă cu o referință la celula care conține șirul original (A2 în cazul nostru) și introduceți formula în orice celulă goală din același rând, de exemplu în B2:
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))))))
Această formulă preia numerele numai de la sfârșit. Dacă un șir are numere la început sau la mijloc, acestea sunt ignorate:
Extracția se realizează cu ajutorul funcției RIGHT, care aparține categoriei de funcții Text. Ieșirea acestei funcții este întotdeauna text În cazul nostru, rezultatul este un Subșir numeric , care, din punct de vedere al Excel, este tot text, nu număr.
Dacă aveți nevoie ca rezultatul să fie un număr (pe care o puteți utiliza în calculele ulterioare), apoi includeți formula în funcția VALUE sau efectuați o operație aritmetică care nu modifică rezultatul, de exemplu, înmulțiți cu 1 sau adăugați 0. Pentru a detecta erorile din șirurile care nu conțin un singur număr, utilizați funcția IFERROR. De exemplu:
=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)))), "")
sau
=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, "")
Notă. În Dynamic Array Excel (Office 365 și 2021), introduceți formula în mod obișnuit cu tasta Enter. În Excel 2019 și versiunile anterioare, funcționează doar ca o formulă de matrice, așa că nu uitați să apăsați Ctrl + Shift + Enter pentru a o completa.
Cum funcționează această formulă:
Pentru a extrage un număr dintr-un șir alfanumeric, primul lucru pe care trebuie să îl știți este de unde să începeți extracția. Poziția ultimului caracter nenumeric dintr-un șir este determinată cu ajutorul acestei formule complicate:
MAX(IF(ISNUMBER(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))
Pentru a înțelege logica, haideți să o analizăm din interior:
Combinația ROW(INDIRECT("1:"&LEN(A2)))) creează o secvență de numere corespunzătoare numărului total de caractere din șirul sursă (A2), iar aceste numere secvențiale sunt utilizate de MID ca numere de pornire:
MID(A2, {1;2;3;4;5;6;7;8}, 1)
Funcția MID extrage fiecare caracter individual din A2 și îl returnează sub forma unui array:
{"0";"5";"-";"E";"C";"-";"0";"1"}
Deoarece MID este o funcție text, rezultatul său este întotdeauna text (după cum puteți observa, toate caracterele sunt între ghilimele). Pentru a transforma cele numerice în numere, înmulțim matricea cu 1 (dubla negație --MID() va avea același efect). Rezultatul acestei operații este o matrice de numere și erori #VALUE! reprezentând caractere nenumerice:
ISNUMBER({0;5;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;#VALOARE!;0;1})
Funcția ISNUMBER evaluează fiecare element al matricei și dă verdictul său sub formă de valori booleene - TRUE pentru numere, FALSE pentru orice altceva:
{ADEVĂRAT;ADEVĂRAT;ADEVĂRAT;FALS;FALS;FALS;FALS;FALS;FALS;ADEVĂRAT;ADEVĂRAT}
Această matrice trece la testul logic al funcției IF, unde fiecare element al matricei este comparat cu FALSE:
IF({TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0), 0)
Pentru fiecare FALSE (valoare nenumerică), o altă funcție ROW(INDIRECT()) returnează poziția sa relativă în șirul de caractere. Pentru fiecare TRUE (valoare numerică), se returnează un zero. Matricea rezultată arată după cum urmează:
{0;0;3;4;5;6;0;0}
Restul este simplu. Funcția MAX găsește cel mai mare număr din matricea de mai sus, care este poziția ultimei valori nenumerice din șir (6 în cazul nostru). Pur și simplu, se scade această poziție din lungimea totală a șirului returnată de LEN și se trece rezultatul la RIGHT pentru a-i spune câte caractere trebuie să extragă din partea dreaptă a șirului:
RIGHT(A2, LEN(A2) - 6)
Gata!
Cum se extrage numărul de la începutul unui șir de text
Dacă lucrați cu înregistrări în care textul apare după număr, puteți extrage numărul de la începutul unui șir de caractere utilizând această formulă generică:
STÂNGA( celulă , MATCH(FALSE, ISNUMBER(MID( celulă , ROW(INDIRECT("1:"&LEN( celulă )+1)), 1) *1), 0) -1)Cu șirul original din A2, utilizați următoarea formulă pentru a obține numărul:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1))), 1) *1), 0) -1)
Indiferent câte cifre se află la mijloc sau la sfârșit, se extrage doar numărul de început:
Notă. În Excel 365 și Excel 2021, datorită suportului pentru array-uri dinamice, o formulă obișnuită funcționează bine. În Excel 2019 și versiunile anterioare, trebuie să apăsați Ctrl + Shift + Enter pentru a o transforma în mod explicit într-o formulă formula matricei .
Cum funcționează această formulă:
Aici, folosim din nou combinația funcțiilor ROW, INDIRECT și LEN pentru a crea o secvență de numere egală cu numărul total de caractere din șirul sursă plus 1 (rolul acestui caracter suplimentar va deveni clar puțin mai târziu).
ROW(INDIRECT("1:"&LEN(A2)+1)))
MID și ISNUMBER fac aceeași treabă ca în exemplul anterior - MID extrage caracterele individuale, iar ISNUMBER le convertește în valori logice. Matricea rezultată de TRUE și FALSE merge la funcția MATCH ca o matrice de căutare:
MATCH(FALSE, {TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)
MATCH calculează o poziție relativă a primului FALSE, oferindu-ne poziția primului caracter nenumeric din șir (3 în A2). Pentru a extrage numerele precedente, scădem 1 din poziția primului caracter de text și servim diferența la num_chars argument al funcției LEFT:
LEFT(A2, 3-1)
Acum, revenim la un caracter "în plus" în secvența generată de ROW(INDIRECT()+1))). După cum știți deja, această secvență furnizează punctele de plecare pentru funcția MID. Fără +1, MID ar extrage exact atâtea caractere câte sunt în șirul original. Dacă șirul conține numai numere, ISNUMBER va returna numai TRUE-uri, în timp ce MATCH are nevoie de cel puțin un FALSE. Pentru a ne asigura de acest lucru, adăugăm un caractermai multe caractere până la lungimea totală a șirului, pe care funcția MID le-ar converti într-un șir gol. De exemplu, în B7, MID returnează această matrice:
{"1"; "2"; "3"; "4";""}
Notă. Ca și în cazul funcției RIGHT, LEFT returnează și ea un Subșir numeric Pentru a obține rezultatul sub formă de număr și nu de șir de caractere numerice, aninați formula în funcția VALUE sau înmulțiți rezultatul cu 1, așa cum se arată în primul exemplu.
Cum să obțineți numărul din orice poziție într-un șir de caractere
Dacă sarcina dvs. implică extragerea unui număr din orice punct al unui șir de caractere, puteți utiliza următoarea formulă uluitoare publicată pe forumul MrExcel:
=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)
Unde A2 este șirul de text original.
Pentru a detalia această formulă ar fi nevoie de un articol separat, așa că o puteți copia pur și simplu în foaia de calcul pentru a vă asigura că funcționează cu adevărat :)
Totuși, la examinarea rezultatelor, s-ar putea să observați un dezavantaj nesemnificativ - dacă șirul sursă nu conține un număr, formula returnează zero, ca în rândul 6 din captura de ecran de mai sus. Pentru a remedia acest lucru, puteți îngloba formula în instrucțiunea IF, al cărei test logic verifică dacă șirul sursă conține vreun număr. Dacă da, formula extrage numărul, altfel returnează un număr golșir:
=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),"")
După cum se arată în captura de ecran de mai jos, formula îmbunătățită funcționează foarte bine (felicitări lui Alex, guru Excel, pentru această îmbunătățire):
Spre deosebire de toate exemplele anterioare, rezultatul acestei formule este număr Pentru a vă asigura de acest lucru, observați valorile aliniate la dreapta din coloana B și zerourile de început trunchiate.
Sfat. În Excel 365 - Excel 2019, există o soluție mult mai simplă cu ajutorul funcției TEXTJOIN. Vă rugăm să consultați Cum să eliminați textul și să păstrați numerele.
Extrageți numărul din șirul de text cu Ultimate Suite
După cum tocmai ați văzut, nu există o formulă Excel trivială pentru a extrage un număr dintr-un șir de text. Dacă aveți dificultăți în a înțelege formulele sau în a le modifica pentru seturile dvs. de date, s-ar putea să vă placă acest mod simplu de a obține un număr dintr-un șir de caractere în Excel.
Cu suita noastră Ultimate Suite adăugată la panglica Excel, iată cum puteți prelua rapid un număr din orice șir alfanumeric:
- Mergeți la Date Ablebits tab> Text grup, apoi faceți clic pe Extras :
- Selectați toate celulele cu șirurile sursă.
- În panoul instrumentului Extract, selectați Numere de extras buton radio.
- În funcție de faptul că doriți ca rezultatele să fie formule sau valori, selectați opțiunea Introduceți ca formulă sau lăsați-o neselectată (implicit).
Vă sfătuiesc să selectați această casetă dacă doriți ca numerele extrase să se actualizeze automat de îndată ce se face orice modificare a șirurilor sursă. Dacă doriți ca rezultatele să fie independente de șirurile originale (de exemplu, în cazul în care intenționați să eliminați datele sursă la un moment dat), nu selectați această casetă.
- Faceți clic pe butonul Introduceți rezultatele Buton. Gata!
La fel ca în exemplul anterior, rezultatele extracției sunt numere , ceea ce înseamnă că puteți număra, însuma, calcula media sau efectua orice alt calcul cu ele.
În acest exemplu, am ales să inserăm rezultatele sub forma valori , iar add-in-ul a făcut exact ceea ce i s-a cerut:
În cazul în care Introduceți ca formulă a fost selectată, veți observa un formula în bara de formule. Curiozitatea de a ști care dintre ele? Descărcați versiunea de încercare a Ultimate Suite și vedeți cu ochii voștri :)
Descărcări disponibile
Excel Extract Number - Exemplu de registru de lucru (fișier .xlsx)
Ultimate Suite - versiunea de încercare (fișier .exe)