Promedio por mes dentro de múltiples rangos de fechas personalizados

2

Tengo datos por mes desde enero de 2013 -> octubre de 2017 como tal

MONTH   MY DATA
Jan-13  45.0
Feb-13  23.0
.   
.   
.   
Oct-17  98.4

Deseo promediar datos por mes calendario, para rangos de fechas específicos y no contiguos. Por ejemplo, enero de 2013 -> marzo de 2013 y octubre de 2016 -> mayo de 2017.

Creo que esto se puede lograr mediante el uso de funciones IF con OR, para abarcar múltiples rangos de fechas, y AND, para abarcar dos fechas dentro de cada rango, para devolver una matriz (cuando se ingresa como una fórmula de matriz) y luego usar averageif en la matriz devuelta.

Con mis datos en B5: C62 y mis rangos de fechas a medida configurados como:

Period 1 Start: S2
Period 1 End: T2
Period 2 Start: S3
Period 2 End: T3

Y mis meses calendario en P6: P17, ingreso mi fórmula como

=AVERAGEIF($B$5:$B$62,P6,IF(OR(AND($B$5:$B$62>=$S$2,$B$5:$B$62<=$T$2),
AND($B$5:$B$62<=$S$3,$B$5:$B$62>=$T$3)),$C$5:$C$62,"ERROR"))

¡Obtengo un #VALOR! error, aunque no puedo ver por qué. Por lo que puedo decir, mi cláusula IF debería devolver el "rango_medio" para que se ejecute la fórmula AVERAGEIF.

¿Cuál es el error en mi fórmula o mi enfoque?

ramas
fuente

Respuestas:

2

En su fórmula, la porción IF () no devolverá una matriz cuando haya un AND () como parte de la prueba lógica. Puede verificar esto utilizando la herramienta de depuración integrada para las fórmulas de Excel: resalte una parte de la fórmula en la barra de fórmulas y presione F9 .

Pero hay una manera de calcular el promedio que desea. En Excel, la multiplicación de los valores lógicos convierte los valores Verdadero / Falso en 1 y 0, que luego se pueden manipular más. Como ejemplo, esta declaración

=(A2:A25>=D2)*(A2:A25<=E2)+(A2:A25>=D3)*(A2:A25<=E3)

devuelve la matriz

{0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0}

de los datos en la tabla a continuación. Aquí la multiplicación actúa como un AND lógico y la suma es casi como un OR lógico. (@ Máté Juhász puede sonar aquí para explicar por qué no es un OR :-)

Esta matriz se puede ver como una "máscara" de la columna A con 1 correspondiente a los dos rangos de fechas especificados por las fechas de inicio y finalización.

Ahora una fórmula IF () puede usar esta matriz para generar la lista de valores que desea promediar:

IF(((A2:A25>=D2)*(A2:A25<=E2)+(A2:A25>=D3)*(A2:A25<=E3)),B2:B25)

Esto le da a la matriz

{FALSE;FALSE;FALSE;42.9;82.3;90.5;15.6;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;70.8;85.5;19.2;85.4;21.3;55.7;FALSE;FALSE}

que ahora se puede alimentar a PROMEDIO ().

Entonces, una solución a su problema es una fórmula similar a esta fórmula (matriz), en D6:

=AVERAGE(IF(((A2:A25>=D2)*(A2:A25<=E2)+(A2:A25>=D3)*(A2:A25<=E3)),B2:B25))

Cambie los rangos y los valores de fecha a medida para adaptarse a su situación.

ingrese la descripción de la imagen aquí

La celda debajo de "Verificar" solo contiene un cálculo manual del promedio usando

=AVERAGE(B5:B8,B18:B23)

Espero que esto ayude y buena suerte.

Bandersnatch
fuente