miércoles, 4 de enero de 2012

Desplegable con los días del mes.






Días del mes: El objetivo del supuesto es crear una lista desplegable que nos permita seleccionar un día del un mes y año determinado. En el supuesto seleccionamos el año  mediante una barra de desplazamiento  y mediante una lista desplegable se selecciona el mes. Seleccionados mes y año en la lista desplegable de las fechas aparecen los todos días del mes.
Hay dos desplegables con las fechas del mes, en uno de ellos utilizamos la función INDIRECTO y en otro utilizamos la función DefRef

Funciones utilizadas:
DefRef()
DiaSem()
Indirecto()
Indice()
Si()

Para realizar este supuesto utilizamos las siguientes variables con nombre: 

Año=Fechas!$A$2
DiaSel=Fechas!$C$2
DiaSel2=SI(DiaSel>UDiaMes;UDiaMes;DiaSel)
DiaSemana=INDICE(Semana;DIASEM(Fechas!$D$2;2))
DiasMes=INDIRECTO(Listas!$E$2)
DiasMes2=DesRef(Listas!$a$1;1;2;UDiaMes;1)
LineaSel=INDIRECTO(Fechas!$B$15)
Meses=Listas!$A$2:$A$13
MesSel=Fechas!$B$2
PDiaM=FECHA(Año;MesSel;1)
PDiaMes31=Listas!$C$2+31
Semana=Listas!$B$2:$B$8
UDiaMes=DIA(PDiaMes31-DIA(PDiaMes31))


Barra de desplazamiento (Años):
Vinculada con la celda Año

Lista desplegable con los meses:
 Rango de entrada Meses.
 Celda vinculada: MesSel

Primera lista desplegable con los días del mes:
            Rango de entrada DiasMes2
Celda vinculada DiaSel

Segunda lista desplegable con los días del mes:
Rango de entrada DiasMes
Celda vinculada DiaSel
Para seleccionar una fecha  primero que hay que seleccionar el año. En este caso utilizo una barra de desplazamiento, con valores de 1900 a 2100, pero se puede utilizar cualquier otro método, como por ejemplo, escribir el número de año en la celda correspondiente o incluso definir la variable Año como una constante (=2012). Lo mismo se puede decir para el desplegable del mes, se puede optar por escribir el número del mes, elegir un número entre 1 y 12 mediante la validación de datos o incluso utilizar la variable MesSel como una constante. Conocidos el año y el mes calculo el último día del mes mediante el método, ya explicado en el blog, de:


Mediante la función Fecha(), llevada a una variable con nombre, transformo a fecha el 1/Mes/año. Este cálculo lo hago mediante la variable PDiaM (Primer Día Mes)

PDiaM=FECHA(Año;MesSel;1)

A esa fecha, la del mes en proceso, le sumo 31. Esta suma nos lleva necesariamente al mes siguiente al mes del proceso.
Mediante la función Dia() calculo el día del mes siguiente al del proceso, al que nos lleva la suma anterior. Si el mes tiene 31 días esa suma nos lleva al día uno del mes siguiente. Si tiene 30 días nos lleva al día 2, si tiene 29 nos lleva al día tres y si tiene 24 nos lleva al día cuatro. Si a la suma le restamos el día del mes siguiente al que nos ha llevado la suma obtenemos el último día del mes en proceso. Esta vez el cálculo no lo realizo sobre la hoja Excel, lo calculo mediante el uso de variables (con nombre).

Primer día del mes en proceso mas 31: PDiaMes31=Listas!$C$2+31.
Esta variable debía ser PDiaMes31=PDiaM+31
Último día del mes en proceso: UDiaMes=DIA(PDiaMes31-DIA(PDiaMes31))

Conocido el último día del mes ya sabemos el tamaño del desplegable.

            El la hoja “Listas”, columna C preparo las fechas del mes mediante:
En C2 =PDiaM. En las siguientes filas sumo uno a la fila anterior (C3=C2+1, C4=C3+1, etc..) hasta completar 31 días.


El cálculo del rango del desplegable lo hago de dos maneras, una utilizando la función Indirecto() y otra utilizando la función DesRef()

DiasMes=INDIRECTO(Listas!$E$2)
DiasMes2=DesRef(Listas!$a$1;1;2;UDiaMes;1)


Estas variables las podemos llevar bien a una lista desplegable o bien a una validación por lista (hoja “fechas” Datos->Validación)

No hay comentarios:

Publicar un comentario