Vamos a ver un ejemplo con la función SCAN, esta función nos permite examinar una matriz, y además, con el condicional SI.
En este ejemplo, vamos a crear un acumulado, y, un acumulado por años.
Tenemos los meses, de diferentes años, junto con sus valores, en la imagen siguiente, se muestra solo parte de los valores, tenemos el año 2018, 2019, y, 2020.
El modelo lo tenemos en formato de tabla, y esta tabla, se llama datos.
Estos acumulados lo vamos a hacer de dos formas.
· Con la función SI.
· Con la función SCAN.
Primero lo vamos a hacer con la función SCAN.
El primer acumulado que vamos a calcular va a ser de todos los valores.
Para ello, en una celda ponemos le signo igual, seguido de la función SCAN, y, abrimos un paréntesis.
=SCAN(
El primer argumento es valor inicial, pues ponemos cero.
=SCAN(0
Punto y coma, el siguiente argumento es matriz, pues seleccionamos los valores.
=SCAN(0;Datos[Valores]
Punto y coma, ahora, debemos de poner la función LAMBDA, y, abrimos un paréntesis.
=SCAN(0;Datos[Valores];LAMBDA(
Declaramos dos variables, cualesquiera.
=SCAN(0;Datos[Valores];LAMBDA(a;b
Punto y coma, y, como argumento, calculo, ponemos la suma de ambas variables, es decir, a+b.
=SCAN(0;Datos[Valores];LAMBDA(a;b;a+b))
Aceptamos.
Cuando aceptamos, la variable a, entra valiendo cero, y, la variable b, el primer valor, es decir, 1346, esto, quiere decir que el cálculo de cero más 1346, es 1346.
Para la siguiente cantidad, la variable a, vale 1346, y, la variable b, la siguiente cantidad, la suma de ambas cantidades nos da el acumulado y así con el resto de los valores.
Si sumamos la columna de valores, con la función SUMA, obtenemos:
Que es el mismo resultado, de la última celda, del acumulado.
Con esto, ya tenemos nuestro acumulado.
Ahora, queremos hacer acumulado, pero, por años, es decir, que cuando termine un año, aparezca la cantidad de enero del siguiente año.
Para esto, vamos a tener que usar la función DESREF.
Ya sabemos que con la función DESREF, a partir de una celda inicial, nos podemos mover, un numero de filas, y, de columnas, también, podemos especificar en alto, y, un ancho.
Bien, ponemos el signo igual seguido de la función SCAN, y, abrimos un paréntesis.
=SCAN(
Para el primer argumento, valor inicial, igual que antes, ponemos cero.
=SCAN(0
Punto y coma, como argumento matriz, volvemos a seleccionar los valores.
=SCAN(0;Datos[Valores]
Punto y coma, ponemos la función LAMBDA.
=SCAN(0;Tabla1[Valores];LAMBDA(
Definimos dos variables.
=SCAN(0;Tabla1[Valores];LAMBDA(a;b
Punto y coma, en este punto, debemos de preguntar que si el mes es diferente a 1, o sea, a enero, pero como partimos de la columna de valores, con la función DESREF, debemos de retroceder una columna, en caso, preguntamos que sea diferente a 1, en caso afirmativo, sumamos ambas variables, en caso contrario, multiplicamos cero, por la variable a, y, le sumamos la variable b.
Vamos a dejar, de momento, pausa la función SCAN, y, vamos a ver un ejemplo, con la función DESREF.
El primer valor es 1346, pero, debemos de trabajar con la columna de fechas, bien, si escribo el signo igual, seguido de la función DESREF, donde, como primer argumento, referencia, es decir, punto de partida, pongo la columna de valores, el siguiente argumento, en filas, pero filas, no debemos de movernos, por lo que pasamos al siguiente argumento, para ello, escribimos punto y coma, y, como argumento columna, debemos de especificar, columnas a movernos, si especificamos un valor positivo, nos moveremos hacia la derecha, y, si especificamos un valor negativo, nos moveremos hacia la derecha, que es lo que queremos, pues, en este caso, ponemos -1.
Cerramos paréntesis, y, aceptamos, vemos que tenemos la primera fecha.
=DESREF(Datos[@Valores];;-1)
Pues, la función DESREF, va a ser el argumento prueba lógica del condicional SI, debemos de preguntar si el resultado de la función DESREF, es mayor a 1, es decir, no es igual a enero.
Si, el mes es diferente a 1 (enero), como para la primera celda, no lo es, pues multiplicamos la variable a, que es cero, por cero, más la variable b, que es 1346, por lo que nos devuelve la misma cantidad.
En caso contrario, sumamos ambas variables.
La sintaxis, quedaría:
=SI(MES(DESREF(B2;;-1))<>1;B3+B2;0*B3+B2)
Aceptamos, y, vemos que tenemos el primer valor, porque el número de mes no es diferente a 1, por lo que traduciendo, seria, 2278 por 0, mas 1346, y, obtenemos 1346.
La siguiente cantidad es 2278, que corresponde al mes de febrero, que es la celda B3.
Pregunto, si el mes es diferente a 1, que lo es, entonces toma el valor de la celda B3 (2278), más el valor de la celda B2 (1346), y, los suma, por lo que vamos obteniendo el acumulado.
Así, seria con las demás cantidades.
Pues, retomamos, la función SCAN, por donde lo dejamos.
=SCAN(0;Tabla1[Valores];LAMBDA(a;b
Habíamos creado las variables “a”, y, “b”, dentro de la función LAMBDA.
Pues, el argumento, calculo, de la función LAMBDA, es el condicional SI, junto con la función DESREF, que hemos creado anteriormente, pero, debemos de sustituir las referencias a celdas, por el nombre de las variables.
La expresión, quedaría:
=SCAN(0;Datos[Valores];LAMBDA(a;b;SI(MES(DESREF(b;;-1))<>1;a+b;0*a+b)))
Aceptamos, y, ya tenemos, el acumulado por años.
Si nos fijamos, vemos que cuando termina diciembre del año 2018, se reinicia el acumulado, y, comienza por la cantidad de enero, del año 2019.
Esto ha sido con la función SCAN, ahora, lo vamos a hacer, pero, con el condicional SI.
Igual que antes, vamos a preguntar si el mes es diferente a 1, en caso afirmativo, debe de sumar la cantidad primera con la cantidad anterior, en caso contrario, que ponga el valor de la celda.
Vamos a escribir el signo igual, seguido del condicional SI, y, abrimos un paréntesis.
=SI
Con la función, MES, vamos a preguntar si el mes de la celda A2, es diferente a 1.
=SI(MES(A2)<>1;
Si es diferente a 1, en el argumento valor si verdadero, del condicional SI, indicamos que sume la cantidad anterior, más el valor de la celda en la que estamos.
¿Cómo indicamos la cantidad anterior?
Pues, con la función DESREF, este acumulado lo estamos haciendo en la celda H2, donde tenemos la primera cantidad, la cantidad del mes de enero de 2018, con la función DESREF, le indicamos, que a partir de la celda H2, se mueva una columna, hacia arriba, y, no se mueva ninguna columna.
=SI(MES(A2)<>1;SUMA(B2;DESREF(H2;-1;0));
En caso contrario, que ponga el valor de la celda B2, es decir, no hace ningún acumulado.
=SI(MES(A2)<>1;SUMA(B2;DESREF(H2;-1;0));B2)
Aceptamos, y, tenemos el acumulado por años.
Con esto, damos por terminado, nuestro ejemplo
Comentarios