Vba access extraer hora de un numero decimal

quisiera convertir un numero decimal a horas y minutos. Estoy calculando con horas y las tengo pasadas a un numero decimal y el resultado lo quiero pasar a hh:nn

n= 1,67

1 respuesta

Respuesta
1

No dices si está en un formulario, informe, etc. Pero si tengo un formulario

Los cuadros de texto se llaman como aparece en las etiquetas.

Si pulso el botón(ya que no sé en que evento quieres que se ejecute)

El código del botón es

Private Sub Comando19_Click()
Horas = Int([Decimal] * 24)
Minutos = Format(Int(((Decimal * 24) - Horas) * 60), "00")
Resumen = Int([Decimal] * 24) & ":" & Format(Int(((Decimal * 24) - Int([Decimal] * 24)) * 60), "00")
End Sub

Es decir, primero multiplica el numero por la cantidad de horas que hay en un día y a eso se le saca la parte entera, que son las horas. Luego se restan para obtener la parte decimal, que son los minutos. Esa parte la multiplicamos por 60 y tenemos los minutos. Luego sólo hay que darle el formato.

Entonces, si quieres que sólo aparezcan el número decimal y el "resumen", en el código borra lo de hora= y minutos=

Hola Julián González Cabarcos

Es un programa que estoy haciendo en vba. Tengo calculada las horas en un numero decimal en una variable pero a la hora de pasar la variable a horas y minutos. No logro que me devuelva una hora correcta.

He aplicado tu código pero tu tienes separadas las horas y los minutos. Yo lo tengo en una variable y los tengo que separar para luego convertirlos en hora y minutos.

dim num as double, hh as integer, nn as integer, hhnn as date

num=1,67

hh=?

nn=?

hhnn= Format((TimeValue(hh & ":" &  nn )), "hh:mm:ss")

Muchas gracias por tu ayuda

Porque en el resultado que salen cuarenta horas? debería ser como mucho dos horas. 1,67  lo he obtenido de de la resta de dos variables que contienen horas. Pongo un ejemplo.

1,67 = 8 - 6,33


Hola Julián González Cabarcos

He encontrado este código que me devuelve el la hora y minutos que estaba buscando.

Dim h As Double
h = 1.67

Dim nHour As Integer
Dim nMinutes As Integer
Dim nSeconds As Integer

nHour = Int(h)
nMinutes = Int((h - nHour) * 60)
nSeconds = Int(((h - nHour) * 60 - nMinutes) * 60)
DecHour = nHour & ":" & nMinutes & ":" & nSeconds

' DecHour  devuelve = 1:40:11

Como muchas gracias como siempre. Me has ayudado muchísimo y con excelentes resoluciones. Un saludo

Vamos a ver si me explico. Cuando te decía que la parte entera de un numero equivale a los días. Por ejemplo, en este momento en que escribo, las 21:30 realmente es

43726,89672454

La parte entera corresponde a los días transcurridos desde el 01/01/1900 hasta hoy y la parte decimal son las horas minutos, segundos...

Si le dices en una variable, cuadro de texto, lo que sea que el valor es 1,67, el ordenado entiende que le estás diciendo que es un día de 24 horas más 0,67 de día. Por eso multiplico por 24. Por eso salen 40 horas. La parte decimal que queda después de multiplicar todo por 24 son los minutos y segundos, que son los decimales de hora, por eso lo multiplico por 60.

Si tengo el formulario

y pulso el botón donde, simplemente, sin tanto dim etc le pongo

Private Sub Comando19_Click()
Dim num As Single, hh As Byte, nn As Byte
num = 1.67
Resumen = Int(num * 24) & ":" & Format(Int(((num * 24) - Int(num * 24)) * 60), "00")
End Sub

Que diga quien lo diga son las horas y minutos que corresponden a 1,67

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas