2012-01-09 22 views
5

Estoy tratando de encontrar algún código de VBA para determinar el número de días de la semana y días de fin de semana en un rango de fechas dado usando Access VBA.Buscar número de días de la semana/fines de semana en un rango de fechas dado

Por ejemplo:

Begin Date - 1/1/2012 
End Date - 1/31/2012 

resultado debe ser:

Week days - 22 
Weekend days - 9 

¿Alguien puede ayudar con esto?

+0

¿Se puede usar la función de DÍAS EN LA RED? Pseudo Código: TotalDays a través de un DATEDIFF de dos fechas función Ejecutar DIAS.LAB en dos fechas Menos días de trabajo de Totaldays para los días de fin de semana. – jetgrrrl

+1

La función NETWORKDAYS es una valiosa función de hoja de cálculo de Excel, pero no existe en VBA. –

Respuesta

6

Estas dos funciones se calculará el número de días de semana y días de fin de semana:

Function NumWeekendDays(dBegin As Date, dEnd As Date) As Long 
    Dim iPartial As Integer 
    Dim lBeginDay As Long 
    Dim lNumWeekendDays As Long 

    iPartial = DateDiff("d", dBegin, dEnd + 1) Mod 7 
    lBeginDay = 6 - DatePart("w", dBegin, vbMonday) 

    lNumWeekendDays = (DateDiff("d", dBegin, dEnd + 1) \ 7) * 2 
    If iPartial > 0 And lBeginDay - iPartial < 0 Then 
     If lBeginDay = -1 Then 
      lNumWeekendDays = lNumWeekendDays + 1 
     ElseIf iPartial - lBeginDay = 1 Then 
      lNumWeekendDays = lNumWeekendDays + 1 
     Else 
      lNumWeekendDays = lNumWeekendDays + 2 
     End If 
    End If 

    NumWeekendDays = lNumWeekendDays 

End Function 

Function NumWeekDays(dBegin As Date, dEnd As Date) As Long 
    NumWeekDays = DateDiff("d", dBegin, dEnd + 1) - NumWeekendDays(dBegin, dEnd) 
End Function 

Nota: Me pareció más sencilla de calcular los días de fin de semana-semana parcial mediante el cálculo de la variable lBeginDay de modo que si la fecha de inicio fue Lunes, lBeginDay == 5 ... si la fecha de inicio fue el viernes, lBeginDay == 1, etc. Otras variaciones también deberían funcionar.

+0

Hay un error en este código de muestra. Devuelve un 2 si la fecha de finalización es viernes. "If iPartial> 0 And lBeginDay - iPartial <** = ** 0 Then" debería ser "If iPartial> 0 And lBeginDay - iPartial <0 Then" Cuando "<=" se cambia a solo "<" funciona muy bien. – Brad

+0

@ Brad- He reparado el error. ¡Gracias! –

Cuestiones relacionadas