top of page

Separar provincia-centro-producto

Nos han pasado un modelo donde tenemos la provincia, el centro, y, el producto unidos.

Vemos que la provincia, el centro, y, el producto comienzan por una letra mayúscula.


Debemos de separar cada palabra por un guion medio.


En la celda C2, usamos LET, creamos una variable, y, seleccionamos el modelo.


=LET(a;B2:B18;a)


Creamos otra variable, usamos la funcion EXTRAE, como argumento texto, ponemos la variable “a”, como argumento posición inicial, usamos la funcion SECUENCIA, omitimos el argumento filas, como argumento columnas, usamos MAX, como argumento de MAX usamos LARGO como argumento texto, ponemos la variable “a”.


=LET(a;B2:B18;b;EXTRAE(a;SECUENCIA(;MAX(LARGO(a)));1);b)

 

Tenemos una matriz desbordada donde en cada línea, tenemos separado cada carácter.


Creamos otra variable, usamos la funcion CODIGO, como argumento texto, ponemos la variable “b”.


=LET(a;B2:B18;b;EXTRAE(a;SECUENCIA(;MAX(LARGO(a)));1);c;CODIGO(b);c)


Tenemos el código al que pertenece cada carácter, y, error donde no hay caracteres.


Usamos la funcion SI.ERROR, como argumento valor es la funcion CODIGO, como argumento valor si error, ponemos blanco.


=LET(a;B2:B18;b;EXTRAE(a;SECUENCIA(;MAX(LARGO(a)));1);c;SI.ERROR(CODIGO(b);"");c)

 

A la letra A le corresponde el código 65, y, a la letra Z, le corresponde el código 90.


Creamos otra variable, usamos el condicional SI, como argumento prueba lógica, preguntamos si la variable “c” es mayor o igual a 65, como argumento valor si verdadero, preguntamos si la variable “c” es menor o igual a 90, es decir, si es una letra mayúscula, en ese caso, entre comillas dobles, ponemos el guion bajo y concatenamos con la variable “b”, como argumento valor si falso, ponemos la variable “b”.


=LET(a;B2:B18;b;EXTRAE(a;SECUENCIA(;MAX(LARGO(a)));1);c;SI.ERROR(CODIGO(b);"");d;SI(c>=65;SI(c<=90;"-"&b;b));d)


Vemos que donde es una letra mayúscula, aparece junto con un guion medio.


Al numero 0 le corresponde el código 48, y, al numero 9 le corresponde el código 57.


Creamos otra variable, vamos a controlar los números, volvemos a usar el condicional SI, como argumento prueba lógica, preguntamos si la variable “c” es mayor o igual a 48, como argumento valor si verdadero, preguntamos si la variable “c” es menor o igual a 57, en ese caso, que nos devuelva la variable “b”, en caso contrario, (valor si falso), que devuelva la variable “d”.


=LET(a;B2:B18;b;EXTRAE(a;SECUENCIA(;MAX(LARGO(a)));1);c;SI.ERROR(CODIGO(b);"");d;SI(c>=65;SI(c<=90;"-"&b;b));e;SI(c>=48;SI(c<=57;b;d));e)


Creamos otra variable, usamos la funcion BYROW, como argumento array, ponemos la variable “e”, como argumento funcion, ponemos LAMBDA, creamos una variable, usamos la funcion UNIRCADENAS, como argumento delimitador, ponemos dobles comillas dobles, ignoramos celdas vacías, como argumento texto1, ponemos la variable “x”.


=LET(a;B2:B18;b;EXTRAE(a;SECUENCIA(;MAX(LARGO(a)));1);c;SI.ERROR(CODIGO(b);"");d;SI(c>=65;SI(c<=90;"-"&b;b));e;SI(c>=48;SI(c<=57;b;d));f;BYROW(e;LAMBDA(x;UNIRCADENAS("";VERDADERO;x)));f)


Ya lo tenemos.

Pero, el primer guion medio sobra, usamos el argumento calculo de LET, usamos la funcion DERECHA, como argumento texto, ponemos la variable “f”, como argumento numero de caracteres, usamos la funcion LARGO, como argumento ponemos la variable “f”, y, restamos 1.


=LET(a;B2:B18;b;EXTRAE(a;SECUENCIA(;MAX(LARGO(a)));1);c;SI.ERROR(CODIGO(b);"");d;SI(c>=65;SI(c<=90;"-"&b;b));e;SI(c>=48;SI(c<=57;b;d));f;BYROW(e;LAMBDA(x;UNIRCADENAS("";VERDADERO;x)));DERECHA(f;LARGO(f)-1))

 

Ahora si lo tenemos.



Miguel Angel Franco Garcia

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page