Logo Hardware.com.br
Luis Sangy
Luis Sangy Membro Junior Registrado
94 Mensagens 10 Curtidas

[Resolvido] Qual é o código que usa-se para somar apenas os minutos ou somar apenas as horas?

#1 Por Luis Sangy 01/04/2016 - 14:30
Galera boa tarde.

Estou montando um código e gostaria de saber se existe alguma função/comando sei la que eu possa selecionar fazer a soma apenas dos minutos ou das horas de um valor em formato hh:mm?

Exemplo: 8:58 - 9:02 = Quero a soma apenas dos minutos ou horas. Como fazer em vba?
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#2 Por Basole
05/04/2016 - 12:34
Tete isso:

[code=VB]
Sub Teste_Tempo()

MsgBox "Horas: " & Left(Format(VBA.TimeValue(Format("8:58", "hh:mm")) + VBA.TimeValue(Format("9:02", "hh:mm")), "HH:MM"), 2) & vbNewLine & _
"Minutos: " & Right(Format(VBA.TimeValue(Format("8:58", "hh:mm")) + VBA.TimeValue(Format("9:02", "hh:mm")), "HH:MM"), 2)

End Sub

[/code][/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Luis Sangy
Luis Sangy Membro Junior Registrado
94 Mensagens 10 Curtidas
#3 Por Luis Sangy
06/04/2016 - 07:48
Basole disse:
Tete isso:

[code=VB]
Sub Teste_Tempo()

MsgBox "Horas: " & Left(Format(VBA.TimeValue(Format("8:58", "hh:mm")) + VBA.TimeValue(Format("9:02", "hh:mm")), "HH:MM"), 2) & vbNewLine & _
"Minutos: " & Right(Format(VBA.TimeValue(Format("8:58", "hh:mm")) + VBA.TimeValue(Format("9:02", "hh:mm")), "HH:MM"), 2)

End Sub

[/code][/code]

Basole,
Para colocar isso num loop, ficaria como? Deu certinho, porém meus valores de hora irão mudar de linha á linha.
Eu estava testando seu código aqui, a idéia é boa, porém eu não queria isto num msgbox exibindo os dois, eu queria calcular apenas a diferenca de minutos e que essa diferença fosse exibida para mim numa linha na planilha, entende? Neste caso, 9:02-8:58, queria o cálculo apenas da diferença de minutos.
Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#4 Por Basole
06/04/2016 - 09:48
Segue um exemplo com loop:

[code=VB]
Sub Teste_Tempo()
Dim i As Long

For i = 2 To 10 ' onde 2 é a 1ª linha e 10 a ultima linha com dados

If Range("B" & i).Value <> 0 And Range("A" & i).Value <> 0 Then ' Verific. se as celulas conteem valores nulos

Range("C" & i).Value = Format(VBA.TimeValue(Format(Range("B" & i).Value, "hh:mm")) - VBA.TimeValue(Format(Range("A" & i).Value, "hh:mm")), "HH:MM") ' calcula o tempo em min.

Range("C" & i).NumberFormat = "HH:MM" ' Formata a celula p/ Personalizado (horas/Minutos)

End If

Next


End Sub
[/code]
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Luis Sangy
Luis Sangy Membro Junior Registrado
94 Mensagens 10 Curtidas
#5 Por Luis Sangy
06/04/2016 - 11:13
Basole disse:
Segue um exemplo com loop:

[code=VB]
Sub Teste_Tempo()
Dim i As Long

For i = 2 To 10 ' onde 2 é a 1ª linha e 10 a ultima linha com dados

If Range("B" & i).Value <> 0 And Range("A" & i).Value <> 0 Then ' Verific. se as celulas conteem valores nulos

Range("C" & i).Value = Format(VBA.TimeValue(Format(Range("B" & i).Value, "hh:mm")) - VBA.TimeValue(Format(Range("A" & i).Value, "hh:mm")), "HH:MM") ' calcula o tempo em min.

Range("C" & i).NumberFormat = "HH:MM" ' Formata a celula p/ Personalizado (horas/Minutos)

End If

Next


End Sub
[/code]

Basole, funcionou sim.
Agora, dê uma olhada se você consegue me ajudar na 2 parte do progama: Anexei a planilha para melhor entendimento.
O progama deve pegar o intervalo de UMA hora exata (Exemplo: 8 ás 9) e colocar o valor da soma total de minutos que deu de parada na coluna "C" no periodo de 8 as 9. Você teria uma ideia de como posso fazer isso?
Exemplo na planilha:
08:00 08:10
08:20 08:24
08:58 09:02
O meu tempo total de parada no periodo de 8 as 9 foi de 16 minutos, então o progama deveria jogar para a coluna ao lado do periodo 8 as 9 na planilha "hora a hora" este resultado. Caso possa me ajudar! Se não só falar que coloco como resolvido, pois ja ajudou bastante.

Anexos

Basole
Basole Geek Registrado
945 Mensagens 596 Curtidas
#6 Por Basole
06/04/2016 - 14:57
O progama deve pegar o intervalo de UMA hora exata (Exemplo: 8 ás 9)
Exemplo na planilha:
08:00 08:10
08:20 08:24
08:58 09:02

Luis desculpe, mas pra min esta meio confuso, vc diz que quer pegar o intervalo de 1 hora (Exemplo: 8 ás 9), mas analizando o seu exemplo acima, entre o intervalo (08:00 09:02) , ultrapassa de 1 hora (?).
Ta complicado entender este seu criterio.
Click em Curtir se a resposta foi útil. boa.gif Dê retorno por favor. Se resolveu, atencao_regras.gif Altere o Titulo como [ Resolvido ] comemorando.gif
Luis Sangy
Luis Sangy Membro Junior Registrado
94 Mensagens 10 Curtidas
#7 Por Luis Sangy
07/04/2016 - 11:01
Basole disse:
Luis desculpe, mas pra min esta meio confuso, vc diz que quer pegar o intervalo de 1 hora (Exemplo: 8 ás 9), mas analizando o seu exemplo acima, entre o intervalo (08:00 09:02) , ultrapassa de 1 hora (?).
Ta complicado entender este seu criterio.

Este é o X da questão brasole! Como ultrapassou 2 minutos, estes dois minutos devem ser computados no intervalo de 1 hora entre 9 ás 10 horas! Perceba uqe na soma total deu 18 minutos, eu coloquei resultado final =16 por conta disso! Isso que ta me agarrando. se o tempo ultrapassar o intervalo de 1 hora deve ser computado no intervalo da hora seguinte. Entendeu?
osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#9 Por osvaldomp
30/05/2016 - 17:39
Veja se é isso.
Rode o código a partir da planilha "Intervalos"; formate a coluna 'C' da planilha "hora a hora" para Geral.

Sub TempoDeParada()
Dim h As Long, h1 As Long, h2 As Long, m1 As Long
Dim m2 As Long, s As Long, ws As Worksheet
Set ws = Sheets("hora a hora"): ws.Columns(3) = ""
For h = 1 To Cells(Rows.Count, 1).End(3).Row
h1 = Hour(Cells(h, 1)): m1 = Minute(Cells(h, 1))
h2 = Hour(Cells(h, 2)): m2 = Minute(Cells(h, 2))
If h1 = Hour(Cells(h + 1, 1)) Then
s = s + m2 - m1
Else
If h1 = h2 Then
s = s + m2 - m1
ElseIf h2 = h1 + 1 Then
s = s + 60 - m1
End If
If s <> 0 Then ws.Cells(h1 + 1, 3) = s: s = 0
End If
Next h
ws.Range("C1:C24").SpecialCells(xlCellTypeBlanks) = 0
End Sub
Osvaldo
Luis Sangy
Luis Sangy Membro Junior Registrado
94 Mensagens 10 Curtidas
#10 Por Luis Sangy
08/06/2016 - 11:10
osvaldomp disse:
Veja se é isso.
Rode o código a partir da planilha "Intervalos"; formate a coluna 'C' da planilha "hora a hora" para Geral.

Sub TempoDeParada()
Dim h As Long, h1 As Long, h2 As Long, m1 As Long
Dim m2 As Long, s As Long, ws As Worksheet
Set ws = Sheets("hora a hora"): ws.Columns(3) = ""
For h = 1 To Cells(Rows.Count, 1).End(3).Row
h1 = Hour(Cells(h, 1)): m1 = Minute(Cells(h, 1))
h2 = Hour(Cells(h, 2)): m2 = Minute(Cells(h, 2))
If h1 = Hour(Cells(h + 1, 1)) Then
s = s + m2 - m1
Else
If h1 = h2 Then
s = s + m2 - m1
ElseIf h2 = h1 + 1 Then
s = s + 60 - m1
End If
If s <> 0 Then ws.Cells(h1 + 1, 3) = s: s = 0
End If
Next h
ws.Range("C1:C24").SpecialCells(xlCellTypeBlanks) = 0
End Sub

Caraca Osvaldo!! Desculpe a demora para responder. Ja havia desistido! hehehehe Funcionou cara!!!!!!
Teve apenas um pequeno probleminha, no periodo de 00 as 8 am nao computou. Apenas isso! Ficou "0" quando deveria ficar 1 hora

Anexos

Luis Sangy
Luis Sangy Membro Junior Registrado
94 Mensagens 10 Curtidas
#12 Por Luis Sangy
09/06/2016 - 10:48
osvaldomp disse:
Substitua o zero pelo 1 ao final desta linha
ws.Range("C1:C24").SpecialCells(xlCellTypeBlanks) = 1

Show osvaldo! Deu certo!!!
Aproveitando sua ajuda, como faço para invés das respostas serem exibidas naqueles valores inteiros, ficar em formato HH:MM:SS ?

Osvaldo, fiz alguns testes e tá dando algumas divergencias..frown.png Segue planilha pra conferência!

Anexos

osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#13 Por osvaldomp
09/06/2016 - 13:10
No seu arquivo não há qualquer explicação sobre quais são as divergências, qual o resultado do código, qual o resultado que você espera e como chegou a ele.

Luis Sangy disse:
... como faço para invés das respostas serem exibidas naqueles valores inteiros, ficar em formato HH:MM:SS ?


Não vejo sentido em apresentar o resultado que é dado em minutos, com aparência de horário nao_sei.gif

Assim:
máquina desligada às 14h20 >> isto é um horário
máquina religada às 14h25 >> isto também é um horário
tempo de máquina desligada (14h25 - 14h20 ) = 5 min >> isto é tempo, não faz sentido exibi-lo como horário
Osvaldo
Luis Sangy
Luis Sangy Membro Junior Registrado
94 Mensagens 10 Curtidas
#14 Por Luis Sangy
10/06/2016 - 09:40
Osvaldo, foi mal ter deixado essa confusão pra vc auto interpretar da forma que deveria ser.. Estou te mandando o arquivo original que uso todos os dias, nele fica mais facil compreender. Preciso que o formato seja em hora, por causa de uma macro de outro arquivo que puxa esses dados para montagem de gráficos.

Um breve resuminho deste arquivo que estou mandando:
A Aba "Base MTS 100%" contem horarios de paradas durante todo um dia.. Destaquei de amarelo um dia para vc ver melhor. O total de tempo de paradas num certo dia, deve ser o mesmo que eu preencho para o dia equivalente na aba "Paradas" Aonde mostro em 24 horas, num intervalo de Hora em Hora quanto tempo fiquei parado. O que complica é que as vezes os horarios de parada são assim:

Eu começo uma parada ás 12:33 (Ou seja, esse intervalo está entre 12 hr a 13 hr) porém minha parada acaba apenas 13:40
Ou seja, eu tive 27 minutos de parada entre 12-13 hrs e também tive + 40 minutos de parada já no intervalo de 13-14 hrs. Se voce analisar na planilha, na aba "Base Mts 100%" aonde destaquei de vermelho, verá tbm que eu ja tinha outros 2 campos com paradas no intervalo de 12-13 hrs. Ou seja, o que eu faço atualmente que gostaria que fosse um progama, é examente isso, somar o tempo de parada num intervalo de 1 hr, porém atento para nao perder minutos que começaram entre um intervalo e só acabaram em outro intervalo de hora. Deu pra esclarecer um pouco?

Anexos

osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#15 Por osvaldomp
10/06/2016 - 16:41
Luis, no post #5 você disponibilizou uma amostra do seu arquivo e no post #9 eu coloquei um código sugerido para atuar naquele arquivo.

Então, antes de tratar do arquivo do seu post #14, que é diferente do anterior, vamos finalizar a análise sobre a atuação do código no primeiro arquivo, citado acima. Por favor me informe se o código fornece ou não resultado conforme esperado. Se há divergências no resultado no arquivo do post #5 rode o código nele, cujo resultado aparece na coluna 3, e na coluna 4 coloque o resultado que você entende como correto e explique na coluna 5 como chegou em cada resultado e disponibilize o arquivo.
Osvaldo
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal