Calcular el recuento de días laborables entre dos fechas utilizando VBA en Microsoft Excel
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.
Hemos especificado las fechas de vacaciones en la columna A en la hoja «Vacaciones».
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.
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]