domingo, 14 de junio de 2020

EXCEL: Contar días de la semana entre fechas

Excel formula: Count day of week between dates

Fórmula genérica

=SUMAPRODUCTO(--(DIASEM(FILA(INDIRECTO(start&":"&end)))=dow))

Explicación

Para contar los días de la semana (lunes, viernes, domingos, etc.) entre dos fechas, puede usar una fórmula de matriz que use varias funciones: SUMAPRODUCTO, DIASEM, FILA e INDIRECTO. En el ejemplo que se muestra, la fórmula en la celda E6 es
=SUMAPRODUCTO(--(DIASEM(FILA(INDIRECTO(B6&":"&C6)))=D6))
En la versión genérica de la fórmula, inicio = fecha de inicio, fin = fecha de finalización y dow = día de la semana.

Cómo funciona esta fórmula

En esencia, esta fórmula usa la función DIASEM para probar varias fechas para ver si aterrizan en un día de la semana (dow) y la función SUMAPRODUCTO para contar el total.
Cuando se le da una fecha, DIASEM simplemente devuelve un número entre 1 y 7 que corresponde a un día particular de la semana. Con la configuración predeterminada, 1 = domingo y 7 = sábado. Entonces, 2 = lunes, 6 = viernes, y así sucesivamente.
El truco de esta fórmula es comprender que las fechas en Excel son solo números de serie que comienzan el 1 de enero de 1900. Por ejemplo, el 1 de enero de 2016 es el número de serie 42370 y el 8 de enero es 42377. Las fechas en Excel solo parecen fechas cuando Se aplica un formato de número de fecha.
Entonces, la pregunta es: ¿cómo puede construir una serie de fechas que pueda alimentar a la función DIASEM para averiguar los días correspondientes de la semana?
La respuesta es usar FILA con funciones INDIRECTO así:
FILA(INDIRECTO(date1&":"&date2))
INDIRECTO permite que las fechas concatenadas "42370: 42377" se interpreten como números de fila. Entonces la función FILA devuelve una matriz como esta:
{42370;42371;42372;42373;42374;42375;42376;42377}
La función DIASEM evalúa estos números como fechas y devuelve esta matriz:
{6;7;1;2;3;4;5;6}
que se prueba contra el día de la semana dado (6 en este caso, de D6). Una vez que los resultados de la prueba se convierten en 1s y 0s con el guión doble, SUMAPRODUCTO procesa esta matriz:
{1;0;0;0;0;0;0;1}
Que devuelve 2.

Con SECUENCIA

Con la nueva función SECUENCIA, esta fórmula se puede simplificar de la siguiente manera:
=SUMAPRODUCTO(--(DIASEM(SECUENCIA(end-start+1,1,start,1))=dow))
En esta versión, usamos SECUENCIA para generar la matriz de fechas directamente, sin necesidad de INDIRECTO o FILA.

Comentarios en Facebook


0 comentarios:

Copyright © 2021 TRUJILLOSOFT