jueves, 18 de febrero de 2021

Bucles con la función LET

Al hilo de la entrada anterior del blog, sobre cómo convertir un número a letra (ver aquí); me han llegado varios comentarios o peticiones para aclarar el método aplicado...

Ciertamente el método es muy potente y merece la pena verlo y comprenderlo con un ejemplo más sencillo de interpretar ;-)

Podríamos decir que el método o algoritmo aplicado, con una anidación de funciones LET, nos permite, de alguna manera, realizar un bucle por distintos elementos, aplicádoles un proceso o cálculo a cada uno de ellos, para finalmente realizar, si procede, un cálculo final con los resultados obtenidos para cada elemento.

Veamos la siguiente imagen:
Bucles con la función LET

Tenemos tres elementos sobre los que trabajar (celdas A1, A2 y A3), para aplicar a cada uno de ellos una operación (en mi ejemplo elevarlos al cuadrado), y finalmente sumar los resultados parciales de todos ellos.

Sería lo que nos devolvería la función estándar de Excel SUMA.CUADRADOS.

En C1 la fórmula construida es:
=LET(
a;A1;
b;A2;
c;A3;
matriz;ELEGIR({1;2;3};a;b;c);

cálculo;LET(importe;matriz;
importe^2);

calcFinal;INDICE(cálculo;1)+INDICE(cálculo;2)+INDICE(cálculo;3);
calcFinal)

Analicemos qué está ocurriendo...
En los primeros pasos asignamos variables a las distintas celdas sobre las que trabajar...
=LET(
a;A1;
b;A2;
c;A3;
Nada impresionante ;-)

El siguiente paso es fundamental.. ya que construimos una matriz de esas variables!!
Esto se consigue con la función ELEGIR
matriz;ELEGIR({1;2;3};a;b;c);
Hemos asignado a una variable una matriz de nuestros tres elementos previamente definido...
Si en una celda cualquiera escribiáramos: =ELEGIR({1;2;3};A1;A2;A3) obtendríamos la matriz ={2;5;6}

El caso es que con ese 'movimiento' hemos asignado a la variable 'matriz' cada uno de esos tres elementos...

LLegamos a la función LET anidada:
cálculo;LET(importe;matriz;
importe^2);
que aplica elemento a elemento el cálculo indicado (elevar al cuadrado), y vincularlo a una nueva matriz llamada 'cálculo'.
Es decir, la variable 'cálculo' se ha cargado con tres elementos: {4;25;36} (en nuestro ejemplo).
Y como con cualquier matriz, podemos trabajar empleando, por ejemplo, las funciones INDICE, COINCIDIR, etc...

Que será nuestro último paso. Una vez dejado atrás la operación aplicada a cada elemento, procedemos a operar sobre resultados parciales:
calcFinal;INDICE(cálculo;1)+INDICE(cálculo;2)+INDICE(cálculo;3);
calcFinal
En este ejemplo, sumo o acumulo cada resultado parcial, recuperando del vector/matriz anterior 'cálculo' cada elemento (={4;25;36}).

Como apunte final mencionar la importancia de asociar un nombre de variable a la función anidada LET, ya que así podremos posteriormente recuperar sus elementos o componentes.

Una variante de este ejemplo, abierto a un rango cualquiera o incluso de una tabla!! (en lugar de celdas determinadas) podría ser:
=LET(
rng;Tabla1[Datos];
matriz;INDICE(rng;SECUENCIA(CONTARA(rng)));

cálculo;LET(importe;matriz;
importe^2);

calcFinal;SUMA(INDICE(cálculo;SECUENCIA(CONTARA(rng))));
calcFinal)

Fantástico!! :OO

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.