Excel: extreu el número de la cadena de text

  • Comparteix Això
Michael Brown

El tutorial mostra com extreure nombres de diverses cadenes de text a Excel mitjançant fórmules i l'eina Extracció.

Quan es tracta d'extreure part d'una cadena de text d'una longitud determinada. , Excel ofereix tres funcions de subcadena (esquerra, dreta i mitja) per gestionar ràpidament la tasca. Quan es tracta d'extreure números d'una cadena alfanumèrica, Microsoft Excel no proporciona... res.

Per obtenir un número d'una cadena a Excel, cal una mica d'enginy, una mica de paciència i un munt de funcions diferents. niuats els uns en els altres. O bé, podeu executar l'eina Extracció i fer la feina amb un clic del ratolí. A continuació trobareu tots els detalls sobre ambdós mètodes.

    Com extreure el número del final de la cadena de text

    Quan teniu una columna de cadenes alfanumèriques on el número ve després text, podeu utilitzar la fórmula següent per obtenir-lo.

    DRET( cel·la, LEN( cel·la) - MAX(IF(ISNUMBER(MID( cel·la<2)>, FILA(INDIRECT("1:"&LEN( cel·la ))), 1) *1)=FALS, FILA(INDIRECT("1:"&LEN( cel·la ))), 0)))

    Ens detenem en la lògica de la fórmula una mica més tard. De moment, simplement substituïu cel·la per una referència a la cel·la que conté la cadena original (A2 en el nostre cas) i introduïu la fórmula a qualsevol cel·la buida de la mateixa fila, per exemple, a B2:

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

    Aquesta fórmula només obté el nombre del final. Si una cadena també té números al principi o al mig, ho sónignorat:

    L'extracció es realitza amb la funció DRET que pertany a la categoria de funcions de text. La sortida d'aquesta funció és sempre text . En el nostre cas, el resultat és una subcadena numèrica , que en termes d'Excel també és text, no nombre.

    Si necessiteu que el resultat sigui un número (que podeu utilitzar en càlculs posteriors), després embolcalleu la fórmula a la funció VALOR o realitzeu una operació aritmètica que no canviï el resultat, per exemple, multipliqueu per 1 o sumeu 0. Per detectar errors a les cadenes que no contenen un número únic, utilitzeu la funció IFERROR. Per exemple:

    =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)))), "")

    o

    =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, "")

    Nota. A Dynamic Array Excel (Office 365 i 2021), introduïu la fórmula de la manera habitual amb la tecla Enter. A Excel 2019 i anteriors, només funciona com a fórmula de matriu, així que recordeu prémer Ctrl + Maj + Retorn per completar-lo.

    Com funciona aquesta fórmula:

    Per extreure un nombre d'una cadena alfanumèrica, el primer que cal saber és on començar l'extracció. La posició de l'últim caràcter no numèric d'una cadena es determina amb l'ajuda d'aquesta fórmula complicada:

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

    Per entendre la lògica, investiguem-la des de dins :

    La combinació ROW(INDIRECT("1:"&LEN(A2)))crea una seqüència de números corresponent al total de caràcters de la cadena d'origen (A2) i servim aquests números seqüencials a MID com a nombres inicials:

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

    La funció MID extreu cada caràcter individual de A2 i els retorna com a matriu:

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

    Com que MID és una funció de text, la seva sortida sempre és text (com podeu observar, tots els caràcters s'entreguen entre cometes). Per convertir els numèrics en números, multipliquem la matriu per 1 (la doble negació --MID() tindrà el mateix efecte). El resultat d'aquesta operació és una matriu de números i #VALOR! errors que representen caràcters no numèrics:

    ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALOR!;0;1})

    La funció ISNUMBER avalua cada element de la matriu i dóna el seu veredicte en forma de valors booleans: TRUE per als nombres, FALSE per a qualsevol altra cosa:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}

    Aquesta matriu passa a la prova lògica de la funció SI, on cada element de la matriu es compara amb FALSE:

    SI({VERTADERA;CERTADERA;FALSA;FALSA;FALSA;FALSA;CERTADERA ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    Per a cada FALSE (valor no numèric), una altra funció ROW(INDIRECT()) retorna la seva posició relativa a la cadena. Per a cada TRUE (valor numèric), es retorna un zero. La matriu resultant semblasegueix:

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

    La resta és fàcil. La funció MAX troba el nombre més alt a la matriu anterior, que és la posició de l'últim valor no numèric de la cadena (6 en el nostre cas). Simplement, resta aquesta posició de la longitud total de la cadena retornada per LEN i passa el resultat a DRET per fer-li saber quants caràcters cal extreure del costat dret de la cadena:

    DRETA(A2, LEN (A2) - 6)

    Fet!

    Com extreure el número del principi de la cadena de text

    Si esteu treballant amb registres on el text apareix després del número, podeu extreu el número de l'inici d'una cadena utilitzant aquesta fórmula genèrica:

    LEFT( cel·la , MATCH(FALSE, ISNUMBER(MID( cell , ROW(INDIRECT("1:): "&LEN( cel·la )+1)), 1) *1), 0) -1)

    Amb la cadena original en A2, utilitzeu la fórmula següent per obtenir el número:

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

    No importa quants dígits hi hagi al mig o al final, només s'extreu el número inicial:

    Nota. A Excel 365 i Excel 2021, a causa del suport per a matrius dinàmiques, una fórmula normal funciona bé. A Excel 2019 i versions anteriors, hauríeu de prémer Ctrl + Maj + Retorn per convertir-la explícitament en una fórmula de matriu .

    Com funciona aquesta fórmula:

    Aquí, tornem a utilitzar la combinació de funcions ROW, INDIRECTE i LEN per crear una seqüència de nombres igual al total de caràcters de la cadena font més 1 (el paper d'aquestel caràcter addicional quedarà clar una mica més tard).

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

    MID i ISNUMBER fan la mateixa feina que a la exemple anterior: MID extreu caràcters individuals i ISNUMBER els converteix als valors lògics. La matriu resultant de VERDADERS i FALS passa a la funció COINCORDA com una matriu de cerca:

    COINCIDENT(FALSE, {VERDADERA;CERTADERA;FALSA;FALSA;FALSA;FALSA;CERTADERA;CERTADERA;FALSA}, 0)

    MATCH calcula una posició relativa del primer FALSE, donant-nos la posició del primer caràcter no numèric de la cadena (3 en A2). Per extreure els números anteriors, restem 1 de la posició del primer caràcter de text i servim la diferència a l'argument num_chars de la funció LEFT:

    LEFT(A2, 3-1)

    Ara, tornem a un caràcter "extra" de la seqüència generada per ROW(INDIRECT()+1)). Com ja sabeu, aquesta seqüència proporciona els punts de partida per a la funció MID. Sense +1, MID extreuria exactament tants caràcters com hi ha a la cadena original. Si la cadena només conté números, ISNUMBER només retornarà TRUE mentre que MATCH necessita almenys un FALSE. Per garantir-ho, afegim un caràcter més a la longitud total de la cadena, que la funció MID convertiria en una cadena buida. Per exemple, a B7, MID retorna aquesta matriu:

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

    Nota. Com és el cas de la funció RIGHT, LEFT també retorna un numèricsubcadena , que tècnicament és text, no número. Per obtenir el resultat com a nombre en lloc d'una cadena numèrica, anideu la fórmula a la funció VALOR o multipliqueu el resultat per 1 tal com es mostra al primer exemple.

    Com obtenir un número des de qualsevol posició d'una cadena

    Si la vostra tasca implica extreure nombre de qualsevol lloc d'una cadena, podeu fer servir la següent fórmula al·lucinant publicada al fòrum 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)

    On A2 és el cadena de text original.

    Desglossar aquesta fórmula requeriria un article separat, de manera que simplement podeu copiar-lo al vostre full de treball per assegurar-vos que funciona realment :)

    En examinar els resultats, però, és possible que observeu un inconvenient insignificant: si la cadena d'origen no conté un número, la fórmula retorna zero, com a la fila 6 de la captura de pantalla anterior. Per solucionar-ho, podeu embolicar la fórmula a la instrucció IF, la prova lògica de la qual verifica si la cadena d'origen conté algun número. Si ho fa, la fórmula extreu el número, en cas contrari retorna una cadena buida:

    =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),"")

    Com es mostra a la captura de pantalla següent, la fórmula millorada funciona molt bé (felicitats a Alex, el nostre guru d'Excel, per a aquesta millora):

    A diferència de tots els exemples anteriors, el resultat d'aquesta fórmula és número . Per assegurar-vos-ho, només observeu els valors alineats a la dreta a la columna B i els zeros inicials truncats.

    Consell. En Excel 365 -Excel 2019, hi ha una solució molt més senzilla amb l'ajuda de la funció TEXTJOIN. Si us plau, vegeu Com eliminar text i conservar els números.

    Extreure el número d'una cadena de text amb Ultimate Suite

    Com acabeu de veure, no hi ha una fórmula trivial d'Excel per extreure un número d'una cadena de text. Si teniu dificultats per entendre les fórmules o per ajustar-les per als vostres conjunts de dades, us pot agradar aquesta manera senzilla d'obtenir el número de la cadena d'Excel.

    Amb la nostra Ultimate Suite afegit a la vostra cinta d'Excel, així és com podeu pot recuperar ràpidament el número de qualsevol cadena alfanumèrica:

    1. Aneu a la pestanya Dades d'Ablebits > Text grup i feu clic a Extreu :

    2. Seleccioneu totes les cel·les amb les cadenes d'origen.
    3. Al panell de l'eina Extracció, seleccioneu el botó d'opció Extreu números .
    4. Segons si voleu que els resultats siguin fórmules o valors, seleccioneu el quadre Insereix com a fórmula o deixeu-lo sense seleccionar (per defecte).

      El meu consell és que seleccioneu aquesta casella si voleu que els números extrets s'actualitzin automàticament tan bon punt es facin canvis a les cadenes d'origen. Si voleu que els resultats siguin independents de les cadenes originals (per exemple, si teniu previst eliminar les dades d'origen en un moment posterior), no seleccioneu aquesta casella.

    5. Feu clic al botó Insereix resultats . Fet!

    Com a l'exemple anterior, els resultats de lal'extracció són nombres , és a dir, podeu comptar, sumar, fer la mitjana o realitzar qualsevol altre càlcul amb ells.

    En aquest exemple, hem optat per inserir els resultats com a valors , i el complement va fer exactament el que es va demanar:

    Si es va seleccionar la casella de selecció Insereix com a fórmula , d observeu una fórmula a la barra de fórmules. Teniu curiositat per saber quin? Només cal que baixeu la prova d'Ultimate Suite i comproveu-ho vosaltres mateixos :)

    Descàrregues disponibles

    Número d'extracte d'Excel: llibre de treball de mostra (fitxer .xlsx)

    Ultimate Suite - versió de prova (.exe fitxer)

    Michael Brown és un entusiasta de la tecnologia dedicat amb una passió per simplificar processos complexos mitjançant eines de programari. Amb més d'una dècada d'experiència en la indústria tecnològica, ha perfeccionat les seves habilitats en Microsoft Excel i Outlook, així com en Google Sheets i Docs. El bloc de Michael es dedica a compartir els seus coneixements i experiència amb altres persones, oferint consells i tutorials fàcils de seguir per millorar la productivitat i l'eficiència. Tant si sou un professional experimentat com si sou un principiant, el bloc de Michael ofereix valuoses idees i consells pràctics per treure el màxim profit d'aquestes eines de programari essencials.