none
Verificar se uma célula contém Data e copiar a mesma para outra célula com condição RRS feed

  • Pergunta

  • Prezados,

    Estou no inicio do VBA, mas consigo desenrolar alguma coisa rs... eu gostaria de copiar uma célula com data para outra célula, mas com uma condição, até que essa data seja diferente quando diferente começar a copiar novamente em um novo ponto.

    Sei que terei que criar um condição If IsDate, estou adaptando essa macro, mas em vez de mostrar tenho que copiar e quando a data mudar ele continua copiando com essa nova data uma linha abaixo.

    Public Sub teste()
        Dim iTotalLinhas    As Long
        Dim lContador       As Long
        
        lContador = 1
        Range("A1").Select
        Selection.End(xlDown).Select
        iTotalLinhas = Cells(Rows.Count, 1).End(xlUp).Row + 1

        While iTotalLinhas > lContador
            If Left(Cells(lContador, 1).Formula, 1) = "=" Then
                Cells(lContador, 2).Value = "Fórmula: " & Cells(lContador, 1).Formula
            Else
                If IsDate(Cells(lContador, 1)) Then
                    Cells(lContador, 2).Value = "Data"
                   
              End If
            End If
            lContador = lContador + 1
        Wend
    End Sub


    quinta-feira, 13 de julho de 2017 13:51

Respostas

  • Boa noite Maciel.

    Para uma tarefa tão simples precisa ser por Macro? Uma fórmula não atende?

    De toda forma, segue uma sugestão de código (me guiei pela imagem e pela pergunta) :

    Dim iTotalLinhas    As Long
    Dim lContador       As Long
    Dim i As Long
    
    lContador = 1                               '1ª linha desejada
    
    With ActiveSheet
        iTotalLinhas = .Cells(.Rows.Count, 2).End(xlUp).Row + 1       'Creio que a última linha será definida na coluna B
    
        For i = lContador To iTotalLinhas
            If IsDate(.Cells(i, 1).Value) Then          'Coluna A possui uma data
                .Cells(i, 6).Value = .Cells(i, 1).Value 'Copia coluna A na coluna F
            Else
                If i > 2 Then .Cells(i, 6).Value = .Cells(i - 1, 6).Value 'Repete linha anterior da coluna F
            End If
        Next
    End With

    É isso?


    Filipe Magno

    • Sugerido como Resposta AndersonFDiniz2 terça-feira, 18 de julho de 2017 03:09
    • Marcado como Resposta Maciel Pereira terça-feira, 18 de julho de 2017 10:56
    domingo, 16 de julho de 2017 00:58

Todas as Respostas

  • segue link da imagem como gostaria

    https://

    goo.gl/7j9H7H

    quinta-feira, 13 de julho de 2017 13:56
  • Boa noite Maciel.

    Para uma tarefa tão simples precisa ser por Macro? Uma fórmula não atende?

    De toda forma, segue uma sugestão de código (me guiei pela imagem e pela pergunta) :

    Dim iTotalLinhas    As Long
    Dim lContador       As Long
    Dim i As Long
    
    lContador = 1                               '1ª linha desejada
    
    With ActiveSheet
        iTotalLinhas = .Cells(.Rows.Count, 2).End(xlUp).Row + 1       'Creio que a última linha será definida na coluna B
    
        For i = lContador To iTotalLinhas
            If IsDate(.Cells(i, 1).Value) Then          'Coluna A possui uma data
                .Cells(i, 6).Value = .Cells(i, 1).Value 'Copia coluna A na coluna F
            Else
                If i > 2 Then .Cells(i, 6).Value = .Cells(i - 1, 6).Value 'Repete linha anterior da coluna F
            End If
        Next
    End With

    É isso?


    Filipe Magno

    • Sugerido como Resposta AndersonFDiniz2 terça-feira, 18 de julho de 2017 03:09
    • Marcado como Resposta Maciel Pereira terça-feira, 18 de julho de 2017 10:56
    domingo, 16 de julho de 2017 00:58
  • É isso mesmo Felipe, sou iniciante e estou adptando um relatório para um planilha, gostaria do seu contato para possivel parceria;

    Gostaria que no Else

    If i > 2 Then .Cells(i, 10).Value = .Cells(i - 1, 10).Value 'Repete linha anterior da coluna F

    ele repetisse a linha anterior só se for data porque quando a célula estiver vazia ele vai repetir a célula vazia.

    Muito obrigado.


    segunda-feira, 17 de julho de 2017 18:22
  • "Gostaria que no Else

    If i > 2 Then .Cells(i, 10).Value = .Cells(i - 1, 10).Value 'Repete linha anterior da coluna F

    ele repetisse a linha anterior só se for data porque quando a célula estiver vazia ele vai repetir a célula vazia."

    Não entendi como deve ser o resultado. Note que a coluna "F" somente recebe dados de data e esta parte do código repete a data anterior já inserida nesta coluna. O "If i>2" existe para evitar erro para a 1ª linha apenas. E, de fato, até encontrar a primeira data na coluna "A", a coluna "F" ficará vazia, conforme sua figura. A partir da primeira data encontrada, todas as linhas da coluna "F" terão datas, necessariamente.

    Poderia explicar melhor como quer o resultado?


    Filipe Magno

    • Marcado como Resposta Maciel Pereira terça-feira, 18 de julho de 2017 10:56
    • Não Marcado como Resposta Maciel Pereira terça-feira, 18 de julho de 2017 10:56
    segunda-feira, 17 de julho de 2017 23:05
  • Se funcionou, marque como respondido. Se não funcionou, explique o que não funcionou.

    Anderson Diniz

    • Sugerido como Resposta AndersonFDiniz2 terça-feira, 18 de julho de 2017 03:09
    terça-feira, 18 de julho de 2017 03:09
  • Entendi o erro da linha 1, é deu bucho msm, me atendeu muito obrigado Felipe um abraço!!
    terça-feira, 18 de julho de 2017 10:56