Dias de vacaciones

pepesoto

Board Regular
Joined
Sep 18, 2002
Messages
53
:oops:
Hola grupo!
Tengo una funcion que amablemente me obsequio un colega de Colombia (Cesar Mera), la cual funciona perfectamente, pero,
Lo que necesito que haga es:
En A1 = Dia inicial de vacaciones de un trabajador
En A2 = Dias que va a tomar de vacaciones (no cuentan los domingos o el dia de su descanso)
En A3 = Dia final de vacaciones del trabajador (A1 + A2 + Dias de descanso que se atraviesen + dias festivos que se atraviesen)
En A4 = Dia en que debe regresar a trabajar (Un dia despues de A3)
Ejemplo:
A1 = 29/01/2003
A2 = 8
Dias de descanso que se atraviesan: 2 feb 2003
Dias festivos que se atraviesan: 5 feb 2003
Dias totales que tomara: 8 + 2 (2 feb y 5 feb)
A3 = 07/02/2003
A4 = 08/02/2003
La funcion de Cesar me trae el dia en que debe presentarse a laborar el trabajador (A4) y trabaja bien cuando el dia de descanso es el domingo, pero no funciona cuando el dia de descanso es cualquier otro dia...
He aqui la funcion:
Function DiaLab_conSabados(inicial As Date, dias As Integer, festivos As Range) As Date
'Función elaborada por Cesar Mera
'Version 2.0 18/02/2003
Dim final As Date
If festivos.Columns.Count > 1 Then 'Si el rango de fechas de festivos es mayor a
'una columna se arroja el valor de 0
DiaLab_conSabados = final
Exit Function
End If
If Weekday(inicial) = 1 Then inicial = inicial + 1 'Valida que el primer día no sea Domingo
final = inicial + DateDiff("d", inicial, inicial + dias) 'Calcula la fecha final en dias comunes
dia = inicial
Do While dia <= final 'Este loop cuenta cuantos domingos hay en el numero de dias comunes
'y le aumenta ese numero de días a la fecha final
If Weekday(dia) = 1 Then final = final + 1
dia = dia + 1
Loop
If Weekday(final) = 1 Then final = final + 1 'Valida que la fecha final no sea un Domingo
'de ser asi aumenta un día a la fecha final
For Each Row In festivos.Rows 'Cuenta el numero de festivos entre la fecha
If IsDate(Row) Then 'inicial y final y agrega esos días a la fecha final
If inicial <= Row And final >= Row Then
final = final + 1
If Weekday(final) = 1 Then final = final + 1
End If
End If
Next Row
Call valida(final, festivos) 'Valida que la respuesta no sea ni un Domingo ni un festivo
'aumenta fechas hasta que la respuesta sea día hábil
DiaLab_conSabados = final
End Function

Sub valida(final As Date, festivos As Range)
Dim Esfestivo As Boolean
For Each Row In festivos.Rows
If IsDate(Row) And Row = final Then
Esfestivo = True
End If
Next Row
If Weekday(final) = 1 Or Esfestivo Then 'Si la respuesta es Domingo o festivo
final = final + 1 'aumenta un día a la respuesta
Call valida(final, festivos) 'y vuelve a hacer la verificación
End If
End Sub

Lo que entiendo es que "weekday = 1" es el domingo, pero necesitaria tener que poner el dia de descanso para que funcionara con las personas que descansan otro dia en lugar del domingo, ya que tengo un formato de vacaciones a disfrutar que le doy al trabajador con las fechas inicial, final y de regreso a trabajar.
Espero haberme explicado...
Salu2 cordiales a todos...
Jose Antonio Soto :oops:
pepesoto@chihuahua.com
 

Excel Facts

Format cells as date
Select range and press Ctrl+Shift+3 to format cells as date. (Shift 3 is the # sign which sort of looks like a small calendar).
Entiendo que el problema básico es el domingo, cierto ?, serviría ponerle otro parámetro a la Función que defina el "día de descanso" ? no he tenido tiempo para leer con calma toda la pregunta, pero creo que esto sería la solución...
 
Upvote 0
Funcion p/dias de descanso en vacaciones

Exacto, Juan Pablo. :oops:
Ese es el parametro que haria falta, para que cada vez que se ingresara la fecha inicial, preguntara cual es el dia de descanso.
La funcion de Cesar trabaja bien, cuando el dia de descanso es el domingo (weekday = 1), pero ¿como incluyo ese otro parametro para que pregunte cual es el dia de descanso, cuando no sea domingo...? :eek:
 
Upvote 0
Ok, entonces es sencillo.

La definición de la función es:

Function DiaLab_conSabados(inicial As Date, dias As Integer, festivos As Range) As Date

hay que cambiarla a:

Function DiaLab_conSabados(inicial As Date, dias As Integer, festivos As Range, Optional DiaDescanso as Long = 1) As Date

y adentro del código, donde se compara asií:

WeekDay(inicial) = 1

poner

WeekDay(inicial) = DiaDescanso

y así para las otras partes donde compara el WeekDay.

Y para usar la función, se pone el número del día que corresponde al día de descanso (Es opcional, así que si no se pone, se asume Domingo)
 
Upvote 0

Forum statistics

Threads
1,215,364
Messages
6,124,507
Members
449,166
Latest member
hokjock

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top