Necesito calcular Fecha Final en día hábil

La fórmula de basa en "Fecha inicial (A1)+ $Días$ = Fecha Final en día hábil"

Necesito como resultado una fecha hábil, de decir que excluye los fines de semanas y los días feriados.

Necesito un macro que no me colapse la computadora.

(Tabla delimitada por punto y coma)

0;A;B;C;D;E;F
1;Fecha inicial;Fecha en día hábil;Feriados;Días;Resultado
normal;
2;Jueves, 10/01/2013;Viernes, 08/02/2013;Martes, 01/01/2013;29;Viernes,
08/02/2013;A2+$D2$
3;Viernes, 11/01/2013;Viernes, 08/02/2013;Lunes, 11/02/2013;;Sábado,
09/02/2013;A3+$D2$
4;Sábado, 12/01/2013;Viernes, 08/02/2013;Martes, 12/02/2013;;Domingo,
10/02/2013;A4+$D2$
5;Domingo, 13/01/2013;Viernes, 08/02/2013;Jueves, 28/03/2013;;Lunes,
11/02/2013;A5+$D2$
6;Lunes, 14/01/2013;Viernes, 08/02/2013;Viernes, 29/03/2013;;Martes,
12/02/2013;A6+$D2$
7;Martes, 15/01/2013;Miércoles, 13/02/2013;Martes, 16/04/2013;;Miércoles,
13/02/2013;A7+$D2$
8;;;Miércoles, 01/05/2013;;;
9;;;Lunes, 24/06/2013;;;
10;;;Viernes, 05/07/2013;;;
11;;;Miércoles, 24/07/2013;;;
12;;;Sábado, 12/10/2013;;;
13;;;Martes, 24/12/2013;;;
14;;;Miércoles, 25/12/2013;;;
15;;;Martes, 31/12/2013;;;
16;;;Miércoles, 01/01/2014;;;

Tengo un macro que hace parte del trabajo que necesito, pero tengo una formula muy extensa y esto causa que la computadora se quede super lenta.

Mi formula utiliza la formula "SI" Y "DIASEM", aparte del macro.

"DIASEM" la uso para que me diga que dia es "A2+$D2$" y de ser domingo (7), le digo que resto 2 días "A2+$D2$-2", o de ser sábado (6), le digo que reste 1 día "A2+$D2$-1", pero en caso que no sea ni sábado y domingo, simplemente que me de cómo resultado "A2+$D2$", todo esto usan como formula base "SI" quedando de la sig. Manera:
"SI(DIASEM(A2;1)=7;A2+$D2$-2;SI(DIASEM(A2;1)=6;A2+$D2$-1;A2+$D2$))"

Pero tenía que tomar en cuenta que la fecha que me dio con la formula anterior no esté en la columna "C:C" donde voy a cargar los feriados del años y para esto use un macro que encontré en esta web, pero como su resultado para verdadero es decirme en que celda está ubicada la fecha y para falso es cero, teniendo que usar nuevamente la formula "SI"

Adjunto formula final y macro.

si(diasem(si(si(buscarfecha(c:c;si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1))=0;"falso";"verdadero")="falso";si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1);si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1)-1);2)=6;si(si(buscarfecha(c:c;si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1))=0;"falso";"verdadero")="falso";si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1);si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1)-1)-1;si(diasem(si(si(buscarfecha(c:c;si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1))=0;"falso";"verdadero")="falso";si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1);si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1)-1);2)=7;si(si(buscarfecha(c:c;si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1))=0;"falso";"verdadero")="falso";si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1);si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1)-1)-2;si(si(buscarfecha(c:c;si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1))=0;"falso";"verdadero")="falso";si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1);si(si(buscarfecha(c:c;a2+$d2$)=0;"falso";"verdadero")="falso";a2+$d2$;a2+$d2$-1)-1)))

MACRO

Public Function BUSCARFECHA(InputRange As Range, val As
Date)
Dim cl As Range
Application.Volatile
On Error Resume Next
For Each cl In InputRange
If cl.Value = val Then
BUSCARFECHA = cl.Address
End If
Next cl
On Error GoTo 0
End Function

2

2 respuestas

Respuesta
1

Te anexo un archivo con la función para calcular el día hábil.
https://www.dropbox.com/s/rxdltptsaxae81p/dias_hab%20function2.xlsm[url=https://www.dropbox.com/s/rxdltptsaxae81p/dias_hab%20function2.xlsm]
Prueba y me comentas
Saludos. DAM
Si es lo que necesitas, por favor, podrías finalizar la pregunta. Gracias[/url]

Hola. Ya me habías mandado ese archivo y no funciona. Esta dañado.

A parte no obtengo el resultado que quiero.

Este archivo es el dia_hab_function2, es otra versión y funciona para el ejemplo que pusiste, dame un correo y te lo envío.

O sigue este ejemplo

Sigue las Instrucciones para una Función
1. Abre tu hoja de excel
2. Para abrir VBa y poder pegar la función, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la función
5. En cualquier celda utiliza la función, como cualquier otra función de excel

Function dias_hab(fi As Date, n As Integer, inhabiles As Range)
'Por.DAM
ff = fi + n
Select Case Weekday(ff)
    Case 1: ff = ff - 2
    Case 7: ff = ff - 1
End Select
Do While True
    Set s = inhabiles.Find(Format(ff, "dd/mm/yyyy"))
        If Not s Is Nothing Then
            ff = ff - 1
            Select Case Weekday(ff)
                Case 1: ff = ff - 2
                Case 7: ff = ff - 1
            End Select
        Else
            Exit Do
        End If
    Set s = Nothing
Loop
dias_hab = ff
End Function

INSTRUCCIONES SOBRE LA FUNCIÓN, DÍAS HÁBILES DIAS_HAB( ) :
Calcula la fecha final, en base a una fecha inicial y sumando una cantidad de días.
DIAS_HAB(Fecha inicial, número de días, días inhábiles)
Fecha inicial: Es la fecha de inicio, puede ser una fecha o una celda que contenga una fecha.
Número de días: Es la cantidad de días que se van a sumar a la fecha inicial para calcular la fecha final, puede ser un número o una celda que tenga un número
Días inhábiles: Rango de celdas que tienen los días inhábiles.

En A1 pon tu fecha inicial

En B1 pon la función

=dias_hab(A1,13,$C$2:$C$9)

En C2 a C9, pon tus días inhábiles

Prueba y me comentas, Si no es lo que necesitas, envíame tu archivo con los ejemplos de lo qué tú pones y de lo que esperas como resultado, envíame varios ejemplos, con días inhábiles, con sábados y domingos, para entender bien qué es lo que necesitas.

Saludos. DAM

Respuesta

No es neceario complicar tanto las cosas, con algo de VBA se puede hacer muchas cosas con días hábiles.

Ninguna de las repuestas en la más acertada. Descargue e instale 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