La función LAMBDA se utiliza para crear funciones personalizadas y reutilizables y llamarlas con un nombre descriptivo. Esta nueva función está disponible en todo el libro y se denomina funciones nativas de Excel.
Podemos crear una función para una fórmula de uso frecuente, eliminar la necesidad de copiar y pegar dicha fórmula (que puede ser propensa a errores) y agregar de forma eficaz nuestras propias funciones a la biblioteca de funciones nativa de Excel. Además, una función LAMBDA no requiere VBA, macros ni JavaScript, por lo que los usuarios que no son programadores también pueden beneficiarse de su uso.
Sintaxis
= LAMBDA ([parámetro1; parámetro2;...;] cálculo)
· Parámetro, argumento opcional, es un valor que deseamos pasar a la función, como puede ser una referencia de celda, una cadena o un número. Podemos introducir hasta 253 parámetros.
· Cálculo, argumento obligatorio, es la fórmula que deseamos ejecutar y devolver como resultado de la función. Siempre debe ser el último argumento y debe devolver un resultado.
Si escribimos más de 253 parámetros, Excel nos devolverá un error #VALUE!.
Los nombres de lambda y los parámetros siguen las reglas de sintaxis de Excel para los nombres, con una excepción: no podemos usar un punto (.) en un nombre de parámetro.
Cuando escribimos una función LAMBDA, podemos en la ayuda inteligente, podemos ver que podemos introducir un parámetro o un cálculo, es la sintaxis para cada argumento.
¿Como podemos crear una función LAMBDA?
Debemos de asegurarnos de que el argumento cálculo está funcionando correctamente. Esto es vital para crear una función LAMBDA.
Una buena práctica es crear y probar la función LAMBDA en una celda para asegurarse de que funciona correctamente, para evitar error de cálculo #CALC.
Por ejemplo, en el siguiente modelo de datos:
Vamos a calcular el total, es decir, cantidad por precio, para ello, en la celda C2, escribimos la siguiente formula:
=A2*B2
Aceptamos, y, tenemos el total.
Arrastramos, y, tenemos el total para cada cantidad y precio.
Bien, ahora, vamos a crear una función LAMBDA con estos parámetros.
El primer argumento de la función LAMBDA es parámetro o calculo, vamos a usar el argumento parámetro, que lo vamos a llamar cantidad, pero debemos de crear un segundo argumento para pasar el precio, ponemos punto y coma, usamos el argumento parámetro, que lo vamos a llamar precio, quedando de la siguiente manera:
Lo siguiente va a ser poner el argumento calculo, que va a ser la multiplicación de los parámetros cantidad por precio, cerramos paréntesis.
Lo ultimo es pasar los valores para cantidad y precio, para ello, al final de la función, abrimos un parentisis, y, ponemos el valor para el primer argumento, ponemos punto y coma, y el valor para el segundo parámetro, cerramos paréntesis.
Aceptamos, arrastramos, y, vemos que el resultado es el mismo que el que hemos calculado manualmente.
Ahora, vamos a dar nombre a esta función LAMBDA, para ello, seleccionamos la formula, excepto los últimos argumentos.
Pulsamos CTRL-C para copiar.
Vamos a la pestaña formulas, dentro del grupo nombres definidos, hacemos clic en administrador de nombres.
Se abre la ventana administrador de nombres, hacemos clic en Nuevo.
Se abre la ventana nombre nuevo, en la ventana nombre, ponemos un nombre, y, en la ventana se refiere a; pegamos la formula.
Aceptamos.
Ahora, en la celda E2, escribimos el signo igual, el nombre que acabamos de crear, a continuación, abrimos un parentisis, y, pasamos los argumentos, y, cerramos paréntesis.
=Total(A2;B2)
Aceptamos, arrastramos, y, ya tenemos el resultado.
Con esto hemos construido una función LAMBDA.
Ahora, veamos otro ejemplo, en este caso, vamos a calcular diferentes tipos de IVA para unas cantidades.
Tenemos los siguientes datos.
Si queremos calcular el 21 por ciento de IVA, debemos de multiplicar la cantidad por 21%, quedando de la siguiente manera:
=A2*21%
Aceptamos, arrastramos, y, ya tenemos el IVA para cada cantidad.
Bien, ahora lo haremos con la función LAMBDA, sabemos que el primer argumento, y, que es opcional, es parametro1, en este caso, lo llamaremos IVA, quedando de la siguiente manera:
=LAMBDA(iva
Punto y coma, seguido, en este caso, del cálculo, donde multiplicamos IVA por el valor de la celda A2.
=LAMBDA(iva;A2*iva
Cerramos paréntesis.
Ahora, debemos de pasarle el valor al parámetro IVA, por lo que al final de la formula, abrimos un paréntesis, y, ponemos 21%, y, cerramos paréntesis.
=LAMBDA(iva;A2*iva)(21%)
Aceptamos, arrastramos, y, vemos que tenemos los mismos resultados.
Ahora, vamos a asignarle un nombre, primero fijamos la celda la columna de A2.
=LAMBDA(iva;$A2*iva)(21%)
Seleccionamos la formula, excepto los últimos paréntesis, pulsamos CTRL-C para copiar, vamos a la pestaña formulas, dentro de nombres definidos, hacemos clic en asignar nombre.
Se abre la ventana nombre nuevo, en la ventana nombre, ponemos IVA, y, en la ventana se refiere a;, pegamos la formula, y, aceptamos.
En la celda D2, ponemos el nombre de rango iva, abrimos un paréntesis, ponemos 21%, cerramos paréntesis.
=iva(21%)
Aceptamos, arrastramos, y, vemos que tenemos los mismos resultados.
Lo siguiente que vamos a realizar, es poder aplicar diferentes porcentajes, para ello, en la celda F2, vamos a poner un porcentaje.
Modificamos la formula, y, cambiamos el 21% dentro de los paréntesis, por la referencia F2.
=iva(F2)
Fijamos F2.
Aceptamos, arrastramos, y, de momento nada ha cambiado.
Si cambiamos el porcentaje en la celda F2, vemos como se recalcula.
Vamos a ver un ejemplo de la función BUSCARX, para este ejemplo, la vamos a usar para conseguir los totales por productos, pero tenemos el inconveniente de que algunos productos no están bien escritos, porque están separados por un espacio, después, haremos lo mismo, pero con la función LAMBDA, y, veremos las diferencias entre ambos procesos.
Tenemos un modelo donde tenemos la venta de productos en diferentes centros comerciales, y, diferentes provincias en diferentes fechas.
Bien, así que tenemos escritos algunos productos, como aspiradora, donde vemos que la palabra está separada por un espacio.
Esto pasa con otros productos, pero no con todos, pero este ejemplo, así como el siguiente lo vamos a realizar con los productos corregidos.
Tenemos dos listas, una con los productos bien escritos, y, otra lista con los productos mal escritos.
En la celda I2, vamos a crear una nueva columna con los productos escritos correctamente, y, a partir de esta columna, obtener los totales para cada producto.
Esta corrección, la vamos a hacer con la función BUSCARX.
La función BUSCARX, cuenta con varios argumentos, pero para este ejemplo, solo vamos a usar los tres primeros argumentos, que es valor buscado, matriz de búsqueda, y, matriz devuelta.
Pues en la celda I2, escribimos el signo igual, ponemos la función, abrimos un paréntesis, punto y coma, el primer argumento de BUSCARX es valor buscado, donde ponemos el valor de la celda E2.
=BUSCARX(E2
Como valor buscado seleccionamos el rango O2:O6, que son los productos mal escritos.
=BUSCARX(E2;O2:O6
Punto y coma, y como ultimo argumento que vamos a usar, es matriz devuelta, es decir, de donde nos debe de devolver si hay coincidencia, pues en este caso seleccionamos el rango N2:N6, cerramos paréntesis.
=BUSCARX(E2;O2:O6;N2:N6)
Fijamos las siguientes referencias:
=BUSCARX(E2;$O$2:$O$6;$N$2:$N$6)
Aceptamos, arrastramos, y, vemos que los productos mal escritos, ahora aparecen correctamente.
Pero ¿Qué ocurre con los nombres que estaban bien escritos?, pues que nos aparece un error.
Esto lo podemos resolver con la función SI.ERROR, que ya sabemos que tiene dos argumentos, que es la expresión para evaluar (valor), y, lo que debe de aparecer si la expresión devuelve un error (valor si error).
En este caso, la expresión a evaluar es la función anterior, y, en caso de que nos devuelva un error, le vamos a decir que nos devuelva la celda E2, esto quiere decir que, si devuelve un error, nos va a devolver el producto bien escrito.
=SI.ERROR(BUSCARX(E2;$O$2:$O$6;$N$2:$N$6);E2)
Aceptamos, arrastramos, y, vemos como ya no aparece el error, sino el nombre del producto.
Ahora, lo que queremos, es calcular los totales para cada producto.
Para ello, vamos a hacer uso de la función SUMAR.SI, porque solo tenemos un criterio.
Lo vamos a hacer a partir de la celda P2.
Escribimos el signo igual, ponemos el nombre de la función, y, abrimos un paréntesis.
=SUMAR.SI(
El primer argumento es rango, donde vamos a buscar, pues seleccionamos los productos bien escritos.
=SUMAR.SI(I2:I26
Punto y coma, el siguiente argumento es criterio, pues seleccionamos la matriz donde tenemos los productos bien escritos.
=SUMAR.SI(I2:I26;N2:N6
Punto y coma, y, como ultimo argumento, es el rango para sumar, que es la columna de total, cerramos paréntesis, y, aceptamos.
=SUMAR.SI(I2:I26;N2:N6;Total)
Vemos como tenemos el total para cada producto de forma automática.
Es lo que se conoce como matriz desbordada, que veremos en el siguiente modulo, una matriz desbordada es aquella función que devuelve mas de un valor.
Ahora, vamos a hacer lo mismo, pero con la función LAMBDA, donde vamos a decidir si es mejor para este caso el uso de una función LAMBDA.
Sabemos que los argumentos de esta función es parámetro o calculo, si usamos el argumento parámetro debemos de declarar una variable, para usarla después, y, el argumento calculo, es el uso de una función donde vamos a hacer uso de estas variables creadas anteriormente.
Bien, empezamos escribiendo el signo igual, seguido del nombre de la función LAMBDA, abrimos un paréntesis, punto y coma, lo siguiente que vamos a hacer es declarar tres variables, que vamos a usar dentro de la función BUSCARX, una para cada argumento.
=LAMBDA(a;b;c
Punto y coma, ahora, como argumento calculo, vamos a hacer uso de la función BUSCARX.
=LAMBDA(a;b;c;BUSCARX(
Como primer argumento de BUSCARX, es valor buscado, pues usamos la variable A, como matriz a buscar, usamos la variable B, y como argumento matriz devuelta, usamos la variable C, y, cerramos paréntesis.
=LAMBDA(a;b;c;BUSCARX(a;b;c)
Las variables A, B, y, C, aun no tiene valores definidos.
Pues, es lo que vamos a hacer ahora, abrimos un paréntesis, y, pasamos los valores para cada variable, la variable A, va a valer los productos, la variable B, son los productos mal escritos, ,y la variable C, son los productos bien escritos.
=LAMBDA(a;b;c;BUSCARX(a;b;c))(E2;$O$2:$O$6;$N$2:$N$6)
Aceptamos, arrastramos, y, ya tenemos los productos bien escritos, pero con el mismo problema que en el ejemplo anterior, que donde los productos no están mal escritos, recibimos un error, pues vamos a hacer uso de la función SI.ERROR, para solventarlo, como lo hicimos anteriormente.
=LAMBDA(a;b;c;SI.ERROR(BUSCARX(a;b;c);E2))(E2;$O$2:$O$6;$N$2:$N$6)
Ahora, tenemos la misma matriz obtenida que en el ejemplo anterior.
Pero, vamos a ver la sintaxis del primer ejemplo, y, la comparamos con la de este ejemplo.
La sintaxis del primer ejemplo es:
=SI.ERROR(BUSCARX(E2:E26;M:M;L:L);E2:E26)
Donde no hemos usado ningún tipo de variable, ni hemos tenido que pasar valores a dichas variables.
La sintaxis de la función LAMBDA, pues, vemos que es un poco más larga, la única diferencia, es que hemos tenido que declarar una serie de variables, y, después asignarle valores.
=LAMBDA(a;b;c;SI.ERROR(BUSCARX(a;b;c);Producto))(Producto;M2:M6;L2:L6)
Lo siguiente que vamos a hacer es crear una función personalizada, a partir de la función LAMBDA.
Fijamos la columna de la celda E2, en caso contrario, se actualizará a la celda donde usemos dicho nombre de rango.
=LAMBDA(a;b;c;SI.ERROR(BUSCARX(a;b;c);$E2))
Seleccionamos la primera celda donde hemos puesta la función LAMBDA, excepto, los últimos paréntesis, y, copiamos la función desde el signo igual hasta el cierre del segundo paréntesis.
Pulsamos CTRL más C, para copiar.
Vamos a la pestaña de fórmulas, dentro del grupo nombres definidos, hacemos clic en asignar nombre, en la ventana que se abre, le ponemos un nombre, y, en se refiere a, pegamos la formula, y, aceptamos.
En la celda K2, ponemos el signo igual, el nombre de rango con_lambda, abrimos un paréntesis, ponemos E2, punto y coma P2:P6, que son los productos mal escritos, punto y coma, ponemos le rango O2:O6, los productos bien escritos, y, fijamos.
Cerramos paréntesis.
=con_lambda(E2;$P$2:$P$6;$O$2:$O$6)
Aceptamos, arrastramos, y, vemos que tenemos los mismos resultados.
Por último, vamos a volver a calcular los totales para cada producto con LAMBDA.
En la celda R2 de la hoja ejemplo3_resuelto, escribimos el signo igual, ponemos el nombre de la función, abrimos un paréntesis, creamos tres variables.
=LAMBDA(a;b;c
Punto y coma, ponemos la función SUMAR.SI.
=LAMBDA(a;b;c;SUMAR.SI(
Como argumentos de la función SUMAR.SI, ponemos las tres variables que hemos creado y cerramos paréntesis.
=LAMBDA(a;b;c;SUMAR.SI(a;b;c))
Abrimos paréntesis, y, pasamos los valores para las variables, que es rango de búsqueda, criterio, y, rango de suma, cerramos paréntesis y cerramos.
=LAMBDA(a;b;c;SUMAR.SI(a;b;c))(I2:I26;O2:O6;Total)
Aceptamos, y, vemos los totales igual que antes.
Ahora, vamos a crear la función personalizada.
Para ello, seleccionamos desde el signo igual hasta el segundo paréntesis de cierre.
Pulsamos CTRL más C para copiar.
Vamos a la pestaña formulas, dentro del grupo nombres definidos, hacemos clic en asignar nombre, en la ventana que se abre, le damos un nombre, y, en se refiere a, pegamos la formula y aceptamos.
Si cambiamos la expresión anterior por el nombre de rango, vemos que tenemos los mismos resultados.
=Total_con_LAMBDA(I2:I26;O2:O6;Total)
Veamos otro ejemplo, tenemos el siguiente valor, son nombres separados por coma.
Queremos saber cuantas palabras, o, nombres tenemos en la celda A1, vamos a realizar los pasos en celdas independientes, y, finalmente, crearemos la función LAMBDA.
En la celda A3, vamos a calcular la longitud del valor de la celda A1, para ello, usamos la función LARGO.
=LARGO(A1)
Nos devuelve una longitud de 28 caracteres.
En la celda A4, vamos a sustituir la coma por nada, para ello, vamos a usar la función SUSTITUIR, donde como argumento texto, seleccionamos la celda A1.
=SUSTITUIR(A1
Punto y coma, como argumento texto original, entre comillas dobles, ponemos coma, punto y coma, como argumento texto nuevo, ponemos dobles comillas dobles, es decir, nada.
Cerramos paréntesis.
=SUSTITUIR(A1;",";"")
Después del signo igual volvemos a usar la función LARGO.
=LARGO(SUSTITUIR(A1;",";""))
Tenemos una longitud de 25 caracteres.
Pues, ya tenemos las dos funciones a usar en la función LAMBDA, pues, en la celda B1, ponemos LAMBDA, declaramos una variable, que la vamos a llamar texto.
=LAMBDA(texto
Punto y coma, vamos a usar el argumento calculo, donde usamos LARGO, y, como argumento, ponemos la variable texto.
=LAMBDA(texto;LARGO(texto)
Ponemos el signo menos, ponemos LARGO, como argumento ponemos SUSTITUIR, como argumento texto, ponemos la variable texto, punto y coma, como argumento texto antiguo, entre comillas dobles, ponemos coma, punto y coma, como argumento texto nuevo, ponemos dobles comillas dobles, cerramos paréntesis de SUSTITUIR, de LARGO, y, de LAMBDA.
=LAMBDA(texto;LARGO(texto)-LARGO(SUSTITUIR(texto;",";"")))
Abrimos un paréntesis, seleccionamos la celda A1, y, cerramos paréntesis, es decir, ya hemos pasado el valor de la variable texto.
=LAMBDA(texto;LARGO(texto)-LARGO(SUSTITUIR(texto;",";"")))(A1)
Aceptamos, y, nos devuelve 3, que son las comas que hay, si hay tres comas, quiere decir que hay cuatro nombres, por lo que a la expresión anterior, sumamos 1.
=LAMBDA(texto;LARGO(texto)-LARGO(SUSTITUIR(texto;",";"")))(A1)+1
Ya tenemos la cantidad de nombres que tenemos.
Si añadimos o quitamos nombres, este resultado se actualizará.
Seleccionamos la función, excepto los últimos paréntesis y +1, pulsamos CTRL más C para copiar, volvemos a crear un nombre personalizado, como lo hemos hecho anteriormente.
Aceptamos.
En la celda B2, ponemos el nombre que hemos creado, abrimos un paréntesis, seleccionamos la celda A1, cerramos paréntesis, y, sumamos 1.
=textos(A1)+1
Tenemos el mismo resultado.
Que ventaja tiene usar una función LAMBDA, por ejemplo, pulsemos CTRL mas U para abrir un libro nuevo.
En la celda A1, ponemos las siguientes provincias.
Vamos a usar el nombre personalizado que hemos creado en el libro llamado LAMBDA, lo haremos en la celda D2, ponemos el signo igual, el nombre del libro con su extensión, donde se encuentra el nombre personalizado a usar, ponemos signo de exclamación, si tecleamos las iniciales del nombre personalizado, vemos que no aparece, cosa que es cierto, porque dicho nombre personalizado no se encuentra en este libro, por lo que lo escribimos completo, y, sumamos 1.
=LAMBDA.xlsx!textos(A1)+1
Vemos que nos devuelve la cantidad de palabras de la celda A1.
Cerremos el libro llamado LAMBDA.
Vemos que nos sigue devolviendo el valor correcto, pero si nos fijamos en la barra de fórmulas, vemos que la sintaxis, ahora, es mucho mas larga, es porque ahora aparece la ruta donde el archivo es guardado.
Si volvemos a abrir el libro, aparecerá la sintaxis anterior.
Pero, que ocurre si como delimitador, tenemos una coma, y, un espacio.
Ahora, la longitud de A1 es de 31 caracteres, y, la longitud de la función SUSTITUIR es de 28 caracteres, si restamos ambas cantidades, nos sigue devolviendo 3, igual que antes, y, si sumamos 1, pues, tenemos 4 palabras, por lo que no ocurre nada, porque al añadir tres espacios, hemos aumentado la longitud, pero también se aumenta la longitud de la función SUSTITUIR en tres, por lo que la resta nos sigue devolviendo el mismo resultado.
Ahora, tengo abierto el modelo CONTOSO, que consta de varias hojas, todas las hojas están en formato de tabla, la primera hoja, llamada Ventas, contiene todos los datos de cada transacción, vamos a buscar el primero IDtienda de la hoja Ventas, queremos que nos devuelva el nombre al que pertenece dicho ID, tenemos otra hoja llamada tienda, donde tenemos todos los datos de cada tienda.
Pues, nos vale el nombre personalizado llamado con_lambda, que creamos en el ejercicio anterior, en una celda, ponemos el nombre del libro junto con su extensión, ponemos signo de exclamación, el nombre personalizado, abrimos un paréntesis, el primer valor es para la variable “a”, pues seleccionamos la celda A2 de la hoja Ventas.
=LAMBDA.xlsx!con_lambda(TVentas[@IDTienda]
Punto y coma, el siguiente valor es para la variable “b”, vamos a la hoja Tienda, y, seleccionamos la columna IDTienda.
=LAMBDA.xlsx!con_lambda(TVentas[@IDTienda];Tienda[IDTienda]
Punto y coma, el siguiente valor es para la variable “c”, desde la hoja tienda, seleccionamos la columna Tienda.
Cerramos paréntesis.
=LAMBDA.xlsx!con_lambda(TVentas[@IDTienda];Tienda[IDTienda];Tienda[Tienda])
Aceptamos, y, hemos recuperado el nombre de tienda que pertenece al primer IDTienda de la hoja Ventas.
Podemos ver que podemos secar bastante utilidad a la función LAMBDA.
Miguel Angel Franco
Comments