Letras faltantes
- Jaime Franco Jimenez

- 27 dic 2023
- 3 Min. de lectura
Tenemos una serie de cadenas con letras, separadas por comas.
En una nueva columna, debemos de mostrar la o las letras que faltan, por ejemplo, en la celda A2, tenemos “d”, “b”, “a”, si ordenamos las letras serian, “a”, “b”, y, “d”, por lo que falta la letra “c”.
Empecemos…
En la celda B2, usamos LET, creamos una variable, usamos DIVIDIRTEXTO, como argumento texto, seleccionamos la celda A2, omitimos el argumento delimitador de columna, como argumento delimitador de fila, entre comillas dobles, ponemos coma, probamos variable.
=LET(a;DIVIDIRTEXTO(A2;;",");a)
Tenemos cada carácter de la celda A2 en celdas independientes.
Vemos que tenemos espacios de más, pues, delante de DIVIDIRTEXTO, usamos la función ESPACIOS.
=LET(a;ESPACIOS(DIVIDIRTEXTO(A2;;","));a)
Antes de ESPACIOS, usamos ORDENAR.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));a)
Ya tenemos los caracteres ordenados de menor a mayor.
Creamos otra variable, usamos la función CODIGO, como argumento texto, ponemos la variable “a”.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);b)
Tenemos el código al que corresponde cada carácter.
Creamos otra variable, usamos MIN, como argumento ponemos la variable “b”, creamos otra variable, usamos MAX, como argumento ponemos la variable “b”, es decir, es una variable vamos a tener el valor mínimo de los códigos, y, en otra variable el valor máximo de los códigos.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);d)
Creamos otra variable, restamos la variable “d” con la variable “c”, y, sumamos 1.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;e)
Como estamos trabajando con la celda A2, nos devuelve 4.
Creamos otra variable, usamos SECUENCIA, como argumento filas, ponemos la variable “e”, omitimos el argumento columnas, como argumento inicio, ponemos la variable “c”, que es el valor mínimo.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);f)
Obtenemos una matriz desbordada en vertical de cuatro dígitos empezando por el valor mínimo que para este caso es 97.
Creamos otra variable, usamos la función CARÁCTER, y, como argumento ponemos la variable “f”, vamos a obtener el código al que pertenece cada código.
Vamos por otra variable, usamos REDUCE, como valor inicial, ponemos blanco, como argumento array, ponemos la variable “a”, como argumento función ponemos LAMBDA, declaramos dos variables.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;REDUCE("";a;LAMBDA(x;y
Como argumento cálculo de LAMBDA, usamos APILARH, como matriz1, ponemos la variable “x”, como matriz2, ponemos la variable “g” e igualamos a la variable “y”.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));h)
Tenemos una matriz desbordada de cuatro columnas, donde tenemos VERDADERO donde hay coincidencia, y, FALSO donde no la hay.
Vamos a quitar la primera columna que es el argumento valor inicial, para ello, usamos EXCLUIR, como argumento matriz, es la función REDUCE, omitimos el argumento filas, como argumento columnas, ponemos 1.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));;1);h)
Ponemos el doble signo negativo antes de EXCLUIR.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;--(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));;1));h)
Tenemos 1 donde había VERDADERO, y, 0 donde era FALSO.
Antes del doble signo negativo, usamos BYROW, como argumento array, es la función EXCLUIR, como argumento función ponemos LAMBDA, declaramos una variable, y, sumamos dicha variable.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;BYROW(--(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));;1));LAMBDA(x;SUMA(x)));h)
Tenemos una matriz desbordada en vertical de una columna, con la suma de cada columna.
Vamos a preguntar que, si el resultado de BYROW es igual a 0, que nos devuelva la variable “g”, en caso contrario, que devuelva un error.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;SI(BYROW(--(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));;1));LAMBDA(x;SUMA(x)))=0;g;NOD());h)
Nos devuelve, en este caso, la letra faltante, y, error donde era 1.
Usamos ENFILA, como argumento matriz es el condicional SI, como argumento ignorar, seleccionamos 3.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;ENFILA(SI(BYROW(--(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));;1));LAMBDA(x;SUMA(x)))=0;g;NOD());3);h)
Tenemos la letra faltante, pero, habrá veces que haya mas de una letra faltante, por lo que vamos a usar el argumento calculo de LET, usamos UNIRCADENAS, como argumento delimitador, entre comillas dobles, ponemos coma, ignoramos celdas vacías, como argumento texto1, ponemos la variable “h”.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;ENFILA(SI(BYROW(--(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));;1));LAMBDA(x;SUMA(x)))=0;g;NOD());3);UNIRCADENAS(",";VERDADERO;h))
Aceptamos, arrastramos, y, tenemos la o las letras faltantes, pero, donde no hay letras que mostrar, tenemos un error.
Usamos SI.ERROR antes de UNIRCADENAS, como argumento valor es la función UNIRCADENAS, como argumento valor si error, ponemos blanco.
=LET(a;ORDENAR(ESPACIOS(DIVIDIRTEXTO(A2;;",")));b;CODIGO(a);c;MIN(b);d;MAX(b);e;d-c+1;f;SECUENCIA(e;;c);g;CARACTER(f);h;ENFILA(SI(BYROW(--(EXCLUIR(REDUCE("";a;LAMBDA(x;y;APILARH(x;g=y)));;1));LAMBDA(x;SUMA(x)))=0;g;NOD());3);SI.ERROR(UNIRCADENAS(",";VERDADERO;h);""))
Aceptamos, arrastramos, y, ya lo tenemos.
Miguel Angel Franco
















Comentarios