Escribir números de forma expandida
- Jaime Franco Jimenez

- 4 ago 2023
- 3 Min. de lectura
Veamos otro ejemplo, tenemos el siguiente modelo:

Nos solicitan que escribamos los números en forma expandida.
Por ejemplo:
· 783 = 700+80+3
· 31045 = 30000+1000+40+5
Empecemos…
Igual que para otros ejemplos, volvemos a usar LET, donde vamos a ir creando variables, y, almacenando los pasos.
En la celda H2, ponemos LET, creamos una variable, para dicha variable, extraemos cada carácter de la celda G2, para ello, usamos EXTRAE, como argumento texto, es la celda G2, como argumento posición inicial, usamos SECUENCIA, como argumento columnas, usamos LARGO, y, como argumento es la celda G2, omitimos el resto de los argumentos, como argumento número de caracteres, ponemos 1, cerramos paréntesis, probamos la variable.
=LET(a;EXTRAE(G7;SECUENCIA(LARGO(G7));1);a)
Obtenemos cada carácter del valor de la celda G2 en horizontal.
En este caso, como tenemos el numero 8, pues, solo nos devuelve el valor 8, pero vamos a trabajar con el valor de la celda G7.

Pero, vamos a trabajar con los números en horizontal, para ello, en argumento filas de la función SECUENCIA, lo ponemos en el argumento columnas, y, omitimos el argumento filas.
=LET(a;EXTRAE(G7;SECUENCIA(;LARGO(G7));1);a)

Creamos otra variable, usamos SECUENCIA, omitimos el argumento filas, como argumento columnas, es la función LARGO, y, como argumento de LARGO es la celda G7, como argumento inicio, vuelve a ser la función LARGO, y, como argumento paso, como vamos a empezar desde el último número, ponemos -1.
Probamos la variable.
=LET(a;EXTRAE(G7;SECUENCIA(;LARGO(G7));1);b;SECUENCIA(;LARGO(G7);LARGO(G7);-1);b)
Obtenemos una secuencia de números en horizontal, empezando desde el último número al número 1.

Creamos otra variable, donde ponemos la variable “a”, concatenamos con la función REPETIR, como argumento texto, ponemos 0, como argumento número de veces, ponemos la variable b.
Probamos la variable.
=LET(a;EXTRAE(G7;SECUENCIA(;LARGO(G7));1);b;SECUENCIA(;LARGO(G7);LARGO(G7);-1);c;a&REPETIR(0;b);c)
Tenemos una matriz desbordada en horizontal con los ceros que debe de llevar cada digito.

Pero, vemos que aparece un cero de más, por lo que a la función SECUENCIA, le restamos 1.
=LET(a;EXTRAE(G7;SECUENCIA(;LARGO(G7));1);b;SECUENCIA(;LARGO(G7);LARGO(G7);-1)-1;c;a&REPETIR(0;b);c)

El número que tenemos en la celda G7 es 255.036, que corresponde a los valores obtenidos una vez expandidos.
Solo nos queda unir las cadenas, para ello, usamos el argumento cálculo de LET, vamos a usar la función UNIRCADENAS, como argumento delimitador, entre comillas dobles, ponemos el símbolo de “+”, ignoramos celdas vacías, como argumento texto1, es la variable “c”.
=LET(a;EXTRAE(G7;SECUENCIA(;LARGO(G7));1);b;SECUENCIA(;LARGO(G7);LARGO(G7);-1)-1;c;a&REPETIR(0;b);UNIRCADENAS("+";VERDADERO;c))

Ahora, cambiamos la celda G7 por la celda G2.
=LET(a;EXTRAE(G2;SECUENCIA(;LARGO(G2));1);b;SECUENCIA(;LARGO(G2);LARGO(G2);-1)-1;c;a&REPETIR(0;b);UNIRCADENAS("+";VERDADERO;c))
Aceptamos, y, arrastramos.

