top of page

La función REDUCE

Esta función reduce una matriz a un valor acumulado.


Sintaxis

=REDUCE ([valor inicial], cadena, lambda (acumulador, valor))


· [valor inicial] Establece el valor inicial del acumulador.

· cadena La matriz que se va a reducir.

· lambda Función LAMBDA a la que se llama para reducir la matriz. La función LAMBDA toma dos parámetros:

· acumulador Valor devuelto como resultado final.

· valor Cálculo aplicado a cada elemento de la matriz.



Veamos un ejemplo.


Tenemos los siguientes datos:





Vamos a escribir la función REDUCE, abrimos paréntesis, como argumento, valor inicial, ponemos punto y coma, es decir, ningún valor, quiere decir que el argumento valor inicial va a ser la primera celda de la matriz.


=REDUCE (;


Como argumento, cadena, seleccionamos la matriz.


=REDUCE (; A1:D2


A continuación, escribimos la función LAMBDA, donde creamos dos variables, que es el argumento, acumulador.


LAMBDA (matriz1; matriz2;


Y como argumento, valor, sumamos ambos matrices.


=REDUCE (; A1:D2; LAMBDA (matriz1; matriz2; matriz1+matriz2))


Aceptamos, y tenemos la suma de todo el rango.







Bien, pero que valor tiene la variable matriz1, vamos a modificar la formula, y, dejamos solo la variable matriz1.


=REDUCE(;$B$3:$E$4;LAMBDA(matriz1;matriz2;matriz1))


Vemos que nos devuelve el primer valor del rango.








Ahora, cambiamos a matriz2.


Vemos que nos devuelve el ultimo valor, es decir, la última celda del rango.









Por lo que la formula inicial, nos devuelve la suma desde el valor de la primera celda hasta la última celda.


Es como si pusiéramos la función SUMA.


=SUMA (A1:D2)


Ambas nos devuelven el mismo resultado.


Que ocurre, si en el argumento, valor inicial, ponemos 1.


=REDUCE(1;$B$3:$E$4;LAMBDA(matriz1;matriz2;matriz1+matriz2))


Si aceptamos, veremos que el resultado es uno más, es decir, 361.








Y si lo ponemos en cero, igual que si no ponemos nada, es decir, no se le suma nada.

En otras palabras, debemos de especificar donde comenzar, y, donde acabar.


Veamos otro ejemplo, en este caso, vamos a comprobar si el valor de la última celda es impar, en ese caso, que muestre inválido, en caso contrario, que muestre la variable b.


En el argumento, valor, de la función LAMBDA, usamos el condicional SI junto con la función ES.IMPAR, esta función, nos devuelve VERDADERO, si el valor es impar, y, FALSO, si no lo es, pues, preguntamos que, si el valor de la variable a, es impar, pues que ponga el texto, invalido, en caso, contrario que nos de la suma de ambas variables.


=REDUCE(;B3:E4;LAMBDA(a;b;SI(ES.IMPAR(b);"Invalido";b)))


Veamos otro ejemplo, trabajamos con el modelo que suelo usar habitualmente.













Queremos calcular el total para la provincia de Sevilla.


En una celda, ponemos REDUCE, como argumento valor inicial, ponemos cero.


=REDUCE(0


Punto y coma, como argumento array, o, cadena, seleccionamos la columna de total.


=REDUCE(0;Ventas[Total]


Punto y coma, como argumento función, ponemos LAMBDA, y, declaramos dos variables.


=REDUCE(0;Ventas[Total];LAMBDA(a;b


Punto y coma, como argumento cálculo de LAMBDA, con el condicional SI, preguntamos si la columna provincia es igual a Sevilla, en ese caso, que sume ambas variables, en caso contrario, que ponga un texto en blanco.


Cerramos paréntesis.


=REDUCE(0;Ventas[Total];LAMBDA(a;b;SI(Ventas[Provincia]="Sevilla";a+b;"")))


Aceptamos, y, tenemos una matriz desbordada, donde es Sevilla, aparece el total.





















Nos quedamos con los valores únicos.


=UNICOS(REDUCE(0;Ventas[Total];LAMBDA(a;b;SI(Ventas[Provincia]="Sevilla";a+b;""))))


Concatenamos, ya sabemos que la función CONCAT omite las celdas en blanco.


=CONCAT(UNICOS(REDUCE(0;Ventas[Total];LAMBDA(a;b;SI(Ventas[Provincia]="Sevilla";a+b;"")))))


Pero, la función CONCAT nos devuelve el valor en formato de texto, y, lo queremos en formato de número, por lo que después del signo igual, usamos la función VALOR.


=VALOR(CONCAT(UNICOS(REDUCE(0;Ventas[Total];LAMBDA(a;b;SI(Ventas[Provincia]="Sevilla";a+b;""))))))


Lo ponemos en formato de moneda, y, tenemos el total para la provincia de Sevilla.






Tenemos una serie de nombres, donde por error, se han insertado números.












Debemos de crear un informe con los nombres excluyendo los números.


Para resolver este ejemplo, vamos a usar la funcion REDUCE, veamos algunos ejemplos simples.


Tenemos los siguientes valores.










Primero vamos a usar la funcion SCAN, como argumento valor inicial, ponemos un blanco, como argumento array, seleccionamos los valores.


=SCAN("";A3:A6


Como argumento funcion, ponemos LAMBDA, creamos dos variables.


=SCAN("";A3:A6;LAMBDA(a;b


Como argumento calculo de LAMBDA, concatenamos la variable “a” con un espacio, y, con la variable “b”.


=SCAN("";A3:A6;LAMBDA(a;b;a&" "&b))


Como resultado tenemos:









Veamos de donde salen estos valores.


Cuando ejecutamos la expresión, la variable “a”, vale un texto en blanco, y, la variable “b”, vale el primer valor que es esto.






Nos devuelve un espacio, y, la palabra esto.









Ahora, el argumento valor inicial, valor un espacio y la palabra esto.


La variable “b”, vale ahora es, entonces, concatenamos un blanco, y, la palabra esto con la palabra es.






Obtenemos:









Ahora, el argumento valor inicial, vale esto es, y, la variable “b”, vale una.





Al concatenar obtenemos:









Ahora, valor inicial vale esto es una, y, la variable “b”, vale prueba.





Al concatenar, tenemos la frase completa:








Si cambiamos SCAN por REDUCE, obtenemos el ultimo valor.


=REDUCE("";A2:A5;LAMBDA(a;b;a&" "&b))






Esos pasos que SCAN ha ejecutado los ha realizado internamente la funcion REDUCE.


Seguimos con el ejemplo anterior.


Tenemos una columna con los números a excluir.


















En la celda A8, ponemos la funcion REDUCE, como argumento valor inicial, seleccionamos el rango A2:A5, como argumento array, seleccionamos los números a excluir.


=REDUCE(A2:A5;D2#


Como argumento funcion, ponemos LAMBDA, y, creamos dos variables.


Como argumento calculo de LAMBDA, usamos la función SUSTITUIR, como argumento texto, ponemos la variable “a”, como argumento texto original, ponemos la variable “b”, y, como argumento texto nuevo, ponemos un blanco.


En resumen, va a buscar un numero de la variable “b” en cada nombre, y, si encuentra alguno, lo sustituye por nada.


=REDUCE(A2:A5;D2#;LAMBDA(a;b;SUSTITUIR(a;b;"")))


Aceptamos, y, ya lo tenemos.












Veamos un ejemplo algo más complicado.


Tenemos las siguientes frases:




















En otra columna, tenemos las ciudades que debemos de buscar.










Anteriormente, hemos visto un ejemplo, donde extraíamos la provincia de una frase, ahora debemos de realizar lo mismo en una sola funcion.


Debemos de recorrer cada fila de la columna descripción y comparar con cada ciudad.


Si usamos la funcion HALLAR donde como argumento texto buscado, seleccionamos la columna ciudades, y, como argumento dentro del texto, seleccionamos la columna descripción.


=HALLAR(Ciudades5[Ciudades];Descripcion4[Description])


Obtenemos la posición de la primera letra de la primera ciudad que ha encontrado.


















Quiere decir que con la funcion HALLAR, tal como la hemos puesto, no podemos usarla para comparar con cada ciudad, por lo que vamos a hacer uso de la funcion REDUCE.


En la celda F3, ponemos la funcion REDUCE, como argumento valor inicial, ponemos un blanco, como argumento array, seleccionamos la columna de ciudades.


=REDUCE("";Ciudades[Ciudades]


Como argumento funcion, ponemos LAMBDA, y, creamos dos variables.


=REDUCE("";Ciudades[Ciudades];LAMBDA(a;b


Como argumento calculo, usamos la funcion HALLAR anterior.


Ya sabemos que la funcion REDUCE nos va a devolver el ultimo valor, por lo que obtenemos una matriz desbordada en vertical con la posición de la primera letra de Seattle, y, error donde no hay coincidencia.



















Usamos la funcion ESNUMERO.


=REDUCE("";Ciudades[Ciudades];LAMBDA(a;b;ESNUMERO(HALLAR(b;Descripcion[Descripcion]))))


Obtenemos VERDADERO donde hay coincidencia, y, FALSO donde no la hay.

















Usamos el condicional SI, como argumento prueba lógica, preguntamos si el resultado de HALLAR es igual a VERDADERO, en ese caso, que nos devuelva la variable “b”, en caso contrario, que devuelva la variable “a”.


=REDUCE("";Ciudades[Ciudades];LAMBDA(a;b;SI(ESNUMERO(HALLAR(b;Descripcion[Descripcion]));b;a)))


Ya lo tenemos.

















Pero, vamos a desarrollar la expresión para ver de dónde salen estos resultados.


Bien, cuando ejecutamos la expresión, valor inicial vale blanco, y, el argumento array, vale la última ciudad.


=REDUCE("";D8;LAMBDA(a;b;SI(ESNUMERO(HALLAR(b;Descripcion[Descripcion]));b;a)))


Obtenemos una matriz desbordada con blanco donde no hay coincidencia, y, la ciudad de Seattle donde hay coincidencia.




















Ahora valor inicial, es esta expresión, y, el argumento array es la ciudad de San Francisco.


=REDUCE(I3#;D7;LAMBDA(a;b;SI(ESNUMERO(HALLAR(b;Descripcion[Descripcion]));b;a)))


Obtenemos otra matriz desbordada donde vemos que donde no hay coincidencia, aparece blanco y Seattle, y, donde hay coincidencia, la ciudad de San Francisco.






















Esta expresión es ahora el argumento valor inicial, y, como argumento array es la siguiente provincia que es Sacramento.


=REDUCE(J3#;D6;LAMBDA(a;b;SI(ESNUMERO(HALLAR(b;Descripcion[Descripcion]));b;a)))


Si no hay coincidencia, tenemos las ciudades de Seattle, de San Francisco y blanco, y, donde hay coincidencia, aparece la provincia de Sacramento.

















Así con el resto de las ciudades.



Miguel Angel Franco

 
 
 

Comments


© 2019 Miguel Ángel Franco García

bottom of page