2012-06-01 15 views
8

En Excel 2007 tengo un número de año y un número de semana y quiero calcular el número del mes.calcule el mes del año y el número de semana en excel

El problema es que en mi caso el comienzo de cada semana es un lunes, por lo que algunas semanas se superpondrán con los años.

Ejemplos:

Year: 2012 
Week 1 started: Monday 2nd January 
Sunday 1st January was in week 52 of 2011 

Así dan el siguiente:

Year: 2011 
Week: 10 

¿Cómo puedo trabajar esa semana 10 se inició el 7 de marzo y por lo tanto la semana 10 fue el número de Mes 3.

Gracias por cualquier ayuda sobre esto.

Respuesta

4

I sugieren el siguiente enfoque

  • determinar la (ISO) semana de 1 de enero (ver this page) [en la celda C4]

    =INT((B4-DATE(YEAR(B4-WEEKDAY(B4-1)+4),1,3)+WEEKDAY(DATE(YEAR(B4-WEEKDAY(B4-1)+4),1,3))+5)/7) (B4 suponiendo =DATE([Year],1,1))

  • Calcule el día en que comienza la semana 1 [en la celda D4]

    =IF(C4=1,B4-WEEKDAY(B4,3),B4+7-WEEKDAY(B4,3))

  • Determinar el lunes de la semana en cuestión y el mes correspondiente

    =MONTH(D4+7*([Week]-1))

+0

Gran respuesta, gracias, me tomó un poco de trabajo que D4 fue la semana 1 del año cuando se trabaja en el cálculo del mes. El trabajo para mí, me di cuenta de que tiene un problema con los años bisiestos como 2012, donde la semana 18 comienza el 30 de abril pero la fórmula anterior devuelve la semana 5 cuando debería ser la semana 4. Afortunadamente no tengo que ser demasiado preciso con esto, así que gracias de nuevo. – Pricey

+0

Interesante, parece funcionar para mí. Para el año 2012, la semana 18 C4 se evalúa a 52 (el 1 de enero es la semana 52 de 2011). D4 es el lunes, 2 de enero de 2012 y (D4 + 7 * (18-1)) debe ser el 30 de abril. Quizás cometí un error ya que tuve que traducir las fórmulas. Actualizaré la publicación si me dices dónde está el error. –

+0

Ah, sé cuál es mi problema. Hay una referencia a la celda B1 en la fórmula que funciona en la semana 1. No tengo ningún valor para esa celda en particular, supongo que es B4, así que lo ajusté y funciona ahora. – Pricey

24

Usted puede hacer esto un poco más simple. Si el año está en A2, p. número 2012, y la semana está en B2 se puede obtener la fecha de inicio de la semana con esta fórmula formato

=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7

como la fecha

...... claramente se puede envolver que en un mes función para obtener el mes, es decir,

celda de resultado

=MONTH(DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7)

formato que en general

Explicación

Lo anterior considera que la fecha de la última lunes del año anterior y después se añade el número de semanas * 7 para dar la fecha de inicio de la semana en cuestión.

primer día del año para las semanas ISO es siempre el único lunes en el período del 29 de diciembre al 4 de enero, así que para encontrar esa fecha podemos encontrar el lunes inmediatamente antes del 5 de enero.

Para encontrar el Lunes inmediatamente antes de la fecha en que se puede utilizar esta fórmula genérica

=date-WEEKDAY(date-2)

por lo que si la fecha es el 5 de Ene del año se muestra en la A2 que es lo mismo que

=DATE(A2,1,5)-WEEKDAY(DATE(A2,1,3))

..... pero eso da el primer lunes de este año, así que si quiero el último lunes del año anterior puedo restar 7 - una forma de hacerlo es restar 7 de 5 para obtener -2 por lo tanto :

=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))

+0

Gracias, esto me confunde con lo que está sucediendo en realidad, -2 desde el primer mes del año, menos el número del día de la semana del 3 de enero de ese año ... luego agregue las semanas * días en una semana. Tu respuesta se ve bien y mucho más limpia +1. Gracias – Pricey

+3

Gracias - He añadido una explicación ...... –

+1

Toma un poco de la cabeza la lógica pero una fórmula limpia y simple gran respuesta – MikeT

0

La Semana ISO siempre contienen 4 de enero, por lo que vamos a obtener su día de la semana a partir de Lunes (obviamente "año" es la celda con el año):

WEEKDAY(DATE(year;1;4)) 

Este es el número de días que necesitamos para volver a partir de esa fecha para encontrar un lunes (más uno)

DATE(year;1;4)-WEEKDAY(DATE(year;1;4))+1 

Así que ahora sólo tenemos que contar ...

DATE(year;1;4)-WEEKDAY(DATE(year;1;4))+1+weeknumber*7 
Cuestiones relacionadas