Usuário com melhor resposta
Condição usando minutos

Pergunta
-
Amigos bom dia.
Necessito agrupar resultados por turno de atividade. As células estão formatadas com o formato de hora.
De 07:00 a 15:00 1º turno
De 15:01 a 23:00 2º turno
De 23:01 a 06:59 3º turno
Pensei em algo do tipo
If Cells(x, 2) > 07:00:00 And Cells(x, 2) < 15:00:00 Then
Mas não deu, pq o editor não entede esses ":" Como eu faço?
Obrigado.
Respostas
-
Caros, n deu cara. Nem de um jeito nem do outro. Não sei pq. Pra matar a macro, só falta essa formatação da hora.
Pedro,
Provavelmente isto está acontecendo porque os valores (data-hora) exportados pelo programa para a planilha Excel sejam Texto e não datas.
Para testar, tente em uma célula vazia essa fórmula (supondo que B4 é uma das células com data-hora)
=ÉNÚM(B4)
Nos diga o que a fórmula retorna (VERDADEIRO ou FALSO?)
M.
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator segunda-feira, 4 de julho de 2016 14:07
Todas as Respostas
-
-
Cara não deu. Esta passando todos os horários na condição. Tipo menor que 7 horas está passando também.
E outra nã sei pq meu vba não está validando nenhum if que usa o duas condições.
Com uma condição deu certo agora quando coloco o and não vai. isso ocorre em todas as minhas macros.
- Editado Pedro Ernesto de Oliveira e Mattos quarta-feira, 18 de maio de 2016 13:03
-
Pedro
Eu fiz um teste e funcionou perfeitamente para mim.
Não entendo porque não funciona para você o And - nunca ouvi falar em tal erro.
Em todo caso, para contornar, você vode "aninhar" os IFs, algo assim
If Cells(x,2)>=DateSerial(7,0,0) Then If Cells(x,2) <= DateSerial(15,0,0) Then
Feio, mas deve funcionar
M.
-
Cara não deu. Está passando todos todas as horas.
Vou postar o código inteiro.
Sub tempo_descarga() Dim i, corrente, c1, c2 As Double Dim t1, t2 As Double Dim temp As Double Dim hora As Integer For x = 4 To 50000 If Cells(x, 2) = "" Then Exit For If Cells(x, 3) > 21 Then t1 = Cells(x, 2) t2 = Cells(x + 1, 2) temp = t2 - t1 Cells(x, 4) = temp If Cells(x, 2) >= DateSerial(7, 0, 0) Then If Cells(x, 2) <= DateSerial(15, 0, 0) Then Cells(x, 6) = "Certo" End If End If Next End Sub
Não sei o que possa está acontecendo. A coluna 2 (onde é está as horas)está formatado no formato (hh:mm:ss).
Nem aninhando os IF's está passando. kkkkkkk Quando comento um IF ai passa.
Excel está usando drogas só pode hehehehh
Valeu cara.
-
Pedro,
Coloquei esses valores (hh:mm:ss) em B2:B4
05:10:20 17:05:23 08:00:00 Rodei este código
Sub aTest() Dim x As Long For x = 2 To 4 If Cells(x, 2) >= TimeSerial(7, 0, 0) And Cells(x, 2) <= TimeSerial(15, 0, 0) Then Cells(x, 6) = "1o turno" ElseIf Cells(x, 2) >= TimeSerial(15, 0, 1) And Cells(x, 2) <= TimeSerial(23, 0, 0) Then Cells(x, 6) = "2o turno" Else Cells(x, 6) = "3o turno" End If Next x End Sub
Os resultados em F2:F4 foram
3o turno 2o turno 1o turno Que me parecem super corretos!
Uma pergunta: você está usando um computador MAC ou um PC (Windows)?
M.
- Editado mcbranco quarta-feira, 18 de maio de 2016 13:56
-
-
-
Descobri porque que não estava entrando:
A Celula estava formatada em hora. mas o valor dela estava com data e hora. Tipo dd/mm/aaaa hh:mm:ss
Apaguei a data e funcionou.
Exporto essa data a partir do MyLims e ele me retorna dessa maneira O ruim é que tenho que excluir todos as datas e deixar somente os horarios. Ou existe outra forma?
-
De curiosidade, pode tentar com o código abaixo?
Sub aTest() Dim x As Long For x = 2 To 4 If Cells(x, 2).Value2 >= TimeSerial(7, 0, 0) And Cells(x, 2).Value2 <= TimeSerial(15, 0, 0) Then Cells(x, 6) = "1o turno" ElseIf Cells(x, 2).Value2 >= TimeSerial(15, 0, 1) And Cells(x, 2).Value2 <= TimeSerial(23, 0, 0) Then Cells(x, 6) = "2o turno" Else Cells(x, 6) = "3o turno" End If Next x End Sub
http://www.ambienteoffice.com.br - http://www.clarian.com.br
-
Pedro,
Se as céluas estão com data-hora no formato dd:mm:aaaa hh:mm:ss como, por exemplo:
B2:B4
18/05/2016 05:10:20
18/05/2016 17:05:23
18/05/2016 08:00:00
Experimente este código
Sub aTest() Dim x As Long, CellTime As Double For x = 2 To 4 CellTime = TimeSerial(Hour(Cells(x, 2)), Minute(Cells(x, 2)), Second(Cells(x, 2))) If CellTime >= TimeSerial(7, 0, 0) And CellTime <= TimeSerial(15, 0, 0) Then Cells(x, 6) = "1o turno" ElseIf CellTime >= TimeSerial(15, 0, 1) And CellTime <= TimeSerial(23, 0, 0) Then Cells(x, 6) = "2o turno" Else Cells(x, 6) = "3o turno" End If Next x End Sub
Que, como requerido (desejado), retorna em F2:F4
3o turno 2o turno 1o turno Espero que ajude
M.
- Editado mcbranco quarta-feira, 18 de maio de 2016 17:09
-
Outra maneira (mais simples)
Sub dTest() Dim x As Long, CellTime As Double For x = 2 To 4 'Calcula a parte decimal da célula que equivale à hora CellTime = Cells(x, 2) - Int(Cells(x, 2)) If CellTime >= TimeSerial(7, 0, 0) And CellTime <= TimeSerial(15, 0, 0) Then Cells(x, 6) = "1o turno" ElseIf CellTime >= TimeSerial(15, 0, 1) And CellTime <= TimeSerial(23, 0, 0) Then Cells(x, 6) = "2o turno" Else Cells(x, 6) = "3o turno" End If Next x End Sub
M.
- Editado mcbranco quarta-feira, 18 de maio de 2016 17:33
-
-
Caros, n deu cara. Nem de um jeito nem do outro. Não sei pq. Pra matar a macro, só falta essa formatação da hora.
Pedro,
Provavelmente isto está acontecendo porque os valores (data-hora) exportados pelo programa para a planilha Excel sejam Texto e não datas.
Para testar, tente em uma célula vazia essa fórmula (supondo que B4 é uma das células com data-hora)
=ÉNÚM(B4)
Nos diga o que a fórmula retorna (VERDADEIRO ou FALSO?)
M.
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator segunda-feira, 4 de julho de 2016 14:07
-