VBA – Converter números para horas (Ex: 2,5 para 2:30)

Como no Access a exibição de horas é limitada (só vai até 23:59), é uma prática comum usar números Single nos cálculos. A exibição nos relatórios, porém, precisa ser no formato de horas.


Para converter um número Single para uma String no formato de horas, a seguinte função pode ser usada:


 


‘**************************************************
‘Módulo escrito por Luiz Cláudio C. V. Rocha
‘Data: 20/3/2001
‘Funções para se trabalhar com horas acima de 24h
‘************************************************** 


Public Function HrStr(dblHora As Double) As String
‘Pega um valor numérico e o converte para Horas/Minutos
‘Ex: 123,5 = “123:30″
‘Ex: 23,9833333333333 = “23:59″


Dim strHoras As String
Dim strMinutos As String


‘Pega as horas (parte inteira)
strHoras = CStr(Fix(dblHora))


‘Pega os minutos
strMinutos = Format$(Abs((dblHora – Fix(dblHora)) * 60), “00”)


‘Verifica se o total de minutos é 60
If strMinutos = “60” Then
strMinutos = “00”
strHoras = CStr(CDbl(strHoras) + 1)
End If


‘Concatena os dois
HrStr = strHoras & “:” & strMinutos


End Function


Esta outra função faz o contrário: pega um string no formato de horas e converte para número:


Public Function HrDbl(stHora As String) As Double
‘Converte um string de hora (formato (h)hh:mm) para Double
‘Ex: “135:30″ = 135,5
‘Ex: “23:59″ = 23,9833333333333
Dim dblHoras As Double
Dim intMinutos As Integer
Dim blnDoisPontos As Boolean, blnNum As Boolean
Dim strNum As String


‘Verifica se o sinal de dois pontos ‘:’ está na terceira casa
‘da direita para esquerda
If Asc(Left(Right(stHora, 3), 1)) = 58 Then
    blnDoisPontos = True
Else
    blnDoisPontos = False
End If


‘Verifica se o resto dos dígitos são numéricos
strNum = Left(stHora, Len(stHora) – 3) & Right(stHora, 2)
If IsNumeric(strNum) = True Then
    blnNum = True
Else
    blnNum = False
End If


‘Sai do procedimento se o formato estiver incorreto
If (blnDoisPontos = False) Or (blnNum = False) Then
    MsgBox “Informe a hora no formato hh:mm”, vbCritical + vbOKOnly
    Exit Function
End If


‘Pega os minutos
If CDbl(strNum) < 0 Then
    intMinutos = CInt(Right(strNum, 2)) * (-1)
Else
    intMinutos = CInt(Right(strNum, 2))
End If


‘Pega as horas
dblHoras = Fix(CDbl(Left(strNum, Len(strNum) – 2)))


‘Calcula a hora
HrDbl = dblHoras + (intMinutos / 60)


End Function


Anexei um exemplo mostrando como usar. 

5 thoughts on “VBA – Converter números para horas (Ex: 2,5 para 2:30)”

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>