Macro para calcular Días hábiles Lunes a Viernes

Necesito por favor que me colaboren para hacer un Macro que sume a una fecha inicial unos díashábiles y me arroje la fecha final, sin tener en cuenta NiSábados, Ni Domingos, solo de Lunes a Viernes.

2 Respuestas

Respuesta
1

no hay necesidad de macros, utilza la funcion =dias.lab()

Te explico:

En una columna cualquiera desbes anotar todas las fechas el mes que son no habiles, sabados domingos feriado, en la notacion fecha larga, asi 11/02/2012

Una vez que tienes esa lista solo aplicas la funcion de esta manera

Pones la fecha inicial en una celda y la final en otra

En a1 tenemos 01/02/2012 y en b2 tenemos 06/02/2012, luego la funcion para calcular los dias laborales entre ambas fechas seria :

dias.lab(a1;a2;b1:b10)

Entendiendo que en el rango b1:b10 esta la lista de feriados

La funcion te devolvera el intervalo entre ambas fechas descontando los feriados.

Luis Muchas Gracias por tu respuesta, sí conozco la formula DiasLab, pero realmente necesitaba calcular en un textbox automáticamente una fecha final al introducir en otros textbox el numero de días hábiles y la fecha de inicio.

Adjunto el código que me sirvió. Gracias a un Experto Javier, la cual es una función.

1. Copiamos este código a un modulo:

Function SumarDias(Optional Fecha As Variant = "", _
Optional Días As Integer = 2, _
Optional Festivos As Boolean = True, _
Optional Sábados As Boolean = True, _
Optional Domingos As Boolean = True) As Date
On Error Resume Next
SumarDias = Date
If Fecha = "" Then Fecha = Date
If IsDate(Fecha) = False Then Exit Function
If Días < 1 Then Exit Function
SumarDias = Fecha
For POR = 1 To Días - 1
Día = DatePart("w", SumarDias)
Set Festivo = Sheets("Festivos").Cells.Find(what:=SumarDias)
If (Día = 7 And Sábados = True) Or _
(Día = 1 And Domingos = True) Then
POR = POR - 1
ElseIf Not Festivo Is Nothing Then
If Festivo = SumarDias And Festivos = True Then
POR = POR - 1
End If
End If
Y = Y + 1
SumarDias = SumarDias + 1
Next POR
Día = DatePart("w", SumarDias)
If (Día = 1 And Domingos = True) Then SumarDias = SumarDias + 1
If (Día = 7 And Sábados = True) Then SumarDias = SumarDias + 2
Bucle:
Set Festivo = Sheets("Festivos").Cells.Find(what:=SumarDias)
If Not Festivo Is Nothing Then
SumarDias = SumarDias + 1
GoTo Bucle
End If
End Function

2. Copiamos este código en el botón o donde vamos a mandar los valores de las variables.

Yo en este caso lo puse para que calcule cuando salga de ingresar un valor en el combobox.

Private Sub ComboBox14_Exit(ByVal Cancel As MSForms.ReturnBoolean)

'Declaras nuevamente las variables.
Dim Fecha As Variant
Dim Días As Integer
Dim Sábados As Boolean
Dim Domingos As Boolean
Dim Festivos As Boolean
Fecha = CDate(TextBox18)
Días = CInt(TextBox22)

'después asigno a el txbox el valor llamndo la función y enviándole laslos valores capturados.
TextBox23 = SumarDias(Fecha, Días, True, True, True)
End Sub

Espero que les sirva, muchas gracias.

Muchas Gracias por la colaboración, ahora tengo una pregunta activa sobre reportes e informes por macro, si sabes del tema, te agradezco tu ayuda.

Respuesta

Ensaya descargando e instalando el manual y ejemplos para Access y Excel del siguiente link:

Encontrará la solución de la pregunta y mucho más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas