Basole
Geek
Registrado
945 Mensagens
596 Curtidas
Luis Sangy
Membro Junior
Registrado
94 Mensagens
10 Curtidas
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
Geek
Registrado
945 Mensagens
596 Curtidas
Luis Sangy
Membro Junior
Registrado
94 Mensagens
10 Curtidas
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
Geek
Registrado
945 Mensagens
596 Curtidas
Luis Sangy
Membro Junior
Registrado
94 Mensagens
10 Curtidas
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?
Luis Sangy
Membro Junior
Registrado
94 Mensagens
10 Curtidas
Se a esperança é a última q morre eu sei q alguem vai me ajudar nesse VBa do capiroto!!! Somebody save meeeeeeeeeee
osvaldomp
Geek
Registrado
753 Mensagens
558 Curtidas
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
Luis Sangy
Membro Junior
Registrado
94 Mensagens
10 Curtidas
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
osvaldomp
Geek
Registrado
753 Mensagens
558 Curtidas
Substitua o zero pelo 1 ao final desta linha
ws.Range("C1:C24").SpecialCells(xlCellTypeBlanks) = 1
Luis Sangy
Membro Junior
Registrado
94 Mensagens
10 Curtidas
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.. Segue planilha pra conferência!
Anexos
osvaldomp
Geek
Registrado
753 Mensagens
558 Curtidas
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.
... 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
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
Luis Sangy
Membro Junior
Registrado
94 Mensagens
10 Curtidas
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
Geek
Registrado
753 Mensagens
558 Curtidas
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.