Notifications
Clear all

Código que procurar valor numa coluna e repete valor abaixo

5 Posts
3 Usuários
0 Reactions
1,191 Visualizações
(@belan_)
Posts: 30
Eminent Member
Topic starter
 

Pessoal, boa noite

Estou trabalhando em um material que é um log de um equipamento, que vem em txt e é diário, porém ja consegui desenvolver a macro para juntar todos os dias do ano todo em um unico arquivo, fazendo papel de banco de dados (enorme). Basicamente o log são todas as funções que são acionadas pelo painel do equipamento.

No desenvolvimento do trabalho, eu me deparei com um problema:

To tentando desenvolver um código que ele vai procurar na coluna b "equipamentos" um valor preenchido, e ao encontrar, vai repetir esse valor em todas as celulas vazias abaixo(so se for vazia) ate encontrar um novo valor, e assim que encontrar um novo valor, repetir novamente esse novo valor em todas as celulas vazias abaixo.. e assim sucessivamente.

Sub repetirvaloresnascelulasabaixo()


Dim x As Long

i = (Cells(Rows.Count, 1).End(xlUp).Row)

For x = 1 To i Step 1

    If ThisWorkbook.Worksheets("BD").Cells(x, 2).Value = "" Then
    x = x + 1
    Else
    ThisWorkbook.Worksheets("BD").Cells(x + 1, 2).Value = ThisWorkbook.Worksheets("BD").Cells(i, 2).Value
    End If
Next

End Sub

exemplo na planilha anexo.
alguém consegue me ajudar?

obrigado

 
Postado : 18/01/2018 6:35 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite Belan_

Nem precisa de macro, dá para fazer isso facilmente.
Acesse o tutorial abaixo:

https://usuariosdoexcel.wordpress.com/2 ... os-vazios/

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/01/2018 7:10 pm
(@spanta)
Posts: 38
Eminent Member
 

Olá Belan,

Segue o código, os comentários explicam como funciona

Deixei anexo a planilha com o VBA pronto

Sub repetirvaloresnascelulasabaixo()


Dim x As Long
Dim strValorAtual As String

i = (Cells(Rows.Count, 1).End(xlUp).Row)

'Default
strValorAtual = ""

'Inicia da linha 2, pois a linha é cabeçalho
For x = 2 To i Step 1

    'Se a célula estiver vazia então preenche
    ' com o conteúdo da varíavel
    If ThisWorkbook.Worksheets("BD").Cells(x, 2).Value = "" Then
    
        'Preenche com o conteúdo da variável
        ThisWorkbook.Worksheets("BD").Cells(x, 2).Value = strValorAtual
       
    ElseIf strValorAtual <> ThisWorkbook.Worksheets("BD").Cells(x, 2).Value Then
        
        'Se mudou o valor então atualiza
        strValorAtual = ThisWorkbook.Worksheets("BD").Cells(x, 2).Value
        
    End If


Next

MsgBox "Finalizado com sucesso."

End Sub
 
Postado : 18/01/2018 8:40 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aproveitando a dica do Patropi, se ainda quiser utilizar macro, segue mais uma opção.

Sub repetirvaloresnascelulasabaixo_Mauro()
    Dim sRg As Range
    Dim ultLinha
    
    ultLinha = (Cells(Rows.Count, 1).End(xlUp).Row)
    
    Set sRg = Range("B1:B" & ultLinha)
    
        With sRg
            .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
            .Copy
            .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
        End With
        
    Application.CutCopyMode = False
    
End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 19/01/2018 6:26 am
(@belan_)
Posts: 30
Eminent Member
Topic starter
 

Galera, muito obrigado pela ajuda.

Utilizei a macro desenvolvida pelo Spanta, rodou direitinho e era isso que queria mesmo. Semanalmente rodarei a mesma para completar o BD.

Patropi, não consegui entrar no seu link. =(

Mauro, muito obrigado pela ajuda também.

Até a próxima galera!
abraço

 
Postado : 19/01/2018 6:03 pm