DIVISAO COM HORAS

GFASSIO 21/10/2010 09:01:12
#355586
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

ASHKATCHUP 21/10/2010 09:52:43
#355590
->Transforme o tempo em minutos.
->Divida.
->Transforme novamente para HH:MM
PH1959 21/10/2010 10:12:39
#355591
para maior precisão vc pode transformar tudo em segundos....
Horas*3600 + minutos*60 + segundos= tempo total
MARCELO.TREZE 21/10/2010 10:18:58
#355592
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


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



GFASSIO 25/10/2010 14:01:25
#355830
Olá Marcelo, estava indo tudo bem até que deparei com um problema...

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
GFASSIO 25/10/2010 14:23:29
#355837
outra correção

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
GFASSIO 25/10/2010 14:41:00
#355843
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