¿Qué problema vemos?
Por ejemplo, en la cantidad 370, tenemos 300+70+0, pues, cuando hay cero, o, ceros no deben de aparecer, pero hay que respetar la posición de cada carácter, para este ejemplo, no debe de aparecer los ceros, debe de aparecer 300+70, no, 300+70+0.
Para resolver el problema, vamos al argumento texto1 de UNIRCADENAS, antes de la variable “c”, ponemos el condicional SI, preguntamos que si empezando por la izquierda de la variable “c”, es igual a cero, pero, entre paréntesis, porque está en formato de texto, en ese caso, que ponga un texto en blanco, en caso contrario, que devuelva la variable “c”.
=LET(a;EXTRAE(G2;SECUENCIA(;LARGO(G2));1);b;SECUENCIA(;LARGO(G2);LARGO(G2);-1)-1;c;a&REPETIR(0;b);UNIRCADENAS("+";VERDADERO;SI(IZQUIERDA(c )="0";"";c)))
Aceptamos, arrastramos, y, vemos que el problema ha sido corregido, respetando la posición de cada digito.

Ahora, nos comunican que, por error, en la última cifra por la derecha, han puesto 3, donde debía de ser 0.

Debemos de cambiar dicho 3 por cero, y, volver a realizar el ejercicio.
Lo haremos en la hoja ejemplo2, en la celda H2.
Usamos la función IZQUIERDA, como argumento texto, es el rango A2:A9, como argumento numero de caracteres, es la longitud del rango A2:A9, y, restamos 1, para no traernos le ultimo carácter por la derecha.
=IZQUIERDA(G2:G9;LARGO(G2:G9)-1)
Tenemos una matriz desbordada en vertical con todos los caracteres por la izquierda de cada cadena menos 1.
Como en la celda H2, solo tenemos un digito, nos devuelve blanco.

Vamos a realizar el calculo a concatenar con la expresión anterior, en una celda aparte.
Con la función DERECHA, nos traemos el ultimo carácter por la derecha del rango G2:G9.
=DERECHA(G2:G9)

Usamos la función SUSTITUIR, como argumento texto es la expresión anterior, como argumento texto antiguo, ponemos 3, como texto nuevo, ponemos 0.
=SUSTITUIR(DERECHA(G2:G9);3;0)
Obtenemos una matriz desbordada, donde vemos que donde era 3 ha sido sustituido por 0.

Pues, copiamos la expresión, vamos a la primera expresión, ponemos el símbolo de concatenar (&), pegamos la expresión.
=IZQUIERDA(G2:G9;LARGO(G2:G9)-1)&SUSTITUIR(DERECHA(G2:G9);3;0)
Ya tenemos los números correctos.

Copiamos la expresión de la celda H2 de la hoja ejemplo1, excepto, el signo igual, en la celda I2 de la hoja ejemplo2, ponemos el signo igual, y, pegamos la expresión, cambiamos G2 por H2.
=LET(a;EXTRAE(H2;SECUENCIA(;LARGO(H2));1);b;SECUENCIA(;LARGO(H2);LARGO(H2);-1)-1;c;a&REPETIR(0;b);UNIRCADENAS("+";VERDADERO;SI(IZQUIERDA(c )="0";"";c)))
Arrastramos, y, ya lo tenemos.

Si queremos poner el punto de miles, vamos al argumento valor si falso del condicional SI, delante de la variable “c”, ponemos la función TEXTO, como argumento valor, es la variable “c”, como argumento formato, entre comillas dobles, ponemos #.##.
=LET(a;EXTRAE(H2;SECUENCIA(;LARGO(H2));1);b;SECUENCIA(;LARGO(H2);LARGO(H2);-1)-1;c;a&REPETIR(0;b);UNIRCADENAS("+";VERDADERO;SI(IZQUIERDA(c )="0";"";TEXTO(c;"#.##"))))
Aceptamos, arrastramos, y, ya lo tenemos.

Ahora, nos dicen que solo quieren ver la conversión de aquellas cadenas cuya longitud sea 3 o más.
Vamos a la expresión de la variable “c”, usamos el condicional SI, preguntamos que si la longitud de la celda A2, es mayor a 2, que ejecute la operación, en caso contrario que ponga un texto en blanco.
=LET(a;EXTRAE(H2;SECUENCIA(;LARGO(H2));1);b;SECUENCIA(;LARGO(H2);LARGO(H2);-1)-1;c;SI(LARGO(G2)>2;a&REPETIR(0;b);"");UNIRCADENAS("+";VERDADERO;SI(IZQUIERDA(c )="0";"";TEXTO(c;"#.##"))))
Aceptamos, y, arrastramos.

Miguel Angel Franco




Comentarios