top of page

Total por medallas

Tenemos una serie de equipos, cada equipo tiene un numero de medallas de oro, plata, y, bronce.


Oro, Plata y Bronce tienen un peso de 4, 2 y 1 respectivamente.


Debemos de encontrar los dos países que ganan más número de medallas y los dos países con menos medallas.


Empecemos…


En una celda, usamos LET, creamos una variable, y, seleccionamos el rango B2:D10.


=LET(a;B2:D10;a)

 

Tenemos el modelo como una matriz desbordada.


Creamos otra variable, usamos la función APILARH, como argumento matriz1 vamos a tomar la primera columna de la variable “a”, que corresponde a oro, y, multiplicamos por 4, para ello, usamos la funcion TOMAR, como argumento matriz, ponemos la variable “a”, omitimos el argumento filas, como argumento columnas, ponemos 1, cerramos paréntesis, y, multiplicamos por 4.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4


Como argumento matriz2, vamos a tomarla segunda columna, y, vamos a multiplicar por 2, para ello, vamos a usar la funcion ELEGIRCOLS, como argumento matriz, ponemos la variable “a”, como argumento numero de columna1, ponemos 2, y, multiplicamos por 2.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2


Como argumento matriz3, vamos a tomar la ultima columna, pero no multiplicamos por nada, ya que debemos de multiplicar por 1, para ello, usamos la funcion TOMAR, como argumento matriz, ponemos la variable “a”, omitimos el argumento filas, como argumento columnas, ponemos -1.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));b)

 

Tenemos una matriz desbordada de tres columnas con el total por columna, es decir, el total para cada país y medallas.


Ahora, debemos de sumar cada fila de forma independiente, para ello, creamos otra variable, usamos la funcion BYROW, como argumento array, ponemos la variable “b”, como argumento funcion, ponemos LAMBDA, declaraos una variable, como argumento calculo de LAMBDA, sumamos la variable “x”.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));c)

 

Tenemos la suma de cada fila.


Creamos otra variable, usamos la funcion APILARV, como argumento matriz1, ponemos el valor 1, como argumento matriz2, ponemos el valor 2, como argumento matriz3, usamos la funcion CONTAR, como argumento ponemos la variable “c”, y, restamos 1, como argumento matriz4, volvemos a usar la funcion CONTAR, y, como argumento ponemos la variable “c”.


Con esta expresión, vamos a obtener una matriz desbordada en vertical de cuatro números, donde los dos primeros números son los valores mayores para extraer, y, los dos últimos valores, son los valores mayores para extraer, que equivale a los dos primeros valores menores.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));d)


Ahora de la siguiente matriz devuelta por la variable “c”.


Creamos otra variable, usamos la funcion K.ESIMO.MAYOR, como argumento matriz, ponemos la variable “c”, como argumento K, ponemos la variable “d”.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;K.ESIMO.MAYOR(c;d);e)


Ya tenemos los dos valores mayores, y, los dos valores menores.


Usamos la funcion ENFILA, para obtener los valores en horizontal.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(K.ESIMO.MAYOR(c;d));e)


Lo siguiente es rescatar el país al que pertenece cada valor, creamos otra variable, usamos la funcion REDUCE, como argumento valor inicial, ponemos blanco, como argumento array, ponemos la variable “e”, como argumento funcion, ponemos LAMBDA, y, declaramos dos variables.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;REDUCE("";e;LAMBDA(x;y


Como argumento calculo de LAMBDA, usamos la funcion APILARH, como argumento matriz1, ponemos la variable “x”, como argumento matriz2, usamos la funcion FILTRAR, como argumento array, seleccionamos el rango A2:A10, o, creamos una variable con el rango A2:A10, como argumento Include, ponemos la variable “c” e igualamos a la variable “y”.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;REDUCE("";e;LAMBDA(x;y;APILARH(x;FILTRAR(A2:A10;c=y))));f)

 

Tenemos una matriz desbordada de cuatro columnas, donde tenemos los países donde hay coincidencia, y, error donde no hay coincidencia.


La primera columna está de más, antes de REDUCE, usamos la funcion EXCLUIR, como argumento matriz, es la funcion REDUCE, omitimos el argumento filas, como argumento columnas, ponemos 1.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;EXCLUIR(REDUCE("";e;LAMBDA(x;y;APILARH(x;FILTRAR(A2:A10;c=y))));;1);f)

Creamos otra variable, y, transponemos la variable “f”.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;EXCLUIR(REDUCE("";e;LAMBDA(x;y;APILARH(x;FILTRAR(A2:A10;c=y))));;1);g;TRANSPONER(f);g)


Vamos a tomar la primera columna de la variable “g”, para ello, creamos una variable, usamos la funcion TOMAR, como argumento matriz ponemos la variable “g”, como argumento filas, ponemos -1, como argumento columnas, ponemos 1, vamos a obtener el último país de la primera columna que es Brasil.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;EXCLUIR(REDUCE("";e;LAMBDA(x;y;APILARH(x;FILTRAR(A2:A10;c=y))));;1);g;TRANSPONER(f);h;TOMAR(g;-1;1);h)


Creamos otra variable, usamos la funcion SI.ERROR, como argumento valor, ponemos la variable “g”, como argumento valor si error, ponemos la variable “h”, vamos a conseguir que donde hay un error, aparezca el país de Brasil.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;EXCLUIR(REDUCE("";e;LAMBDA(x;y;APILARH(x;FILTRAR(A2:A10;c=y))));;1);g;TRANSPONER(f);h;TOMAR(g;;1);i;SI.ERROR(g;h);i)


Vamos a quitar la última fila que está de más, para ello, antes de SI.ERROR, usamos la funcion EXCLUIR, como argumento matriz, es la funcion SI.ERROR, como argumento filas, ponemos -1, omitimos el argumento columnas.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;EXCLUIR(REDUCE("";e;LAMBDA(x;y;APILARH(x;FILTRAR(A2:A10;c=y))));;1);g;TRANSPONER(f);h;TOMAR(g;;1);i;REDUCE(SI.ERROR(g;h);-1);i)


Usamos el argumento calculo de LET, ponemos la funcion BYROW, como argumento array, ponemos la variable “i”, como argumento funcion, ponemos LAMBDA, declaramos una variable, usamos la funcion UNIRCADENAS, como argumento delimitador, entre comillas dobles, ponemos coma, y, dejamos un espacio, ignoramos el argumento ignorar vacías, como argumento texto1, ponemos la variable “x”.


Cerramos paréntesis.


=LET(a;B2:D10;b;APILARH(TOMAR(a;;1)*4;ELEGIRCOLS(a;2)*2;TOMAR(a;;-1));c;BYROW(b;LAMBDA(x;SUMA(x)));d;APILARV(1;2;CONTAR(c)-1;CONTAR(c));e;ENFILA(UNICOS(K.ESIMO.MAYOR(c;d)));f;EXCLUIR(REDUCE("";e;LAMBDA(x;y;APILARH(x;FILTRAR(A2:A10;c=y))));;1);g;TRANSPONER(f);h;TOMAR(g;-1;1);i;EXCLUIR(SI.ERROR(g;h);-1);BYROW(i;LAMBDA(x;UNIRCADENAS(", ";x))))

 

Aceptamos, y, ya lo tenemos.




Miguel Angel Franco

 
 
 

Comentarios


© 2019 Miguel Ángel Franco García

bottom of page