top of page

Total por letras

Debemos de generar la tabla de resultados a partir de la tabla de cadenas.












La cantidad en la tabla de resultados es la suma del número que aparece junto a la letra en la tabla de cadenas.


Ordenar por letras.


Por ejemplo, la letra “A” aparece dos veces, con los valores 8 y 11, entonces en la tabla de resultados debe de aparecer la letra “A” y como cantidad 19, así con el resto de las letras.


En la celda C2, usamos LET, creamos una variable, usamos CONCAT, como argumento texto1, seleccionamos el rango A2:A5, probamos variable.


=LET(xx;CONCAT(A2:A5);xx)


Tenemos todas las cadenas en una sola fila.




Creamos otra variable, usamos EXTRAE, como argumento texto, ponemos la variable “xx”, como argumento posición inicial, usamos SECUENCIA, como argumento filas, usamos la función LARGO, como argumento de LARGO ponemos la variable “xx”, como argumento numero de caracteres, ponemos 1.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);a)


Obtenemos cada carácter de la variable “xx”.


















Vemos que los números quedan alineados a la izquierda, quiere decir que esta en formato de texto, creamos otra variable, y, usamos la funcion ABS.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);b)


Ahora, los números están en formato de número, y, obtenemos error donde no había números.

















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


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESERROR(b);c)


Obtenemos VERDADERO donde es error, y, FALSO donde no lo es.
















Preguntamos si es error, que nos devuelva la variable “a”, en caso contrario, que nos devuelva un error.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;SI(ESERROR(b);a;NOD());c)


Obtenemos cada letra, blanco, y, error.


















Usamos la funcion ENCOL, como argumento matriz es el condicional SI, como argumento ignorar, seleccionamos 3, ignorar blancos y errores.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ENCOL(SI(ESERROR(b);a;NOD());3);c)


Obtenemos las letras.




















Hay letras que tienen un espacio a la izquierda, por seguridad usamos la funcion ESPACIOS.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));c)


Creamos otra variable, filtramos la variable “c”, siempre que dicha variable sea distinto a blanco.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");cc)


Tenemos las letras.



















Creamos otra variable, y, nos traemos los valores únicos de la variable “cc”.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );d)

















Creamos otra variable, abrimos un paréntesis, usamos la funcion CODIGO, como argumento ponemos la variable “a” y comparamos con mayor o igual a 65, cerramos paréntesis, ponemos el símbolo de asterisco, abrimos otro paréntesis, volvemos a usar la funcion CODIGO, y, comparamos con menor o igual a 90, es decir, si es una letra mayúscula.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );e;(CODIGO(a)>=65)*(CODIGO(a)<=90);e)


Obtenemos 1 donde la condición se cumple, y, o donde no se cumple.
















Creamos otra variable, usamos el condicional SI, preguntamos si la variable “e” es igual a 0, en ese caso, que nos devuelva la variable “a”, en caso contrario, que devuelva un guion medio.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");f)


Obtenemos guion medio donde la condición no se cumple, y, el numero donde la condición se cumple.

















Creamos otra variable, usamos UNIRCADENAS, como argumento delimitador ponemos dobles comillas dobles, incluimos celdas vacías, como argumento texto1, es la variable “f”.























Creamos otra variable, usamos la funcion DIVIRTEXTO, como argumento texto, ponemos la variable “g”, ignoramos el argumento delimitador de columna, como argumento delimitador de fila, ponemos un espacio.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc);e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";VERDADERO;f);h;DIVIDIRTEXTO(g;;"-");h)


Tenemos los valores.






















Creamos otra variable, filtramos la variable h, siempre que dicha variable sea diferente a blanco.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc);e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";VERDADERO;f);h;DIVIDIRTEXTO(g;;"-");i;FILTRAR(h;h<>"");i)


Vemos que antes del numero aparece un espacio, pues, usamos la funcion ESPACIOS.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc);e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";VERDADERO;f);h;DIVIDIRTEXTO(g;;"-");i;ESPACIOS(FILTRAR(h;h<>""));i)



















Creamos otra variable, usamos la funcion APILARH, como argumento matriz1, ponemos la variable “cc”, como argumento matriz2, ponemos la variable “i”, de esta manera, tenemos las letras y las cantidades que corresponde con cada letra.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";FALSO;f);h;DIVIDIRTEXTO(g;;"-");i;ABS(ESPACIOS(FILTRAR(h;h<>"")));j;APILARH(cc;i);j)


















Creamos otra variable, usamos la funcion MAP, como argumento array, ponemos la variable “d”, como argumento funcion ponemos LAMBDA, creamos una variable.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";FALSO;f);h;DIVIDIRTEXTO(g;;"-");i;ABS(ESPACIOS(FILTRAR(h;h<>"")));j;APILARH(cc;i);k;MAP(d;LAMBDA(x


Como argumento cálculo de LAMBDA, ponemos la funcion SUMA, como argumento numero1, usamos el condicional SI, como argumento prueba lógica, preguntamos si la variable “x” es igual a la variable “cc”, en ese caso, que nos devuelva la variable “i”.


Con esta funcion, compara cada letra con todas las letras, en caso de haber coincidencia, nos devuelva la o las cantidades, sumándolas.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";FALSO;f);h;DIVIDIRTEXTO(g;;"-");i;ABS(ESPACIOS(FILTRAR(h;h<>"")));j;APILARH(cc;i);k;MAP(d;LAMBDA(x;SUMA(SI(x=cc;i))));k)
















Usamos el argumento calculo de LET, usamos APILARH, como argumento matriz1, ponemos la variable “d”, como argumento matriz2, ponemos la variable “k”.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";FALSO;f);h;DIVIDIRTEXTO(g;;"-");i;ABS(ESPACIOS(FILTRAR(h;h<>"")));j;APILARH(cc;i);k;MAP(d;LAMBDA(x;SUMA(SI(x=cc;i))));APILARH(d;k))


















Antes de APILARH, usamos ORDENAR, como argumento matriz, es la funcion APILARH, como argumento ordenar índice, ponemos 1, es decir, ordenar por la primera columna.


=LET(xx;CONCAT(A2:A5);a;EXTRAE(xx;SECUENCIA(LARGO(xx));1);b;ABS(a);c;ESPACIOS(ENCOL(SI(ESERROR(b);a;NOD());3));cc;FILTRAR(c;c<>"");d;UNICOS(cc );e;(CODIGO(a)>=65)*(CODIGO(a)<=90);f;SI(e=0;a;"-");g;UNIRCADENAS("";FALSO;f);h;DIVIDIRTEXTO(g;;"-");i;ABS(ESPACIOS(FILTRAR(h;h<>"")));j;APILARH(cc;i);k;MAP(d;LAMBDA(x;SUMA(SI(x=cc;i))));ORDENAR(APILARH(d;k);1))


Aceptamos, y, ya lo tenemos.


















Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page