En este ejemplo, seguimos trabajando con el modelo que suelo usar habitualmente, ventas de productos, en diferentes centros comerciales, provincias, y, fechas.
Este modelo no esta en formato de tabla, porque si usamos funciones que devuelven una matriz, nos dará error de desbordamiento.
Vemos que no tenemos la columna de total, pues, vamos a calcular dicho total, con la función BYROW.
Ya sabemos que esta función, aplica una función lambda a cada fila del rango de datos, y, devuelve una matriz.
Entonces, en la celda G2, escribo el signo igual, seguido de la función BYROW, y, abro un paréntesis.
=BYROW(
Seleccionamos desde E2 a F1476, es decir, las columnas de cantidad, y, precio.
=BYROW($E$2:$F$1476;
Punto y coma, ponemos la función LAMBDA, donde declaramos una variable.
=BYROW(DATOS!$E$2:$F$1476;LAMBDA(a;
Entonces, la variable a, contiene los datos de la columna cantidad, y, los datos de la columna precio, como quiero calcular el total, voy a multiplicar con la función PRODUCTO, la variable a.
=BYROW(DATOS!$E$2:$F$1476;LAMBDA(a;PRODUCTO(a)
Cerramos paréntesis de LAMBDA, y, paréntesis de BYROW.
=BYROW(DATOS!$E$2:$F$1476;LAMBDA(a;PRODUCTO(a)))
Aceptamos.
Tenemos una matriz desbordada en vertical con el total de cada fila.
Ahora, en la celda H1, voy a traerme los centros únicos, pero con la función BYROW.
Escribo el signo igual, seguido de la función BYROW, y, abro un paréntesis.
=BYROW(
Selecciono el rango de centros.
=BYROW(C2:C1476;
Punto y coma, ponemos la función LAMBDA, y, abro un paréntesis.
=BYROW(C2:C1476;LAMBDA(
Declaro una variable.
=BYROW(C2:C1476;LAMBDA(a;
Y como argumento calculo, que me devuelva la variable a, es decir, todos los centros, y, cierro paréntesis.
=BYROW(C2:C1476;LAMBDA(a;a))
Obtengo una matriz desbordada en vertical con todos los centros.
Me quedo con los valores únicos.
=UNICOS(BYROW(C2:C1476;LAMBDA(a;a)))
Transpongo, para tenerlos en horizontal.
=TRANSPONER(UNICOS(BYROW(C2:C1476;LAMBDA(a;a))))
En la celda I3, sigo el mismo procedimiento, pero para las provincias, en este caso, también las ordeno.
=ORDENAR(UNICOS(B2:B1476))
Lo siguiente que voy a hacer, es calcular el total para cada centro comercial, lo hare en la celda I2.
Calculo el total, como lo hemos hecho antes.
=BYROW(E2:F1476;LAMBDA(a;PRODUCTO(a)))
Ahora filtro, con la función FILTRAR, la expresión BYROW.
=FILTRAR(BYROW(E2:F1476;LAMBDA(a;PRODUCTO(a)))
Como argumento include, selecciono la columna de centro, y, la igualo al valor de J1, y, cierro paréntesis.
=FILTRAR(BYROW(E2:F1476;LAMBDA(a;PRODUCTO(a)));C2:C1476=J1)
Obtengo una matriz desbordada con el total para cada centro, pero como quiero el total uso la función SUMA después del signo igual.
=SUMA(FILTRAR(BYROW(E2:F1476;LAMBDA(a;PRODUCTO(a)));C2:C1476=J1))
Tenemos el total para el primer centro.
Fijamos E2:F1476, y, C2:C1476.
=SUMA(FILTRAR(BYROW($E$2:$F$1476;LAMBDA(a;PRODUCTO(a)));$C$2:$C$1476=J1))
Seleccionamos la celda I2, pulsamos CTRL mas C, para copiar, seleccionamos desde K2 a O2.
Botón alternativo de ratón, y, seleccionamos pegar formulas.
Ya tenemos el total de cada centro comercial.
Le doy formato de moneda, sin decimales.
Ahora, voy a calcular el total para cada provincia, y, centro comercial.
Con la función BYROW, selecciono las provincias, y, centros.
=BYROW(B2:C1476
Punto y coma, pongo la función LAMBDA, abro un paréntesis, y, declaro una variable.
=BYROW(B2:C1476;LAMBDA(a;
Como argumento calculo, concateno la variable, y, cierro paréntesis.
=BYROW(B2:C1476;LAMBDA(a;CONCAT(a)))
Obtengo una matriz desbordada en vertical con la unión de provincia y centro.
Ahora, uso la función FILTRAR, para filtrar la columna de total, y, como argumento include, es la función BYROW, que debe de ser igual a la unión de la celda I3, y, J1.
=FILTRAR(G2#;BYROW(B2:C1476;LAMBDA(a;CONCAT(a)))=I3&J1)
Obtengo una matriz desbordada con los totales para la primera provincia y centro.
Uso la función SUMA, para obtener el total.
=SUMA(FILTRAR(G2#;BYROW(B2:C1476;LAMBDA(a;CONCAT(a)))=I3&J1))
Fijo la columna de I3, y, la fila de J1, la celda G2, y, el rango B2:B1476.
=SUMA(FILTRAR($G$2#;BYROW($B$2:$C$1476;LAMBDA(a;CONCAT(a)))=$I3&J$1))
Selecciono la expresión, pulso CTRL más C, para copiar, selecciono desde K3 a O22, y, CTRL más V, para pegar.
Ya tenemos el total para cada centro, y, provincia.
Vemos que donde no hay ventas, da un error de cálculo.
Puedo usar la función SI.ERROR, en caso de que devuelva un error, que ponga un texto en blanco.
=SI.ERROR(SUMA(FILTRAR($G$2#;BYROW($B$2:$C$1476;LAMBDA(a;CONCAT(a)))=$I16&M$1));"")
Ya lo tenemos.
Comentarios