Días atrás un lector solicitaba ayuda a través de un comentario en el blog. Deseaba calcular cuál sería el día de reincorporación teniendo en cuenta los días totales de vacaciones (15 días en el ejemplo planteado) y sus días de descanso semanal (martes y miércoles), conociendo el primer día o inicio de sus vacaciones:
Para ello definiremos una función personalizada o UDF que nos permitirá encontrar dicho día de retorno. Esta función la incluiremos dentro del Editor de VBA (al que accedemos presionando Alt+F11), insertando un Módulo.
El código será:
Veamos la solución en un ejemplo. Queremos calcular qué día deberá regresar un trabajador que comienza sus vacaciones el día 24/12/2010, sabiendo que ni martes ni miércoles trabaja.
Si realizamos un conteo manual tendríamos:
Observamos en el conteo manual que sólo cuentan los días de la semana que no sean martes o miércoles, es decir, que al aplicarles la función =DIASEM(fecha;[tipo]), no es ni 2 ni 3; por tanto al ir sumando hasta 15 (total días vacaciones) llegamos a la fecha buscada de reincorporación 13/01/2011.
Si introducimos en alguna celda la nueva función creada
=fechareincorporación(fechainicio)
calculada sobre la fecha dada
=fechareincorporación(24/12/2010)
obtendríamos exactamente aquella fecha (13/01/2011) calculada a mano.
...estoy tratando de hacer un programa que calcule los dias de vacaciones de una persona que descansa dos dias en la semana (mar. mier.)sin contar estos y tomara 15 dias de descanso, que me diga el dia que debe presentarse al termino de estos... |
Para ello definiremos una función personalizada o UDF que nos permitirá encontrar dicho día de retorno. Esta función la incluiremos dentro del Editor de VBA (al que accedemos presionando Alt+F11), insertando un Módulo.
El código será:
'función que calcula el día de regreso teniendo en cuenta 'los 15 días vacaciones y los dos días de descanso por semana. Function fechareincorporacion(fechainicio As Date) Dim dsemana As Date vacaciones = 15 d = 0 x = 1 Do dsemana = Application.WorksheetFunction.Weekday(fechainicio + d, 2) If dsemana = 2 Or dsemana = 3 Then x = x + 0 Else: x = x + 1 End If d = d + 1 Loop Until x = 15 If Application.WorksheetFunction.Weekday(fechainicio + d, 2) = 2 Or _ Application.WorksheetFunction.Weekday(fechainicio + d, 2) = 3 Then fechareincorporacion = fechainicio + d + 2 Else fechareincorporacion = fechainicio + d End If End Function |
Veamos la solución en un ejemplo. Queremos calcular qué día deberá regresar un trabajador que comienza sus vacaciones el día 24/12/2010, sabiendo que ni martes ni miércoles trabaja.
Si realizamos un conteo manual tendríamos:
Observamos en el conteo manual que sólo cuentan los días de la semana que no sean martes o miércoles, es decir, que al aplicarles la función =DIASEM(fecha;[tipo]), no es ni 2 ni 3; por tanto al ir sumando hasta 15 (total días vacaciones) llegamos a la fecha buscada de reincorporación 13/01/2011.
Si introducimos en alguna celda la nueva función creada
=fechareincorporación(fechainicio)
calculada sobre la fecha dada
=fechareincorporación(24/12/2010)
obtendríamos exactamente aquella fecha (13/01/2011) calculada a mano.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.