Necesito calcular "Fecha Inicial (A1)+ $Días$ = 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 fórmula 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 fórmula 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


Muchas Gracias por su atención.

Añade tu respuesta

Haz clic para o