Hola a todos:

Cuando trabajamos con fechas y días laborables, a veces resulta complejo poder obtener la información que necesitamos.

Una ejemplo clásico es añadir a una fecha un número de días para obtener una fecha final, pero esos días debe ser laborables, sin incluir los fines de semana. Es similar a Dias.Lab(), pero con particularidades.

Por ejemplo, imaginad que tenemos estas fechas y días:

Y queremos añadir esos días pero contando días laborables, sin incluir los fines de semana (Sábado y Domingo). Es decir, que el primer registro será del 22/05/2020 + 2 días, será: el 26/05/2020, dado que el día 22 fue un viernes.

Para hacer esto lo podemos realizar con una macro o una función. Aunque es muy sencillo cambiar una procedimiento Sub a Function, os dejaré los dos.

Procedimiento Sub:

Sub AÑADIR_FECHA()
    'Declaramos variables
    Dim i           As Long, j As Long
    Dim FECHAINI    As Date, fin As Long
    'Iniciamos proceso, si el día es menor
    'o igual a 5 incrementamos j
    'pasamos resulado a función
    With Sheets("Hoja1")
        fin = Application.CountA(.Range("A:A"))
        For i = 2 To fin
            FECHAINI = .Cells(i, 1)
            j = 0
            Do Until j = .Cells(i, 2)
                FECHAINI = DateAdd("D", 1, FECHAINI)
                If Weekday(FECHAINI, vbMonday) <= 5 Then j = j + 1
            Loop
            .Cells(i, 3) = FECHAINI
        Next i
    End With
End Sub

Y esta es la función:

Function AÑADEFECHA(ByVal FECHAINI As Date, DIAS As Long)
    'Declaramos variables
    Dim j           As Long
    'Iniciamos proceso, si el día es menor
    'o igual a 5 incrementamos j
    'pasamos resulado a función
    With ActiveSheet
        j = 0
        Do Until j = DIAS
            FECHAINI = DateAdd("D", 1, FECHAINI)
            If Weekday(FECHAINI, vbMonday) <= 5 Then j = j + 1
        Loop
        AÑADEFECHA = FECHAINI
    End With
End Function

En ambos casos vamos a conseguir el mismo resultado:

Con el botón calculamos la columna C y con la función la D, y el resultado es el mismo.

Como podéis observar en el código y a modo de resumen es vamos acumulando días en la fecha hasta que j sea igual a los días indicados. En ese momento el valor se habrá incrementado porque únicamente hemos tenido en cuenta los días laborables.

Y esto es todo, espero que os resulte interesante el método de programación y también de utilidad!.

Descarga el archivo de ejemplo pulsando en:

¿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