Funciones En Excel

Buenos días,
Estoy haciendo una función que no me sale, os la explico:
Dada una Hora Inicio y Hora Fin (hh:mm:ss) me tiene que devolver algunos valores. (Ejemplo)
- Datos que le paso a la función:
Hora Inicio: 25/04/2004 16:00:00
Hora Fin: 26/04/2004 00:00:00
- Datos que me tiene que devolver la función:
Horas Diurnas (de 08:00:00 a 22:00:00): 6
Horas Nocturnas (de 22:00:00 a 08:00:00): 2
Horas Festivas (Domingo): 0
Os pongo otro ejemplo para que lo veais más claro:
- Datos que le paso a la función:
Hora Inicio: 24/04/2004 17:30:00
Hora Fin: 25/04/2004 01:30:00
- Datos que me devuelve la función:
Horas Diurnas: 4,5
Horas Nocturnas: 3,5
Horas Festivas: 1,5
Pues a mi no se me ocurre como hacerlo!
Si alguien me puede ayudar, estaría agradecido!
Un saludo, Mr|Dr3aM.

1 Respuesta

Respuesta
1
Lo que veo es lo siguiente:
- La idea es que las variables de entrada deben ser solo las fechas (y horas) de inicio y fin, las demás son variables de salida, que no van en el encabezado de la función, entonces debería ser:
Public Function CalculaHora(FechaInicio As String, FechaFin As String)
- Por otro lado, me parece que necesitas que la función te devuelva tres valores diferentes, Horas Diurnas, Horas Nocturnas y Horas Festivas, por lo que tienes un problema, y es que en una celda sólo puedes tener un valor, a menos que lo coloques como texto (que no me parece funcional ya que posiblemente lo necesitarás para hacer cálculos).
- Por lo anterior, creo que deberías tener tres funciones diferentes y calcular cada dato en una celda diferente.
- Te recomiendo incluir esta línea en tu código:
MsgBox (FechaInicio & " - " & FechaFin)
Colócala al inicio, después de declarar tus variables, con el fin de que veas cómo están ingresando los datos a tu función y te sirva para hacer las fórmulas.
- Finalmente, el final de tu función debe ser el valor que se devolverá es decir el mismo nombre de la función, algo así como:
CalculaHora = HorasDiurnas
Sigue trabajando en ello, vas muy bien y seguro vas a aprender mucho de este problema.
Buenas tavopz,
Esto es lo que llevo hecho de la función, pero no funciona correctamente... te pego el código para que lo veas:
Sub CalculaHoras(FechaInicio As String, FechaFin As String, TotalHoras As Long, HorasDiurnas As Long, HorasNocturnas As Long)
Dim Dias As Integer
Dim Horas1 As String
Dim Horas2 As String
Dim Min1 As String
Dim Min2 As String
Dim Fecha1 As String
Dim Fecha2 As String
Fecha1 = Mid(FechaInicio, 1, 2)
Fecha2 = Mid(FechaFin, 1, 2)
Dias = Val(Fecha2) - Val(Fecha1)
Horas1 = Mid(FechaInicio, 12)
Horas2 = Mid(FechaFin, 12)
Min1 = Mid(Horas1, 4)
Min2 = Mid(Horas2, 4)
Horas1 = Mid(Horas1, 1, 2)
Horas2 = Mid(Horas2, 1, 2)
If Horas2 = "00" Then
Horas2 = "24"
End If
If Horas1 = "00" Then
Horas1 = "24"
End If
If Dias < 1 Then
TotalHoras = (Val(Horas2) - Val(Horas1)) + (Val(Min2) - Val(Min1))
Else
TotalHoras = (24 - Val(Horas1) + Val(Horas2)) + (Val(Min2) - Val(Min1))
End If
HorasDiurnas = 22 - (Val(Horas1) + Val(Min1))
HorasNocturnas = TotalHoras - HorasDiurnas
End Sub
Haber si me puedes echar una manita, y gracias por el interés que estás mostrando en la pregunta.
Un saludo, Mr|Dr3aM
Creo que lo puedes hacer sólo con funciones de excel, sin necesidad de hacer macros, si quieres dame tu correo y te mando un ejemplo que puedes utilizar.
Buenas Tavopz,
Mi correo es( [email protected] ) Espero tu ejemplo
Gracias
Listo.
Ya te lo envié, si te sirve por favor finaliza la pregunta, sino, me lo haces saber para buscar otra solución.
Buenas Tavopz,
La solución es muy buena, ¿pero podría hacerse en una función? Te explico.
El caso es que io tengo una hoja excel con un dimensionamiento de Técnicos (horarios) entonces tengo:
Hora Inicio Hora Fin Horas Diurnas Horas Nocturnas Festivas
16:00 00:00 6 2 0
Así con muchas filas y quisiera hacer una macro que recorriera todas las filas y te calculara lo que tu me pusiste en el libro, si se puede hacer en una función seria lo mejor,
Un saludo espero tu respuesta para finalizar la pregunta (que tendrá un 5)
Se me ocurre hacer una macro (función) que calcule esta información de forma similar a como lo hice con Excel, pero hay alguna información que es más difícil de obtener en VBA, como es el identificar cuándo una fecha es festivo. Por lo demás, simplemente se hace el programa, tomando los datos de las celdas de hora inicio y hora fin (como texto) y se separan los datos que harán cada cosa (es decir, las horas y las fechas), luego se puede hacer lo demás.
Si quieres comienza a trabajar en la función con base en esta información, si tienes problemas para terminarla me avisas y vemos si te puedo ayudar.
Voy a finalizar la pregunta para dejar a los otros usuarios, te agradezco tu ayuda si tengo problemas al hacer la función te buscaré de nuevo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas