En este artículo, crearemos una función definida por el usuario (UDF) para contar el número de días hábiles entre las fechas especificadas, incluidos o excluidos los sábados y domingos como días libres.

Los datos brutos de este ejemplo constan de una fecha de inicio y una fecha de finalización. Queremos contar el número de días laborables entre estas fechas.

ArrowMain

Hemos especificado las fechas de vacaciones en la columna A en la hoja «Vacaciones».

ArrowHolidayList

Excel tiene una función incorporada, NETWORKDAYS para contar el número de días hábiles entre el intervalo.

Sintaxis de la función NETWORKDAYS NETWORKDAYS (StartDate, EndDate, [Holidays])

Esta función excluirá la fecha especificada en la lista de días festivos, mientras cuenta el número de días hábiles.

Esta función considera los sábados y domingos como festivos por defecto, por lo que no podemos contar el número de días laborables, en caso de que solo tengamos una semana libre.

Hemos creado la función personalizada «CountWorkingDays» para contar el número de días laborables entre el intervalo. Esta función personalizada maneja el problema de la función NETWORKDAYS. En esta función, podemos contar el número de días laborables incluso si solo hay una semana libre el sábado o el domingo.

Sintaxis de la función personalizada

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays e InclSundays son parámetros opcionales. De forma predeterminada, ambos tienen valores VERDADEROS. Para cambiar sábados y domingos a días laborables, cambie el valor del parámetro respectivo a FALSO.

Microsoft introdujo la función NETWORKDAYS.INTL con Excel 2010. Esta función maneja el problema de la función NETWORKDAYS. En esta función, podemos especificar los días libres de la semana. Podemos especificar uno o dos días como Semana libre.

Sintaxis de la función NETWORKDAYS.INTL

NETWORKDAYS.INTL (StartDate, EndDate, [Fin de semana], [Vacaciones])

En el parámetro de fin de semana, podemos especificar los días libres de la semana.

En este ejemplo, utilizaremos las tres funciones anteriores para contar el número de días laborables.

ArrowOutput

Explicación lógica

En la función «CountWorkingDays», primero verificamos si la fecha dada en el parámetro existe en la lista de vacaciones especificada. Si la fecha existe en la lista de días festivos, ese día no se cuenta en el número de días hábiles. Si la fecha no existe en la lista de días festivos, verifique si la fecha indicada es sábado o domingo. Según el parámetro de entrada proporcionado, compruebe si desea incluir o excluir sábados o domingos como festivos.

Explicación del código

Establecer RngFind = Hojas de trabajo («Vacaciones»). Columnas (1) .Find (i)

El código anterior se usa para encontrar la ubicación donde existe la fecha especificada en la lista de vacaciones.

Si no, RngFind no es nada, entonces GoTo ForLast End Si el código anterior se usa para verificar si la fecha especificada existe en la lista de vacaciones. Si la condición devuelve VERDADERO, ese día no se cuenta en el número de días hábiles.

Siga el código a continuación

Option Explicit

Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _

Optional InclSundays As Boolean = True)

'Declaring variables

Dim RngFind As Range

Dim i As Long

For i = StartDate To EndDate



On Error Resume Next



'Finding the location where the specified date exist in the Holidays sheet

Set RngFind = Worksheets("Holidays").Columns(1).Find(i)



On Error GoTo 0



'Checking whether it is holiday on the given date

If Not RngFind Is Nothing Then

GoTo ForLast

End If



'Checking whether it is Saturday on given date

If InclSaturdays Then

If Weekday(i, 2) = 6 Then

GoTo ForLast

End If

End If



'Checking whether it is Sunday on given date

If InclSundays Then

If Weekday(i, 2) = 7 Then

GoTo ForLast

End If

End If



CountWorkingDays = CountWorkingDays + 1



ForLast:

Next

End Function

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]