Página 1 de 1

PREENCHIMENTO DE LINHA CONDICIONADO À LINHA ACIMA - VBA

Enviado: 30 Jul 2018 às 14:05
por RafaelVasconcelos
Amigos,
Vocês são incríveis, tem me ajudado muito.
Gostaria de contar mais um vez com esse apoio para solucionar o seguinte problema através do vba:

UMA COLUNA PREENCHIDA COM VÁRIAS LINHAS VAZIAS E OUTRAS PREENCHIDAS. PRECISAMOS DE UM CÓDIGO QUE PREENCHA AS LINHAS VAZIAS SEGUINDO AS SEGUINTES REGRAS:

SE A LINHA FOR DIFERENTE DE VAZIO, PASSA PARA A PRÓXIMA.
SE A LINHA FOR IGUAL A VAZIO: COPIAR O CONTEUDO DA CELULA ANTERIOR E COLAR NESTA.
CASO O CÓDIGO ENCONTRE 5 LINHAS SEGUIDAS COM VALOR IGUAL A VAZIO ELE DEVE PARA DE EXECUTAR.

IMPORTANTE: o código deve começar a trabalhar a partir da linha 2, ou seja, vai desprezar a linha 1, exceto na hora de copiar o conteúdo.

EXEMPLO: Se na linha 1 tem conteudo diferente de vazio, no caso tem a palavra "JOSE", o código vai entender que deve passar para a próxima linha.
Na próxima linha (linha 2) ele deve analisar o conteúdo e se for igual a vazio, o código vai copiar o conteúdo da linha acima (linha 1) e colar como somente valores nessa linha (linha 2).


EXEMPLO:

LINHAS

1 JOSE
2
3
4 MARIA
5
6 JOAO
7
8

Re: PREENCHIMENTO DE LINHA CONDICIONADO À LINHA ACIMA - VBA

Enviado: 30 Jul 2018 às 14:25
por gfranco
Como vc não postou uma planilha modelo, fiz um código que se orienta pelos dados da coluna "A" e copia a linha inteira.
Veja se te atende:
Código: Selecionar todos
Sub main()
    Dim counter As Long
    Dim i As Long
    
    counter = 0
    
        For i = 2 To Planilha1.Cells(Rows.Count, 1).End(3).Row
        
            If Planilha1.Cells(i, 1) = "" Then
                
                Planilha1.Rows(i).Value = Planilha1.Rows(i - 1).Value
                counter = counter + 1
            Else
                counter = 0
            
            
            End If
        
        
        If counter = 5 Then Exit Sub
        
        Next i


End Sub

PREENCHIMENTO DE LINHA CONDICIONADO À LINHA ACIMA - VBA

Enviado: 30 Jul 2018 às 15:38
por FelipeMGarcia
Seleciona o intervalo em branco, aperte F5, especial, em branco, depois aperte = a célula de cima preenchida e aperte CTRL + ENTER, ele irá preencher automaticamente as demais linhas.

PREENCHIMENTO DE LINHA CONDICIONADO À LINHA ACIMA - VBA

Enviado: 30 Jul 2018 às 16:14
por RafaelVasconcelos
Show. É isso mesmo, muito bom.
Esse código que precisamos, contudo gostaria que ele se aplicasse somente às linhas da coluna "A".
Ou seja, se a linha 1 da coluna "A", não é vazia ele pula, e analisa a linha 2 da coluna "A", que por sua vez está vazia, logo o código pega o que tem na linha 1 da coluna "A", copia, e cola na linha 2 da coluna "A" e assim sucessivamente.

Gostaria de agradecer e se não for abusar da boa vontade e paciência, haveria possibilidade de comentar as linhas de código de uma maneira que eu entenda o que cada termo significa.
Só se for possível e não for atrapalhar. É que estou aprendendo e isso ajuda muito quando você começa a entender o que os termos significam dentro da linguagem.
Não enviei a planilha devido o tamanho, mas vou tentar anexar novamente reduzindo a quantidade de dados.

Re: PREENCHIMENTO DE LINHA CONDICIONADO À LINHA ACIMA - VBA

Enviado: 30 Jul 2018 às 16:55
por gfranco
Veja agora:
Código: Selecionar todos
Sub main()
    Dim counter As Long 'variável para controlar o limite de 5 células vazias por varredura
    Dim i As Long 'variável de loop
    
    counter = 0 'iniciando o contador
    
        For i = 2 To Planilha1.Cells(Rows.Count, 1).End(3).Row 'Definindo o limite do alcance _
         ou em outras palavras, definindo a última linha que contém dados
        
            If Planilha1.Cells(i, 1) = "" Then ' se a célula avaliada estiver vazia, então _
            o seu valor será igual ao da célula imediatamente acima:
                
                Planilha1.Cells(i, 1) = Planilha1.Cells(i - 1, 1)
                'e o contador será incrementado
                counter = counter + 1
            Else
                counter = 0 'se não for uma célula vazia, o contador será zerado
            
            
            End If
        
        
        If counter = 5 Then Exit Sub ' se o contador atingir o limite de 5 então sai da rotina
        
        Next i


End Sub