none
Planilha de controle de ponto ...está quase funcionando...mas preciso de ajuda. rsrsrs RRS feed

  • Pergunta

  • Bom dia Galera!!!

       Tenho uma questão no VBA que gostaria de compartilhar para que possam me ajudar, vamos lá.

       Cartão   Data          Hora

       001       04/07/17   09:10

       002       04/07/17   09:11

       003       04/0717    09:12

       001       04/07/17   12:10

       002       04/07/17   12:11

       003       04/07/17   12:12

      Tenho este ponto acima, preciso manter o Nº do cartão e copiar o horário para a célula a frente e excluir a 2º linha inteira ficando desta forma:

       001   04/07/17  09:10  12:10

      estou programando em VBA mas não sai como o esperado, alguém poderia me ajudar??

    terça-feira, 4 de julho de 2017 14:15

Todas as Respostas

  • Sub TESTE()
    
    
    
    Dim COLUNAA As Range
    Set COLUNAA = Sheets("Planilha1").Range("A:A")
    Dim COLUNAC As Range
    Set COLUNAC = Sheets("Planilha1").Range("C:C")
    Dim COLUNAD As Range
    Set COLUNAD = Sheets("Planilha1").Range("D:D")
    Dim COLUNAB As Range
    Set COLUNAB = Sheets("Planilha1").Range("B:B")
    
    
    
    For I = 2 To Sheets("Planilha1").UsedRange.Rows.Count - 1
    
    For J = I + 1 To Sheets("Planilha1").UsedRange.Rows.Count
    
    If COLUNAA(J) = COLUNAA(I) Then
    
    If COLUNAB(J) = COLUNAB(I) Then
    
    COLUNAD(I) = COLUNAC(J)
    COLUNAA(J).EntireRow.Delete
    Exit For
    End If
    End If
    Next J
    
    
    Next I
    
    End Sub

    Selecione a coluna D e formate-a para hora:

    

    ou use o código a seguir:

    Sub TESTE()
    
    
    Dim i, j As Long
    Dim hora As Date
    
    Dim COLUNAA As Range
    Set COLUNAA = Sheets("Planilha1").Range("A:A")
    Dim COLUNAC As Range
    Set COLUNAC = Sheets("Planilha1").Range("C:C")
    Dim COLUNAD As Range
    Set COLUNAD = Sheets("Planilha1").Range("D:D")
    Dim COLUNAB As Range
    Set COLUNAB = Sheets("Planilha1").Range("B:B")
    
    
    For i = 2 To Sheets("Planilha1").UsedRange.Rows.Count - 1
    
    For j = i + 1 To Sheets("Planilha1").UsedRange.Rows.Count
    
    If COLUNAA(j) = COLUNAA(i) Then
    
    If COLUNAB(j) = COLUNAB(i) Then
    hora = COLUNAC(j)
    COLUNAD(i) = hora
    COLUNAA(j).EntireRow.Delete
    Exit For
    End If
    End If
    Next j
    
    
    Next i
    
    End Sub

    Sempre que precisar comparar a linha de cima com a linha de baixo, use um For dentro de outro For.

    O primeiro For refere-se à linha de cima e o segundo For refere-se à linha de baixo. 

    A sua dúvida não é referente à linguagem Visual Basic, mas se refere à lógica de programação.

    A maior dificuldade inicial do programador é a lógica de programação.

    Geralmente ele pensa que a lógica de programação é muito fácil ou muito chata, ele que ir logo para uma linguagem de programação, mas depois é obrigado a voltar para a lógica de programação.


    Anderson Diniz







    terça-feira, 4 de julho de 2017 14:44