Función que calcula fecha y hora final, marca error

Para "Dante Amor"

La formula que estoy ejecutando en excel es:

=SI((RESIDUO(H20/((H3-H2)*24),1)*(H3-H2)+VALOR.NUMERO(DECIMAL(RESIDUO(H5,1),8)))>=H3,DIA.LAB(DIA.LAB(H5,ENTERO(H20/((H3-H2)*24)),H9:H10),1,H9:H10)+H2-H3,DIA.LAB(H5,ENTERO(H20/((H3-H2)*24)),H9:H10))+RESIDUO(H20/((H3-H2)*24),1)*(H3-H2)+RESIDUO(H5,1)

Dentro de excel esta funcionando correctamente las variables son:

H2 - Es la hora inicial de un turno de trabajo; 08:00:00
H3 - Es la hora final de un turno de trabajo; 20:00:00
H5 - Representa la hora de una fecha especifica; 29/09/2015 11:35:15
H20 - Representa el tiempo que tardaré en dar solución al problema en horas; 35
H9:H10 - Un rango variable que representa los días de vacaciones en un rango en formato de fecha

Siguiendo tus ejemplos de las otras funciones realice la función correspondiente de la siguiente manera:

Function CalculaFecha2(hini As Range, hfin As Range, fini As Range, hora As Range, rvac As Range)
'Por.Dante Amor
    h2 = hini.Address
    h3 = hfin.Address
    h5 = fini.Address
    hr = hora.Address
    br = rvac.Address
    rdo = Evaluate("=IF((" Mod (" & hr & " / ((" & h3 & " - " & h2 & ") * 24)), 1) * (" & h3 & " - " & h2 & ") + " & _
    "NUMBERVALUE(FIXED(MOD("& h5 & ",1),8)))>= " & h3 ", " & _
    "WORKDAY(WORKDAY(" & h5 & "," & _
    "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "),1," & br & ")+" & h2 & "-" & h3 & ", " & _
    "WORKDAY(" & h5 & ", "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "))+" & _
    "INT(" & hr & "/((" & h3 & "-" & h2 & "))*24),1)*(" & h3 & " - " & h2 & ")+" & _
    "MOD(" & h5 & ",1)
     CalculaFecha2 = rdo
End Function

Pero desde el editor de VBA me pone en rojo el codigo a partir de NUMBERVALUE y no logro identificar el código incorrecto.

1 Respuesta

Respuesta
1

H o l a:

En teoría debería ser así:

Function CalculaFecha2(hini As Range, hfin As Range, fini As Range, hora As Range, rvac As Range)
'Por.Dante Amor
    h2 = hini.Address
    h3 = hfin.Address
    h5 = fini.Address
    hr = hora.Address
    br = rvac.Address
    '
    rd = Evaluate("=IF(MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
         "VALUE(FIXED(MOD(" & h5 & ",1),8)))>=" & h3 & "," & _
         "WORKDAY(WORKDAY(" & h5 & "," & _
         "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "),1," & br & ")+" & h2 & "-" & h3 & "," & _
         "WORKDAY(" & h5 & "," & _
         "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "))+" & _
         "MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
         "MOD(" & h5 & ",1)")
    '
    CalculaFecha2 = rd
End Function

Y digo en teoría porque me regresa un error.

Ya la probé como macro y sí me funciona:

Sub prb2()
'Por.Dante Amor
    h2 = [h2].Address
    h3 = [h3].Address
    h5 = [h5].Address
    hr = [h20].Address
    br = [h9:h10].Address
    '
    [G5] = "=IF((MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
           "VALUE(FIXED(MOD(" & h5 & ",1),8)))>=" & h3 & "," & _
           "WORKDAY(WORKDAY(" & h5 & "," & _
           "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "),1," & br & ")+" & h2 & "-" & h3 & "," & _
           "WORKDAY(" & h5 & "," & _
           "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "))+" & _
           "MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
           "MOD(" & h5 & ",1)"
End Sub

Si pongo la fórmula en una celda sí me realiza el cálculo, pero si pongo la misma fórmula en "Evaluate" no me funciona.

Tal vez la fórmula es demasiado larga. Lo que hice fue separar la fórmula para calcular el resultado.

Entonces la función quedaría así:

Function CalculaFecha3(hini As Range, hfin As Range, fini As Range, hora As Range, rvac As Range)
'Por.Dante Amor
    h2 = hini.Address
    h3 = hfin.Address
    h5 = fini.Address
    hr = hora.Address
    br = rvac.Address
    '
    r1 = Evaluate("=MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
         "VALUE(FIXED(MOD(" & h5 & ",1),8))")
    If r1 >= hfin.Value Then
        r2 = Evaluate("=WORKDAY(WORKDAY(" & h5 & "," & _
             "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "),1," & br & ")+" & h2 & "-" & h3)
    Else
        r2 = Evaluate("=WORKDAY(" & h5 & "," & _
             "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "))")
    End If
    r3 = Evaluate("MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
         "MOD(" & h5 & ",1)")
    r4 = r2 + r3
    '
    CalculaFecha3 = r4
End Function

Los parámetros son los mismos.



' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Hola Dante Amor, he probado como dices la macro y todo esta perfecto, pero la función cuando comienzo a variar las horas me arroja error de valor, la estoy checando y veo todo como la macro, crees que halla algo que modificar esto se da en la función al variar el valor de H20.

Estas utilizando esta función:

CalculaFecha3

Si en efecto, los datos que uso son por ejemplo.

h2 - 08:00:00

h3 - 20:00:00

h5 - 29/04/2016  11:35:25

hr - 39

br - 02/05/2016

       15/05/2016

Y la función definida:

=CalculaFecha3(h2,h3,h5,hr,br)

Listo, había un paréntesis demás en esta parte:

r2 = Evaluate("=WORKDAY(" & h5 & "," & _
             "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "))")

debe ser así:

r2 = Evaluate("=WORKDAY(" & h5 & "," & _
             "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & ")")


Function CalculaFecha3(hini As Range, hfin As Range, fini As Range, hora As Range, rvac As Range)
'Por.Dante Amor
    h2 = hini.Address
    h3 = hfin.Address
    h5 = fini.Address
    hr = hora.Address
    br = rvac.Address
    '
    r1 = Evaluate("=MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
         "VALUE(FIXED(MOD(" & h5 & ",1),8))")
    If r1 >= hfin.Value Then
        r2 = Evaluate("=WORKDAY(WORKDAY(" & h5 & "," & _
             "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & "),1," & br & ")+" & h2 & "-" & h3)
    Else
        r2 = Evaluate("=WORKDAY(" & h5 & "," & _
             "INT(" & hr & "/((" & h3 & "-" & h2 & ")*24))," & br & ")")
    End If
    r3 = Evaluate("MOD(" & hr & "/((" & h3 & "-" & h2 & ")*24),1)*(" & h3 & "-" & h2 & ")+" & _
         "MOD(" & h5 & ",1)")
    r4 = r2 + r3
    '
    CalculaFecha3 = r4
End Function

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

¡Gracias! En verdad muchissisisisismas gracias, te seguiré molestando por aquí pero sobre todo he aprendido muchísimo con tu ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas