La función LET lleva un tiempo entre nosotros gracias a Excel 365, y fue pensada para facilitar la vida en las formulas que requieren de calcular el mismo valor una y otra vez, y el día de hoy, vamos a ver unos ejemplos de cómo lo logra.
Nomenclatura de la función LET.
La nomenclatura puede parecer un poco confusa, ya que sus parámetros son variables dependiendo el número de variables a usar:
LET(nombre1, valor_nombre1, calculo_o_nombre2, [valor_nombre2, calculo_o_nombreN…)
Donde:
- Nombre: hará referencia al nombre de la variable que almacena la información.
- Valor_nombre: Es el valor inicial de la variable, algo que es muy común en lenguajes de programación. Ese valor puede ser de cualquier tipo de dato, y puede ser generada como constante o con el cálculo de una fórmula.
- Calculo: Es la fórmula o función que se aplicara con la variable. Este siempre tiene que ser el valor final de la función.
Básicamente, esta función sirve para almacenar valores en una variable, lo que permite no tener que volver a calcularlos si los necesitamos en un futuro.
Ejemplo 1: Reusando un rango para diferentes cálculos.
Imaginemos que en la siguiente tabla, quiero realizar una función PROMEDIO.SI.CONJUNTO para conocer el promedio de la población estimada de una ciudad.
Los parámetros que tengo para realizar la función son:
Valor Filtro | Columna |
---|---|
5467 | City Key |
1/1/2013 | Valid From |
1/1/2015 | Valid From |
La función queda de la siguiente manera:
=AVERAGEIFS(DataBase_costumers.xlsx!Dimension_City[Latest Recorded Population],DataBase_costumers.xlsx!Dimension_City[WWI City ID],$C$3,DataBase_costumers.xlsx!Dimension_City[Valid From],iDate,DataBase_costumers.xlsx!Dimension_City[Valid From],eDate)
Como podemos ver, la frase DataBase_costumers.xlsx!Dimension_City[Valid From] se repite dos veces, y hace que la función sea complicada de leer.
Si usamos la función LET para guardar toda la columna DataBase_costumers.xlsx!Dimension_City[Valid From] obtenemos el siguiente resultado.
=LET(dates,DataBase_costumers.xlsx!Dimension_City[Valid From],AVERAGEIFS(DataBase_costumers.xlsx!Dimension_City[Latest Recorded Population],DataBase_costumers.xlsx!Dimension_City[WWI City ID],$C$3,dates,iDate,dates,eDate))
Donde la variable dates almacena toda la información de la columna Valid From, y la recicla para obtener un resultado visualmente mas corto.
Ejemplo 2. Guardando una búsqueda para revisar una condición.
Ahora, en la siguiente tabla quiero realizar una función SI para revisar si el año de la columna VALID FROM de cada una de las ciudades es menor o igual a 2013. De ser así, quiero realizar de nuevo la búsqueda; en caso contrario quiero recibir un valor nulo.
La función para calcular eso queda así:
=IF(YEAR(XLOOKUP(B4,DataBase_costumers.xlsx!Dimension_City[WWI City ID],DataBase_costumers.xlsx!Dimension_City[Valid From]))<=2013,YEAR(XLOOKUP(B4,DataBase_costumers.xlsx!Dimension_City[WWI City ID],DataBase_costumers.xlsx!Dimension_City[Valid From])),0)
Como se ve, en la función me veo obligado a usar dos veces BuscarX para conseguir el valor del año, situación que requiere usar el doble de memoria para crear la función.
Si uso en su lugar la función LET para guardar la búsqueda y luego compararla, puedo crear algo más funcional. Se vería de esta forma:
=LET(yr,YEAR(XLOOKUP([@[WWI City ID]],DataBase_costumers.xlsx!Dimension_City[WWI City ID],DataBase_costumers.xlsx!Dimension_City[Valid From])),IF(yr<=2013,yr,0))
Nota como el tamaño de la función se reduce drásticamente, además de que solo realizamos una búsqueda. Esto nos permite crear mejores análisis con menos memoria.
Ejemplo 3. Evaluando valores aleatorios.
Por ultimo, esto es algo que me preguntó alguien en YouTube.
Requiero calcular en una sola celda si un valor aleatorio es igual a 6, y de ser así, escribir un valor nulo; en caso contrario, requiero obtener el valor aleatorio.
=IF(RANDBETWEEN(1,6)=6,"",RANDBETWEEN(1,6))
Esta formula en particular tiene un gran problema, y es que el primer valor aleatorio tiene 1 a 6 de no ser igual que el segundo. Esto simplemente se debe a que cada función trabaja de manera separada.
Esto es una situación que LET puede resolver sin mayor problema.
=LET(x,RANDBETWEEN(1,6),IF(x=6,"",x))
Como la variable x almacena el valor aleatorio, no hay necesidad de calcularlo dos veces. Y el cálculo se hará en una sola celda. Misión cumplida.
Me parece que la función LET es una herramienta maravillosa como se puede ver en los ejemplos, pero que no fue explotada adecuadamente por Office y Excel.
Cualquier duda nos leemos abajo.