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.

Peter comentado Junio 24, 2015

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!

dogwall comentado Junio 23, 2015

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 :)

Yuki comentado Junio 23, 2015

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

dogwall comentado Junio 23, 2015

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.

Yuki comentado Junio 23, 2015

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!

dogwall comentado Junio 23, 2015

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.

Yuki comentado Junio 24, 2015

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 ingresa o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

  • steven ganó una medalla hace 10 horas

    Veterano - Primera visita hace más de 180 días
  • leog.1992 ganó una medalla hace 1 día

    Renovador - Received Buena Respuesta badge in resp…
  • leog.1992 ganó una medalla hace 1 día

    Medallista - Received total of 10 badges
  • leog.1992 ganó una medalla hace 1 día

    Buena Respuesta - Recibido +1 votos en respuesta
  • sagrario ganó una medalla hace 1 día

    Buena Pregunta - Recibido +1 votos en pregunta
  • leog.1992 respondió hace 1 día

    ticket en java con mysql
  • leog.1992 ganó una medalla hace 1 día

    Antepasado - Primera visita hace más de 365 días
  • leog.1992 ganó una medalla hace 1 día

    Veterano - Primera visita hace más de 180 días
  • Leonardo-Tadei ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • nico140 ganó una medalla hace 3 días

    Buena Pregunta - Recibido +1 votos en pregunta

¿Eres Usuario Apple?

...

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

Conecta