Restar dias festivos

24/07/2006 - 13:18 por Ernesto | Informe spam
Hola
Tengo las fechas de vacaciones del personal de inicio (F19) y de final(H19)
y número de días (I19)
la diferencia entre H19 y F19 me da los días naturales.

Quiero que la formula que tengo en I19, si se puede, me deduzca los festivos
y me de los dias habiles que
disfrutan los empleados.

Gracias y saludos

Preguntas similare

Leer las respuestas

#6 zipzap
25/07/2006 - 12:40 | Informe spam
Hola Ernesto,
Adjunto la función para los días Laborales, le he arreglado un poco
para adaptarla a vosotros
DiasLaborales
FechaInic As Date
Inicio de las vacaciones
FechaFin As Date
Dia final de las vacaciones
Festivos As Range
Rango de fechas (ordenadas) que indican los festivos
DiaDescanso As Variant
Puede indicarse o no.
Si no se indica, supone Sabádos y Domingos
Si se indica:
Se debe indicar las tres primeras letras del día de la
semana "MAR" es martes.
Se puede indicar "NOR" para indicar que es Normal,
(Sábado y Domingos).

Pruébala y me comentas.
(ten cuidado con los saltos de línea que no lo son).
Saludos
Function DiasLaborales(ByVal FechaInic As Date, ByVal FechaFin As Date,
ByVal Festivos As Range, Optional DiaDescanso As Variant = "NOR")
Dim FechaEval As Date
Dim MatrizFestivos(30) As Date
Dim Dia As Range
Dim DiaNombre As String * 3
Dim DiaNumero As Integer
Const NombreDias As String = "DOM,LUN,MAR,MIE,JUE,VIE,SAB,NOR"
'
DiasLaborales = "Error"
'Validación del nombre del día de descanso
Select Case Len(DiaDescanso)
Case 3
DiaNombre = UCase$(Left$(DiaDescanso, 3))
DiaNumero = InStr(1, NombreDias, DiaNombre)
If DiaNumero = 0 Then GoTo Salida
DiaNumero = Int(DiaNumero / 4) + 1
If DiaNumero > vbSaturday Then DiaNumero = 0
Case 1
DiaNumero = Int(Val(DiaDescanso))
If DiaNumero < 0 Or DiaNumero > vbSaturday Then GoTo Salida
Case Else
GoTo Salida
End Select
'
IdxIni = 1
For Each Dia In Festivos
i = i + 1
MatrizFestivos(i) = Dia.Value
Next Dia
IdxFin = i
'
'Verifica si es Sábado o Domingo o Día de descanso
DiasFinSemana = 0
FechaEval = FechaInic
While FechaEval <= FechaFin
If DiaNumero = 0 Then
If Weekday(FechaEval) = vbSunday Or Weekday(FechaEval) vbSaturday Then
DiasFinSemana = DiasFinSemana + 1
End If
Else
If Weekday(FechaEval) = DiaNumero Then
DiasFinSemana = DiasFinSemana + 1
End If
End If
FechaEval = FechaEval + 1
Wend
'
'Verifica si son días festivos
DiasFestivos = 0
FechaEval = FechaInic
'
While FechaEval <= FechaFin
eol = False
Idx = IdxIni
While eol = False
If IsDate(MatrizFestivos(Idx)) Then
If FechaEval = MatrizFestivos(Idx) Then
If Weekday(FechaEval) <> DiaNumero Then
DiasFestivos = DiasFestivos + 1
End If
eol = True
Else
Idx = Idx + 1
If Idx > IdxFin Then eol = True
End If
Else
eol = True
End If
Wend
FechaEval = FechaEval + 1
Wend
'
DiasLaborales = FechaFin - FechaInic + 1 - (DiasFestivos +
DiasFinSemana)
Salida:
End Function
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida