Mayus en minus y al reves
- Jaime Franco Jimenez

- 27 ago 2023
- 3 Min. de lectura
Para el siguiente ejemplo, vamos a trabajar con el modelo que suelo usar habitualmente, pero, algo más corto.

El modelo esta en formato de rango.
Debemos de convertir las letras mayúsculas de la columna centro en minúsculas, y, las letras minúsculas de la columna centro en mayúsculas.
En la celda I2, usamos la función LET, creamos una variable, como valor para la variable, ponemos la función EXTRAE, como argumento texto, seleccionamos el rango C2:C25, como argumento posición inicial, usamos la función SECUENCIA, omitimos el argumento filas, como argumento columnas, vamos a extraer la longitud máxima de la columna centro, para ello, ponemos la función MAX, como argumento de MAX, usamos la función LARGO, como argumento de LARGO, seleccionamos el rango C2:C25, como argumento número de caracteres, ponemos 1.
Probamos variable.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);a)
Obtenemos una matriz desbordada donde en cada columna, tenemos cada carácter de cada centro.

Creamos otra variable, donde usamos la función CODIGO, como argumento texto, ponemos la variable “a”.
Ya sabemos que cada carácter en Excel lleva asociado un código, la letra “a” le corresponde el código 97, a la letra “z”, le corresponde el código 122, a la letra “A”, le corresponde el código 65, y, a la letra “Z”, le corresponde el código 90.

Probamos variable.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);b)
Obtenemos el código de cada carácter de cada columna.

Creamos otra variable, usamos la función MAP, como argumento array es la variable “b”, como argumento función, ponemos LAMBDA, declaramos una variable, que almacena el argumento array.
LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x
Como argumento cálculo de LAMBDA, preguntamos con el condicional SI, donde ponemos el operador lógico Y, como argumento valor logico1, ponemos la variable “x” y comparamos con mayor o igual a 97, como argumento valor logico2, volvemos a poner la variable “x”, y, comparamos con menor o igual a 122, cerramos paréntesis del operador lógico Y.
LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;SI(Y(x>=97;x<=122)
Como argumento valor si verdadero, ponemos la variable “x” y restamos 32, porque la diferencia en código entre una letra mayúscula, y, minúscula es de 32.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32
Como argumento valor si falso, volvemos a preguntar, pero en este caso, preguntamos si la variable “x” es mayor o igual a 65, y, menor o igual a 90, en ese caso, que nos devuelva la variable “x”, y, sumamos 32, cerramos paréntesis, probamos variable.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));c)
Pero, vamos a obtener el carácter de cada código, para ello, usamos la función CARÁCTER antes del condicional SI.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));c)
Prácticamente, ya tenemos el ejercicio resuelto, vemos como las letras que estaban en mayúsculas, ahora, están en minúsculas, las que estaban en minúsculas, ahora, están en mayúsculas, y, error donde no hay coincidencia.

Creamos otra variable, quitamos el error con la función SI.ERROR, y, ponemos un texto en blanco.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));d;SI.ERROR(c;"");d)

Ahora, vamos a usar la función UNIRCADENAS, pero como vamos a trabajar con cada fila, usamos la función BYROW, como argumento array, ponemos la variable “c”.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));d;BYROW(c
Como argumento función, ponemos LAMBDA, creamos una variable.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));d;BYROW(c;LAMBDA(x
Como argumento calculo de LAMBDA, ponemos la función UNIRCADENAS, como argumento delimitador, ponemos dobles comillas dobles, ignoramos celdas vacías, como argumento texto1, es la expresión SI.ERROR(x;""), cerramos paréntesis, probamos variable.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));d;BYROW(c;LAMBDA(x;UNIRCADENAS("";VERDADERO;SI.ERROR(x;""))));d)
Vemos los resultados.

Creamos otra variable, usamos la función SUSTITUIR, como argumento texto, seleccionamos el rango B2:E25, es decir, las columnas provincia, centro, producto y cantidad, como argumento texto original, seleccionamos el rango C2:C25, como argumento texto nuevo, ponemos la variable “d”.
Probamos variable, y obtenemos las columnas provincia, centro, producto y cantidad, pero, con la columna centro sustituida.

Como argumento calculo de LET, usamos la función APILARH, como argumento matriz1, ponemos la función TEXTO, como argumento valor, seleccionamos el rango A2:A25, que son las fechas, como argumento formato, entre comillas dobles, ponemos, “dd/mm/aa”, cerramos paréntesis, si no hacemos esto, al usar APILARH, nos devuelve las fechas en formato general, y, no lo podemos cambiar.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));d;BYROW(c;LAMBDA(x;UNIRCADENAS("";VERDADERO;SI.ERROR(x;""))));e;SUSTITUIR(B2:E25;C2:C25;d);APILARH(TEXTO(A2:A25;"dd/mm/aa")
Como argumento matriz2, ponemos la variable “e”, como argumento matriz3, volvemos a usar la función TEXTO, como argumento valor, seleccionamos el rango F2:G25, que es el precio y total, como argumento formato, entre comillas dobles, ponemos “# €”, cerramos paréntesis.
=LET(a;EXTRAE(C2:C25;SECUENCIA(;MAX(LARGO(C2:C25)));1);b;CODIGO(a);c;MAP(b;LAMBDA(x;CARACTER(SI(Y(x>=97;x<=122);x-32;SI(Y(x>=65;x<=90);x+32;x)))));d;BYROW(c;LAMBDA(x;UNIRCADENAS("";VERDADERO;SI.ERROR(x;""))));e;SUSTITUIR(B2:E25;C2:C25;d);APILARH(TEXTO(A2:A25;"dd/mm/aa");e;TEXTO(F2:G25;"# €")))
Ya tenemos nuestro ejercicio completo, copiamos encabezado y formato.

Miguel Angel Franco




Comentarios