Para el siguiente ejemplo, tenemos un texto, donde hay letras y numero, las letras pueden estar en mayúsculas o minúsculas, y, queremos extraer los números de dichos textos.
Debemos tener en cuenta que esos números están en formato de texto, una vez extraídos, debemos de ponerlo en formato de número.
Voy a trabajar con los números del 1 al 10, en un modelo aparte, tengo los números del 1 al 10, y, el código ASCII que le corresponde a cada número.
Cada carácter, numero, o, símbolo le corresponde un número, este número es el código ASCII, para obtener el código que le corresponde a un carácter, usamos la función CODIGO, y, nos devuelve su código.
Tengo que extraer cada carácter de cada texto, empecemos con el primer texto, en la celda B2, voy a usar la función LARGO, para que me devuelva la longitud de la cadena.
=LARGO(A2)
Devuelve 8 caracteres.
Voy a usar la función SECUENCIA, donde como argumento filas, es la función LARGO, solo voy a usar el argumento filas.
=SECUENCIA(LARGO(A2))
Obtengo una matriz desbordada empezando desde el numero 1 hasta el 8.
Ahora, voy a usar la función EXTRAE, para extraer cada carácter, como argumento texto, seleccionamos la celda A2.
=EXTRAE(A2;
Como argumento posición inicial, es la función SECUENCIA, quiere decir que va a empezar a extraer a partir de cada valor de la función SECUENCIA.
=EXTRAE(A2;SECUENCIA(LARGO(A2))
Como argumento número de caracteres, ponemos 1.
Cerramos paréntesis, y, aceptamos.
=EXTRAE(A2;SECUENCIA(LARGO(A2));1)
Vemos que ha sido extraído cada carácter de la cadena, en formato de texto.
Como tenemos los códigos ASCII del numero 1 al numero 10, tenemos que preguntar si alguno de los caracteres obtenidos es mayor o igual a 49, y, menor o igual a 58, para ello, debemos de usar el operador lógico Y, que nos devolverá VERDADERO si ambas condiciones se cumplen, el problema es que el operador lógico Y, no lo podemos usar de forma matricial, para poder usarlo, debemos de usar otra función, que es la función BYROW.
Después del signo igual, ponemos la función BYROW, y, abrimos un paréntesis, como argumento array, es la expresión anterior.
=BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1)
Punto y coma, como argumento función, ponemos LAMBDA, y, abrimos un paréntesis.
=BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(
Definimos una variable, dicha variable, almacena la función BYROW.
=BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a
Punto y coma, como argumento calculo, usamos el condicional SI, a continuación, ponemos el operador lógico Y, y abrimos un paréntesis.
=BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(
Preguntamos si la variable “a” junto con la función CODIGO, es mayor o igual a 49, y menor o igual a 58.
Cerramos paréntesis del operador lógico Y.
=BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(CODIGO(a)>=49;CODIGO(a)<=58)
Punto y coma, como argumento valor si verdadero, que nos devuelva la variable “a”, pero con la función CODIGO, en caso contrario, que nos devuelva un texto en blanco.
Cerramos paréntesis y aceptamos.
=BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(CODIGO(a)>=49;CODIGO(a)<=58);a;"")))
Tenemos una matriz desbordada con blanco donde no hay coincidencia, y, el numero en formato de texto, donde hay coincidencia.
Vamos a quitar los blancos, para ello, voy a usar la función FILTRAR, donde como argumento array es la expresión anterior, y, como argumento Include, sigue siendo la expresión anterior, siempre que sea distinto a blanco.
=FILTRAR(BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(CODIGO(a)>=49;CODIGO(a)<=58);a;"")));BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(CODIGO(a)>=49;CODIGO(a)<=58);a;"")))<>"")
Como usamos dos veces, la función BYROW, voy a usar la función LET, y, almaceno dicha expresión.
=LET(a;BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(CODIGO(a)>=49;CODIGO(a)<=58);a;"")));FILTRAR(a;a<>""))
Transponemos.
=TRANSPONER(LET(a;BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(CODIGO(a)>=49;CODIGO(a)<=58);a;"")));FILTRAR(a;a<>"")))
Ahora, usamos la función VALOR, para pasar a formato numérico.
=VALOR(TRANSPONER(LET(a;BYROW(EXTRAE(A2;SECUENCIA(LARGO(A2));1);LAMBDA(a;SI(Y(CODIGO(a)>=49;CODIGO(a)<=58);a;"")));FILTRAR(a;a<>""))))
Arrastramos y ya lo tenemos.
Comments