Calcule el recuento de días laborables entre dos fechas usando VBA en Microsoft Excel

Tabla de contenido

En este artículo, crearemos una función definida por el usuario (UDF) para contar la cantidad 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 de 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 convertir los sábados y domingos en 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, [Weekend], [Holidays])

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 incluir o excluir sábados o domingos como festivos.

Explicación del código

Establecer RngFind = Hojas de trabajo ("Días festivos"). Columnas (1) .Find (i)

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

Si no RngFind no es nada, entonces

Ir a por último

Terminara si

El código anterior se usa para verificar si la fecha especificada existe en la lista de días festivos. Si la condición devuelve VERDADERO, ese día no se cuenta en el número de días hábiles.

Siga a continuación para obtener el código

 Opción Función explícita CountWorkingDays (StartDate como larga, EndDate como larga, Opcional InclSaturdays como booleano = Verdadero, _ Opcional InclSundays como booleano = Verdadero) 'Declaración de variables Dim RngFind como rango Dim i Tan largo para i = StartDate a EndDate en error Reanudar siguiente' Encontrar la ubicación donde existe la fecha especificada en la hoja de días festivos Establecer RngFind = Hojas de trabajo ("Días festivos"). Columnas (1) .Find (i) En caso de error Ir a 0 'Verificando si es festivo en la fecha indicada Si no, RngFind no es nada Luego, vaya al último final si 'Verificando si es sábado en la fecha indicada Si incluye los sábados Luego si el día de la semana (i, 2) = 6 Luego, vaya al último final Si finaliza si' Verificando si es domingo en la fecha dada Si incluye los domingos Entonces si es el día de la semana (i, 2) = 7 Luego Ir a ForLast End If End If CountWorkingDays = CountWorkingDays + 1 ForLast: Siguiente función de fin 

Si te gustó este blog, compártelo con tus amigos en Facebook. Además, puede seguirnos en Twitter y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave