lunes, 12 de octubre de 2015

Encontrar el inicio y fin de una semana a partir de una fecha


Como algunos sabes, desarrollo aplicaciones en VBA, es decir herramientas en Excel (ademas de impartir capacitaciones, administrar páginas web, impartir clases en varias universidades, administrar mis blogs... lavar, planchar y cocinar). 
Hace algunos días tuve la necesidad de elaborar una aplicación que realizara reportes semanales a partir de una fecha; y necesitaba encontrar a partir de dicha fecha el inicio (lunes) y fin de semana (viernes).

En un primer momento, pretendí programar un código con Visual Basic, que automáticamente lo generara, sin embargo, recordé lo que me dijo un muy buen amigo, al que considero mi maestro Jedi... "Excel tiene muchas fórmulas que te realizan varias operaciones que no necesitas programar..."

Fue así que empecé a investigar con Google y encontré primero la forma de encontrar en que semana se encuentra (eso lo publiqué hace unos días, en el siguiente enlace).

Ahora encontraremos además de la semana, el inicio y fin. Para ello realizaremos el siguiente ejemplo:

En la celda B1 colocaremos una fecha:


Y en la celda C1 colocaremos la siguiente formula
=NUM.DE.SEMANA(B1;2)

Nos devuelve el siguiente resultado:


Es decir, lo primero que encontramos es en que semana del año se ubica el día, y en este caso se ubica en la semana 40.

Ahora que ya tenemos la fecha y la semana encontraremos el inicio de la semana, y para ello utilizaremos las siguiente fórmulas:

=FECHA(AÑO(B1);1;1)+(C1*7)+1-DIASEM(FECHA(AÑO(B1);1;1))-6

En donde:
AÑO(B1) ... devuelve el año de la fecha, es decir, 2015
FECHA(AÑO(B1);1;1) ... Nos devuelve el primer día del año, es decir, 01/01/2015
(C1*7) ... Nos devuelve la cantidad de días, 40*7 = 280 días (40 semanas por 7 días)
DIASEM(FECHA(AÑO(B1);1;1) ... Nos indica que día inició el año, en este caso, jueves, el día 5
Entonces al 01/01/2015 le sumo 280 días, esto nos devuelve 08/10/2015, a eso le suma 1 porque empezamos los domingo, le quito 5 días pues el primer día del año fue jueves. En este momento nos devuelve 04/10/2015 (que corresponde al domingo de la semana de 02/10/2015). Y como quiero el lunes anterior, le quito 6 días, y el resultado final es 28/09/2015 (Lunes anterior al 02/10/2015).


Para encontrar el viernes de esa semana, usamos la misma formular pero en lugar de quitarle 6 días le quito solo 2 días:

=FECHA(AÑO(B1);1;1)+(C1*7)+1-DIASEM(FECHA(AÑO(B1);1;1))-2


.Finalmente, puedo utilizar la función CONCATENAR Y TEXTO para que aparezca un texto mas cercano a nosotros:

=CONCATENAR("Del "; TEXTO(B2;"dd");" de "; TEXTO(B2;"mmmm");" al ";TEXTO(C2;"dd");" al ";TEXTO(C2;"mmmm"))

El resultado es el siguiente:


Espero que les sirva:

Ing. Enrique Neciosup Morales
enrique@expertosenexcelpc.com 
Síguenos en Facebook