segunda-feira, 10 de dezembro de 2012

Macro para Preencher Lacunas e Colar Valores/Fórmulas

Boa noite!!

Segue outra macro básica que pode ajudar no dia-a-dia.

Diversas vezes utilizei uma Tabela Dinâmica para resumir dados de grandes tabelas de maneira prática e rápida. Após reorganizar os dados conforme desejado na Tabela Dinâmica, basta copiar a colar valores na aba e teremos uma nova tabela mais resumida.

Entretanto, este método pode gerar tabelas com lacunas por conta da função de resumir, como no caso da tabela abaixo:



No caso de precisarmos utilizar alguma chave nesta nova tabela ou mesmo criar outra Tabela Dinâmica a partir dela, teremos de preencher manualmente os espaços vazios. Há métodos para se fazer isso, que demandariam algum trabalho, mas neste caso vamos usar a seguinte macro para auxiliar no preenchimento:


Sub Preenche()

'
' Macro para preencher as linhas em branco entre linhas preenchidas,
' copiando o valor das células preenchidas imediatamente acima.
' Selecionar a área a ser preenchida e executar a macro.
'
    Dim rng As Range, str As String
    
    Set rng = ActiveSheet.Range(Selection.Address(False, False)) 'Coleta o "Range" selecionado

    On Error Resume Next 'Ignora possíveis erros
    For k = 1 To rng.Areas.Count 'Percorre todas as áreas selecionadas
        For i = 1 To rng.Areas(k).Columns.Count
            str = ""
            For j = 1 To rng.Areas(k).Rows.Count
                
                '"Varre" verticalmente cada célula das áreas
                'selecionadas, e verifica o conteúdo. Se for diferente
                'de vazio, armazena o conteúdo na variável "str" e preenche
                'as células vazias posteriores com o conteúdo desta variável.
                'O conteúdo de "str" é sobrescrito a cada vez que uma célula
                'com conteúdo diferente de vazio é encontrada.
                
                If rng.Areas(k).Cells(j, i).Value <> "" Then
                    str = rng.Areas(k).Cells(j, i).Value
                Else
                    rng.Areas(k).Cells(j, i).Value = str
                End If

            Next
        Next
    Next

End Sub

Agora, selecionando a tabela conforme a figura abaixo:


E aplicando a macro, teremos a tabela preenchida conforme a figura que segue:


E o preenchimento está pronto!

Colando Valores e/ou Fórmulas

Falando em copiar e colar valores, fiz uma macro para colar valores e uma para colar fórmulas que têm sido de grande utilidade. Configurei os atalhos como Ctrl + Shift + V (colar valores) e Ctrl + F (colar fórmulas). Assim fica bem mais rápido colar os valores e/ou fórmulas quando desejado. As macros são bem simples, conforme abaixo:


Sub Colar_Valores()
'
' Cola valores
'
    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub


Sub Colar_Fórmulas()
'
' Cola Fórmulas
'
    On Error Resume Next
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End Sub


Bom, chega ao fim mais um post. Espero que seja útil, leitor!
Dúvidas e/ou sugestões, escrevam para: guiamacroexcel@gmail.com.

Obrigado e até a próxima!

4 comentários:

  1. Não acredito que ninguém postou um comentário aqui!! Procurei em vários lugares uma macro como essa, sem sucesso. Só posso dizer uma coisa: Muito obrigado GME!! Que Deus lhe guie e ilumine

    ResponderExcluir
  2. Olá Edson, muito legal a dica.
    Como posso fazer para preencher de baixo para cima?

    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. Boa GME, me ajudou bastante, foi muito fácil com sua ajuda!

    ResponderExcluir