none
Condição usando minutos RRS feed

  • 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.

    quarta-feira, 18 de maio de 2016 12:29

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.

    quinta-feira, 19 de maio de 2016 03:41

Todas as Respostas

  • Oi Pedro,

    Use a função TimeSerial(hour,minute,second)

    Ficaria assim

    If Cells(x, 2) >= TimeSerial(7, 0, 0) And Cells(x, 2) <= TimeSerial(15, 0, 0) Then

    Espero que ajude

    M.



    • Editado mcbranco quarta-feira, 18 de maio de 2016 12:46
    quarta-feira, 18 de maio de 2016 12:46
  • 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.


    quarta-feira, 18 de maio de 2016 12:55
  • 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.

    quarta-feira, 18 de maio de 2016 13:04
  • 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.



    quarta-feira, 18 de maio de 2016 13:36
  • 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
    quarta-feira, 18 de maio de 2016 13:55
  • Windows com a ultima versão do excel.
    quarta-feira, 18 de maio de 2016 14:11
  • Então, deve funcionar!
    quarta-feira, 18 de maio de 2016 14:14
  • 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?

    quarta-feira, 18 de maio de 2016 14:20
  • 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

    quarta-feira, 18 de maio de 2016 16:41
    Moderador
  • 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
    quarta-feira, 18 de maio de 2016 17:06
  • 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
    quarta-feira, 18 de maio de 2016 17:32
  • 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.
    quarta-feira, 18 de maio de 2016 19:35
  • 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.

    quinta-feira, 19 de maio de 2016 03:41
  • Retornou  verdadeiro.
    segunda-feira, 23 de maio de 2016 13:23