6 febrero, 2025

PROGRAMAR LA FUNCIÓN DIAS.LAB CON VBA Y AUTOMATIZAR DÍAS DE VACACIONES

Hola a todos!

Hace unos días respondía a la consulta que me enviaba un lector sobre la posibilidad de programar la función DIAS.LAB (os dejo el enlace a la microsoft donde se explica esta fórmula).

Tal y como se expone en la web, su función es la siguiente: «Devuelve el número de días laborables entre fecha_inicial y fecha_final. Los días laborables no incluyen los fines de semana ni otras fechas que se identifiquen en el argumento vacaciones

Su sintaxis es: Fecha Inicial, Fecha Final , Vacaciones (o días festivos).

Pues bien, se puede automatizar y además incluyendo el rango de días festivos o de vacaciones que hayamos indicado.

Veamos un ejemplo con unas cuantas personas (clic en la imagen para ampliar):

PROGRAMAR LA FUNCIÓN DIAS.LAB CON VBA Y AUTOMATIZAR DÍAS DE VACACIONES

Como podéis observar estoy teniendo en cuenta una fecha inicial y final para todos igual, es decir, todo el año 2019. Y los días de vacaciones distintos para cada uno de ellos.

El objetivo es calcular los días laborables del año descontando los días festivos/vacaciones (columnas «F» y posteriores) y completar la columna «E».

Esto lo vamos a hacer con la siguiente macro:

Sub DIAS_LAB()
'Declaramos variables
Dim i As Long, Final As Long
Dim Rango As Range, nCol As Long
With Sheets("Hoja1")
Final = Application.CountA(.Range("A:A"))
'Con un loop recorremos cada registro
For i = 2 To Final
'Detectamos la última celda con datos de cada fila
nCol = .Cells(i, Cells.Columns.Count).End(xlToLeft).Column
'Seleccionamos el rango de los días de vacaciones
ActiveSheet.Range(.Cells(i, 6), .Cells(i, (6 + (nCol - 6)))).Select
Set Rango = Selection
'Calculamos los días
.Cells(i, 5) = Application.WorksheetFunction.NetworkDays(CDate(.Cells(i, 3)), CDate(.Cells(i, 4)), Rango)
Next i
End With
End Sub

Para poder capturar automáticamente los días de vacaciones, ha optado por utilizar un rango variable que funciona gracias a la detección de la última celda de cada fila que contiene datos. El resto simplemente es completar los argumentos de la función «NetworkDays».

El resultado es el siguiente (clic en la imagen para ampliar):

PROGRAMAR LA FUNCIÓN DIAS.LAB CON VBA Y AUTOMATIZAR DÍAS DE VACACIONES_1

Como podéis observar, ya hemos calculado el total de días por persona.

Este es solo un ejemplo de programación, se podría utilizar la propia función DIAS.LAB para calcular los días de vacaciones en un rango inicial y final (de mismo que para los días laborales, pero de vacaciones), evitando así el tener que indicar día por días las vacaciones.

Y eso es todo, espero que os sea de utilidad : )

Descarga el archivo de ejemplo pulsando en: PROGRAMAR LA FUNCIÓN DIAS.LAB CON VBA Y AUTOMATIZAR DÍAS DE VACACIONES

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies