Obtener la fecha inicial y final de un periodo en Excel II

por Walter E. Irahola

El artículo anterior se complica, dado que aparecen condiciones para la generación de las fechas que formaran parte de la frase que se desea armar.

Recuerdo que en el artículo anterior se necesitaba armar una formula en EXCEL que permita armar la frase ?Semana del día 1 de Junio al día 7 de Junio?, donde las fechas del periodo deben ir desde el día Lunes al Domingo, la cual se obtenía con la siguiente formula:

=CONCATENAR(
	"Semana del día ";
	DIA(HOY());
	" de ";
	NOMPROPIO(TEXTO(HOY();"mmmm"));
	" al día ";
	DIA(HOY()+6);
	" de ";
	NOMPROPIO(TEXTO(HOY()+6;"mmmm"))
)

Pero ahora, se posee las siguientes condiciones:

  • Las fechas deben comenzar desde cualquier día de la semana, pero siempre finalizar el día domingo.
  • El único caso en que la fecha final no termina el día domingo es cuando es el último día del mes.
  • En caso de que la fecha final este próxima a fin de mes, hasta un máximo de 4 días, el periodo finalizara en el último día del mes.

Solución

Es larga, pero intentare desmenuzar y explicar lo más que pueda:

  • DIASEM(Núm_de_serie;tipo): devuelve un numero del 1 al 7 que identifica el día de la semana. Para que el día Lunes=1 a Domingo=7 se debe indicar como tipo el valor 2.

=DIASEM(HOY();2) devuelve el numero del día de la semana de la fecha actual.

Necesito obtener el número de día que será el Domingo próximo: =DIA(HOY()+(7-DIASEM(HOY();2)))

  • FECHA(año,mes,día): devuelve el numero que representa la fecha en código de fecha y hora de Microsoft Excel.

Obtengo el último día del mes:

=DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))

Verifico si estoy próximo a fin de mes: si la fecha del siguiente domingo es superior a 25 obtengo el ultimo día del mes, sino, obtengo el numero de día que será el Domingo próximo:

=SI(DIA(HOY()+(7-DIASEM(HOY();2)))>25;DIA(FECHA(AÑO(HOY());MES(HOY())+1;0));DIA(HOY()+(7-DIASEM(HOY();2))))

Verifico si faltan más de 7 días para llegar a fin de mes:

=SI((DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))-DIA(HOY()))>7;SI(DIA(HOY()+(7-DIASEM(HOY();2)))>25;DIA(FECHA(AÑO(HOY());MES(HOY())+1;0));DIA(HOY()+(7-DIASEM(HOY();2))));DIA(FECHA(AÑO(HOY());MES(HOY())+1;0)))

Obtengo el nombre del mes:

=SI(Y(DIASEM(HOY();2)>=1;DIASEM(HOY();2)<7);
	SI((DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))-DIA(HOY()))>7;
		SI(DIA(HOY()+(7-DIASEM(HOY();2)))>25;
			TEXTO(FECHA(AÑO(HOY());MES(HOY())+1;0);"mmmm");
			TEXTO(HOY()+(7-DIASEM(HOY();2));"mmmm")
		);
		TEXTO(FECHA(AÑO(HOY());MES(HOY())+1;0);"mmmm")
	);
	TEXTO(HOY();"mmmm")
)

Resultado final

A partir de la utilidad de las anteriores funciones y formulas, el resultado seria la siguiente función:

=CONCATENAR(
	"Semana del día ";
	DIA(HOY());
	" de ";
	TEXTO(HOY();"mmmm");
	" al día ";
	SI(Y(DIASEM(HOY();2)>=1;DIASEM(HOY();2)<7);
		SI((DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))-DIA(HOY()))>7;
			SI((DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))-DIA(HOY()+(7-DIASEM(HOY();2))))<4;
				DIA(FECHA(AÑO(HOY());MES(HOY())+1;0));
				DIA(HOY()+(7-DIASEM(HOY();2)))
			);
			DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))
		);
		DIA(HOY())
	);
	" de ";
	SI(Y(DIASEM(HOY();2)>=1;DIASEM(HOY();2)<7);
		SI((DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))-DIA(HOY()))>7;
			SI((DIA(FECHA(AÑO(HOY());MES(HOY())+1;0))-DIA(HOY()+(7-DIASEM(HOY();2))))<4;
				TEXTO(FECHA(AÑO(HOY());MES(HOY())+1;0);"mmmm");
				TEXTO(HOY()+(7-DIASEM(HOY();2));"mmmm")
			);
			TEXTO(FECHA(AÑO(HOY());MES(HOY())+1;0);"mmmm")
		);
		TEXTO(HOY();"mmmm")
	)
)

Espero que a alguien le sirva y ahorre tiempo.


MePagan.com