entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Tengo en Access una función con la que convierto en horas una serie de minutos registrados en las tablas:

'Convierto minutos en horas
Function CalculoHHMM(intMinutos As Integer) As Date
CalculoHHMM = intMinutos \ 60 & ":" & Format((Abs(intMinutos Mod 60)), "00")
End Function    

El problema es que cuando la suma de minutos es superior a 24 horas (1440 minutos) me devuelve un error. Necesito una función que me permita trabajar con un sumatorio de horas, sean las que sean.

¿Alguna ayuda?

Gracias.

2 Respuestas

0voto

dogwall Puntos290

Pues si Yuki, esta mañana me he dado cuenta de que variando muy poco la primera función podría haberlo sacado. No obstante dejo la función definitiva:

Function ConvertirMinutos(Minutos As Integer) As String
m = Minutos Mod 60
h = (Minutos - m) / 60
ConvertirMinutos = h & ":" & Format(m, "00")
End Function

Gracias por la ayuda y comentarios.

0voto

Peter comentado

Si esta es la solución, por favor selecciona la respuesta como correcta.

Saludos.

2votos

Yuki Puntos610

No se programar en Access, pero me parece que deberia quedar asi:

'Convierto minutos en horas
Function CalculoHHMM(intMinutos As Integer) As Date
intMinutos = Abs(intMinutos Mod 1440)
CalculoHHMM = intMinutos \ 60 & ":" & Format((Abs(intMinutos Mod 60)), "00")
End Function

Haciendo que intMinutos nunca sobrepase el valor de 1440 (24 horas).

Espero haberte ayudado, Saludos!

0voto

dogwall comentado

Acabo de probarlo y, aunque ahora no da error, el contador de horas vuelve a cero una vez pasadas las 24h:

?CalculoHHMM(1440)
0:00:00 

Otro ejemplo:

?CalculoHHMM(1526)
1:26:00 

Gracias por tu ayuda, al menos ahora no tira un error :)

0voto

Yuki comentado

Creo que el contador de hora vuelva a cero es lo correcto, ¿Necesitas que el contador devuelva otro valor?

0voto

dogwall comentado

Necesito que si tengo 1441 minutos, me devuelva 24:01. Si tengo 1535 minutos me devuelva 25:35.

Lo siento si no me expliqué bien desde un primer momento, pero lo que necesito es eso.

Gracias.

0voto

Yuki comentado

Ya veo, pero necesito que entiendas que el horario 24:01 y 25:35 o cualquier horario mayor a 24:00 no existe, por otra parte. si necesitas obligatoriamente un horario mayor a las correspondientes 24 horas, solo debes modificar el valor "1440" de la siguiente línea de código.

intMinutos = Abs(intMinutos Mod 1440)

A uno mayor hasta alcanzar el horario que necesites.

Te recomiendo la siguiente pagina para convertir minutos a otros tipos de tiempo.

http://www.convertworld.com/es/tiempo/Minutos.html

¡Saludos!

0voto

dogwall comentado

Si, entiendo que no existe la hora 24:01. Yo lo que necesito es una función que me sume el total de minutos que hay en varios registros y me los convierta en horas y minutos. Si mañana saco el informe y veo que el acumulado en minutos es de 1535 podré decir que, en lugar de 1535 minutos en partes de trabajo, hay 25 horas y 35 minutos de trabajo, que es lo que realmente quiero llegar.

Ayer estuve un rato probando y me salió ésto:

Function Minutillos(Minutes As Integer) As String

 Dim Dias As Integer

 Dias = Int(([Minutes] \ 60) \ 24)

 If Dias < 1 Then

 Minutillos = Format(([Minutes] \ 60) Mod 24, "00") & ":" & Format([Minutes] Mod 60, "00")

 Else

 Diitas = Int(([Minutes] \ 60) \ 24) * 24
 Horitas = ([Minutes] \ 60) Mod 24
 Minutitos = Format([Minutes] Mod 60, "00")
 HorasFin = Format((Horitas + Diitas), "00")
 Minutillos = HorasFin & ":" & Minutitos

 End If

El problema, que Minutillos es tipo String, aunque realmente no se si en un informe habría algún problema con eso.

Seguramente no sea la mejor solución pero de momento es lo único que se me ocurre.

1voto

Yuki comentado

Ya entendí lo que quieres hacer, disculpar por mi mal interpretación, no sabria muy bien como ayudarte.
pero te recomendaria que para evitar tanto código, utilices el código que yo te respondi anteriormente y apliques la recursividad.

Por otra parte, tu primer código deberia servir muy bien para lo que quieres hacer, solo deberias cambiar el tipo de dato de retorno de tu función de date a Integer por ejemplo.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta