DIVISAO COM HORAS
Olá gente, tudo bem?
Seguinte como divido um somatório de horas por um número.
Exemplo:
Tenho um somatório de horas acumulados de 35hs,10min quero dividir por 7, por exemplo
=> 35:10:00 / 7
Se eu usar a função cdate dá erro porque não existe 35hs..então como faço??
Abraços e desde já agradecido!
Gustavo Fássio
Seguinte como divido um somatório de horas por um número.
Exemplo:
Tenho um somatório de horas acumulados de 35hs,10min quero dividir por 7, por exemplo
=> 35:10:00 / 7
Se eu usar a função cdate dá erro porque não existe 35hs..então como faço??
Abraços e desde já agradecido!
Gustavo Fássio
->Transforme o tempo em minutos.
->Divida.
->Transforme novamente para HH:MM
->Divida.
->Transforme novamente para HH:MM
para maior precisão vc pode transformar tudo em segundos....
Horas*3600 + minutos*60 + segundos= tempo total
Horas*3600 + minutos*60 + segundos= tempo total
bom uma função meio complexa mas funciona bem
como dito pelo colega PH1959, o ideal é converter em segundos, e fazer o calculo, então veja se este código ajuda
como dito pelo colega PH1959, o ideal é converter em segundos, e fazer o calculo, então veja se este código ajuda
Function DivideHoras(Valor As String, Divisor As Integer) As String
Dim Tempo() As String
Dim TempoTotalemSegundos As Long
Dim Min As Long, Hrs As Long, Seg As Long
Tempo = Split(Valor, [Ô]:[Ô])
Tempo(0) = CLng(Tempo(0)) * 3600
Tempo(1) = CLng(Tempo(1)) * 60
TempoTotalemSegundos = CLng(Tempo(0)) + CLng(Tempo(1)) + CLng(Tempo(2))
TempoTotalemSegundos = CLng(TempoTotalemSegundos / Divisor)
Seg = (TempoTotalemSegundos Mod 3600) Mod 60
Min = ((TempoTotalemSegundos - Seg) / 60) Mod 60
Hrs = (TempoTotalemSegundos - Min) / 3600
DivideHoras = Format(CStr(Hrs & [Ô]:[Ô] & Min & [Ô]:[Ô] & Seg), [Ô]hh:mm:ss[Ô])
End Function
Private Sub Command1_Click()
MsgBox DivideHoras([Ô]35:10:00[Ô],7)
End Sub
Olá Marcelo, estava indo tudo bem até que deparei com um problema...
Testa ai pra você ver:
Ele deveria retornar 00:37:30 e está retornando 01:37:30
Porque será??
Abraços e desde já agradecido!
Gustavo Fássio
Testa ai pra você ver:
Private Sub Command1_Click()
MsgBox DivideHoras([Ô]01:15:00[Ô],2)
End Sub
Ele deveria retornar 00:37:30 e está retornando 01:37:30
Porque será??
Abraços e desde já agradecido!
Gustavo Fássio
outra correção
abraços
Function DividirHoras(Valor As String, Divisor As Integer) As String
If Divisor > 1 Then
Dim Tempo() As String
Dim TempoTotalemSegundos As Long
Dim Min As Long, Hrs As Long, Seg As Long
If CLng(Split(Valor, [Ô]:[Ô])(0)) > 1 Then
Tempo = Split(Valor, [Ô]:[Ô])
Tempo(0) = CLng(Tempo(0)) * 3600
Tempo(1) = CLng(Tempo(1)) * 60
TempoTotalemSegundos = CLng(Tempo(0)) + CLng(Tempo(1)) + CLng(Tempo(2))
TempoTotalemSegundos = CLng(TempoTotalemSegundos / Divisor)
Seg = (TempoTotalemSegundos Mod 3600) Mod 60
Min = ((TempoTotalemSegundos - Seg) / 60) Mod 60
Hrs = (TempoTotalemSegundos - Min) / 3600
DividirHoras = Format(CStr(Hrs & [Ô]:[Ô] & Min & [Ô]:[Ô] & Seg), [Ô]hh:mm:ss[Ô])
Else
Dim tmp As Date
tmp = CDate(Valor) / Divisor
DividirHoras = Format(tmp, [Ô]hh:mm:ss[Ô])
End If
Else
DividirHoras = Valor
End If
End Function
abraços
Eu num quero somente valores positivos não, a função que estava fazendo a conta errada quando era para dividir por 1, mas vc solucionou com a alteração que fez.
Tópico encerrado , respostas não são mais permitidas