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
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