Banner clix

domingo, 4 de agosto de 2013

Macro: Calcular fechas en base a días laborables en Excel 2003 o calcular en base a semanas con 6 días laborales

El post del ejemplo que publique anteriormente para calcular fechas en base a días laborales solo aplica para Excel 2007 y posteriores, sin embargo eso no es motivo para preocuparse, con este sencillo Macro conseguimos emular las mismas cualidades de la función dia.lab e incluso incluir la posibilidad de tener semanas con 6 días laborales (como la función dia.lab de Excel 2010)

Para ver como activar, utilizar y autorizar Macros en tu ordenador ve el siguiente post: Tip: Macros, que son y como activar y ejecutar Macros en excel


Vamos al editor de Visual Basic y pegamos completo el siguiente código, en un modulo. Yo recomiendo realizarlo en un modulo para poder accesar a el desde distintas hojas o libros. Con los comentarios es posible entender el por que de cada linea.

Function dialab(fechai As Date, dias As Integer, Optional feriados As Range)

Dim diafer As Range 'se declara las celdas en el rango de feriados
Dim semanalab As Integer

semanalab = 5 'cuantos dias laborables a la semana hay

On Error Resume Next 'si el rango esta vacio continuar
For Each diafer In feriados 'para cada celda en el rango
cadena = cadena & diafer & ";" 'se construye una cadena con las fechas
Next diafer

Do 'repetir la siguiente instruccion
y = y + 1 'con este contador sabemos cuantos dias en total (feriados, fines de semana y laborales) sumaremos a la fecha inicial
If Weekday(fechai + y, vbMonday) <= semanalab Then 'si la fecha inicial + y es laboral
        If InStr(cadena, (fechai + y)) = 0 Then 'si la fecha inicial + y no esta en los feriados
        x = x + 1 'sumar 1 al contador de dias laborales
        End If
End If
Loop Until x = dias 'cuando x sea igual a los dias laborales especificados detenerse

dialab = fechai + y 'escribimos el resultado
End Function

Con éste macro no solo podemos emular las mismas características que la función de Excel 2007 dia.lab, sino que podemos realizar cálculos en base a 6 días laborales en la semana, por ejemplo si nuestra empresa labora los días sábados y necesitamos tomar en cuenta ese día, modificamos la 6ta linea linea colocándole 6 en vez de 5, con esto le decimos que nuestra semana tiene 6 días laborales y no 5

Luego de tener nuestro Macro en su sitio, podemos realizar el Ejemplo del calculo de fechas en base a días laborales sin inconvenientes, solo debemos tener presente cambiar dia.lab por dialab (sin el punto)

No hay comentarios:

Publicar un comentario