Excel: extrae o número da cadea de texto

  • Comparte Isto
Michael Brown

O titorial mostra como extraer número de varias cadeas de texto en Excel mediante fórmulas e a ferramenta Extraer.

Cando se trata de extraer parte dunha cadea de texto dunha determinada lonxitude. , Excel ofrece tres funcións de subcadea (esquerda, dereita e media) para xestionar rapidamente a tarefa. Cando se trata de extraer números dunha cadea alfanumérica, Microsoft Excel non proporciona nada.

Para obter un número dunha cadea en Excel, é necesario un pouco de enxeño, un pouco de paciencia e unha morea de funcións diferentes. aniñados uns nos outros. Ou pode executar a ferramenta Extraer e facer o traballo cun clic do rato. A continuación atoparás detalles completos sobre ambos os métodos.

    Como extraer o número do final da cadea de texto

    Cando tes unha columna de cadeas alfanuméricas onde o número vén despois texto, podes usar a seguinte fórmula para obtelo.

    RIGHT( celda, LEN( celda) - MAX(IF(ISNUMBER(MID( celda<2)>, FILA(INDIRECT("1:"&LEN( celda ))), 1) *1)=FALSO, FILA(INDIRECT("1:"&LEN( celda ))), 0)))

    Deterémonos na lóxica da fórmula un pouco máis tarde. Polo momento, simplemente substitúe cela cunha referencia á cela que contén a cadea orixinal (A2 no noso caso) e introduza a fórmula en calquera cela baleira da mesma fila, digamos en B2:

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

    Esta fórmula só recibe o número do final. Se unha cadea tamén ten números ao principio ou ao medio, sonignorado:

    A extracción realízase coa función DEREITA que pertence á categoría de funcións Texto. A saída desta función é sempre texto . No noso caso, o resultado é unha subcadea numérica , que en termos de Excel tamén é texto, non número.

    Se precisa que o resultado sexa un número (que pode usar en cálculos posteriores), a continuación, envolve a fórmula na función VALOR ou realice unha operación aritmética que non cambie o resultado, por exemplo, multiplique por 1 ou sume 0. Para detectar erros nas cadeas que non conteñan un número único, use a función IFERROR. Por exemplo:

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

    ou

    =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. En Dynamic Array Excel (Office 365 e 2021), introduce a fórmula do xeito habitual coa tecla Intro. En Excel 2019 e anteriores, só funciona como unha fórmula matricial, así que recorda premer Ctrl + Maiús + Intro para completalo.

    Como funciona esta fórmula:

    Para extraer o número dunha cadea alfanumérica, o primeiro que debes saber é onde comezar a extracción. A posición do último carácter non numérico nunha cadea determínase coa axuda desta complicada fórmula:

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

    Para entender a lóxica, investigámola desde dentro :

    A combinación ROW(INDIRECT("1:"&LEN(A2)))crea unha secuencia de números correspondente ao total de caracteres da cadea de orixe (A2) e servimos estes números secuenciais a MID como números de inicio:

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

    A función MID extrae cada carácter individual de A2 e devólveos como unha matriz:

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

    Como MID é unha función de texto, a súa saída é sempre texto (como podes notar, todos os caracteres están entre comiñas). Para converter os numéricos en números, multiplicamos a matriz por 1 (a dobre negación --MID() terá o mesmo efecto). O resultado desta operación é unha matriz de números e #VALOR! erros que representan caracteres non numéricos:

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

    A función ISNUMBER avalía cada elemento da matriz e dá o seu veredicto en forma de valores booleanos: VERDADEIRO para os números, FALSO para calquera outra cousa:

    {VERDADEIRO;VERDADEIRO;FALSO;FALSO;FALSO;FALSO;VERDADEIRO;VERDADEIRO

    Esta matriz pasa á proba lóxica da función SE, onde cada elemento da matriz se compara con FALSO:

    IF({VERDADEIRO;VERDADEIRO;FALSO;FALSO;FALSO;FALSO;VERDADEIRO ;VERDADEIRO}=FALSO, FILA(INDIRECT("1:"&LEN(A2))), 0)

    Para cada FALSO (valor non numérico), outra función ROW(INDIRECT()) devolve a súa posición relativa na cadea. Para cada TRUE (valor numérico), devólvese un cero. A matriz resultante parecesegue:

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

    O resto é doado. A función MAX atopa o número máis alto na matriz anterior, que é a posición do último valor non numérico da cadea (6 no noso caso). Simplemente, resta esa posición da lonxitude total da cadea devolta por LEN e pasa o resultado a RIGHT para indicarlle cantos caracteres extraer do lado dereito da cadea:

    RIGHT(A2, LEN (A2) - 6)

    Feito!

    Como extraer o número do inicio da cadea de texto

    Se está a traballar con rexistros nos que o texto aparece despois do número, pode extrae o número do inicio dunha cadea usando esta fórmula xenérica:

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

    Coa cadea orixinal en A2, utiliza a seguinte fórmula para obter o número:

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

    Non importa cantos díxitos haxa no medio ou no final, só se extrae o número inicial:

    Nota. En Excel 365 e Excel 2021, debido á compatibilidade con matrices dinámicas, unha fórmula normal funciona ben. En Excel 2019 e anteriores, debes premer Ctrl + Maiús + Intro para que sexa explícitamente fórmula matricial .

    Como funciona esta fórmula:

    Aquí, usamos de novo a combinación das funcións ROW, INDIRECTO e LEN para crear unha secuencia de números igual ao total de caracteres da cadea de orixe máis 1 (o papel destecarácter adicional quedará claro un pouco máis tarde).

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

    MID e ISNUMBER fan o mesmo traballo que no exemplo anterior: MID extrae caracteres individuais e ISNUMBER convérteos aos valores lóxicos. A matriz resultante de VERDADEIRO e FALSO vai á función COINCIDIR como unha matriz de busca:

    COINCIDIR(FALSO, {VERDADEIRO;VERDADEIRO;FALSO;FALSO;FALSO;FALSO;VERDADEIRO;VERDADEIRO;FALSO}, 0)

    MATCH calcula a posición relativa do primeiro FALSO, dándonos a posición do primeiro carácter non numérico da cadea (3 en A2). Para extraer os números anteriores, restamos 1 da posición do primeiro carácter de texto e servimos a diferenza ao argumento num_chars da función LEFT:

    LEFT(A2, 3-1)

    Agora, volvemos a un carácter "extra" na secuencia xerada por ROW(INDIRECT()+1)). Como xa sabedes, esta secuencia proporciona os puntos de partida para a función MID. Sen +1, MID extraería exactamente tantos caracteres como hai na cadea orixinal. Se a cadea só contén números, ISNUMBER só devolverá TRUE mentres que MATCH necesita polo menos un FALSE. Para garantir iso, engadimos un carácter máis á lonxitude total da cadea, que a función MID convertería nunha cadea baleira. Por exemplo, en B7, MID devolve esta matriz:

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

    Nota. Como é o caso da función RIGHT, LEFT tamén devolve un numéricosubcadea , que tecnicamente é texto, non número. Para obter o resultado como un número e non como unha cadea numérica, aniña a fórmula na función VALOR ou multiplique o resultado por 1 como se mostra no primeiro exemplo.

    Como obter un número desde calquera posición dunha cadea

    Se a túa tarefa implica extraer número de calquera parte dunha cadea, podes facer uso da seguinte fórmula alucinante publicada no foro de 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)

    Onde A2 é o cadea de texto orixinal.

    Para desglosar esta fórmula sería necesario un artigo separado, polo que pode simplemente copialo na súa folla de traballo para asegurarse de que funciona realmente :)

    Ao examinar os resultados, con todo, pode notar un inconveniente insignificante: se a cadea de orixe non contén un número, a fórmula devolve cero, como na fila 6 da captura de pantalla anterior. Para solucionar isto, pode envolver a fórmula na instrución IF, cuxa proba lóxica verifica se a cadea de orixe contén algún número. Se o fai, a fórmula extrae o número, se non, devolve unha cadea baleira:

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

    Como se mostra na captura de pantalla a continuación, a fórmula mellorada funciona moi ben (parabéns a Alex, o noso gurú de Excel, para esta mellora):

    A diferenza de todos os exemplos anteriores, o resultado desta fórmula é número . Para asegurarse diso, basta con observar os valores aliñados á dereita na columna B e os ceros principais truncados.

    Consello. En Excel 365 -Excel 2019, hai unha solución moito máis sinxela coa axuda da función TEXTJOIN. Consulta Como eliminar texto e manter os números.

    Extraer o número dunha cadea de texto con Ultimate Suite

    Como acabas de ver, non hai unha fórmula de Excel trivial para extraer o número dunha cadea de texto. Se tes dificultades para comprender as fórmulas ou para axustalas para os teus conxuntos de datos, pode que che guste esta forma sinxela de obter o número dunha cadea en Excel.

    Coa nosa Ultimate Suite engadida á túa cinta de Excel, así podes pode recuperar rapidamente o número de calquera cadea alfanumérica:

    1. Vaia á pestana Datos de Ablebits > Texto e fai clic en Extraer :

    2. Seleccione todas as celas coas cadeas de orixe.
    3. No panel da ferramenta Extraer, seleccione o botón de opción Extraer números .
    4. Según se quere que os resultados sexan fórmulas ou valores, seleccione a caixa Inserir como fórmula ou déixaa sen seleccionar (por defecto).

      O meu consello é seleccionar esta caixa se queres que os números extraídos se actualicen automaticamente en canto se fagan cambios nas cadeas de orixe. Se queres que os resultados sexan independentes das cadeas orixinais (por exemplo, no caso de que teñas pensado eliminar os datos de orixe nun momento posterior), non selecciones esta caixa.

    5. Fai clic no botón Inserir resultados . Feito!

    Como no exemplo anterior, os resultados doa extracción son números , o que significa que podes contar, sumar, promediar ou realizar calquera outro cálculo con eles.

    Neste exemplo, optamos por inserir os resultados como valores , e o complemento fixo exactamente o que se lle pediu:

    Se se seleccionou a caixa de verificación Inserir como fórmula , d observe unha fórmula na barra de fórmulas. Ten curiosidade por saber cal? Só ten que descargar a versión de proba de Ultimate Suite e comprobe por si mesmo :)

    Descargas dispoñibles

    Número de extracto de Excel: libro de traballo de exemplo (ficheiro .xlsx)

    Ultimate Suite - versión de proba (.exe ficheiro)

    Michael Brown é un entusiasta da tecnoloxía dedicada á súa paixón por simplificar procesos complexos mediante ferramentas de software. Con máis dunha década de experiencia na industria tecnolóxica, perfeccionou as súas habilidades en Microsoft Excel e Outlook, así como en Follas de cálculo e Documentos de Google. O blog de Michael está dedicado a compartir o seu coñecemento e experiencia con outros, proporcionando consellos e titoriais fáciles de seguir para mellorar a produtividade e a eficiencia. Tanto se es un profesional experimentado como un principiante, o blog de Michael ofrece valiosas ideas e consellos prácticos para sacar o máximo proveito destas ferramentas de software esenciais.