Copiar e Colar Excel VBA

Copiar e colar é uma das operações mais comuns que são realizadas através do VBA no Excel.

Neste artigo você irá aprender como preencher valores com células, copiar e colar células diretamente e colar especial, tudo via VBA no Excel.

A primeira etapa é habilitar a guia desenvolvedor.

Caso não esteja ativa siga este artigo para Habilitar Guia Desenvolvedor.

https://youtu.be/-y-_ciTL_Qg

Preencher Células com Valores no Excel

Para colocar um valor em uma célula à partir de outra célula, ou mesmo passar um resultado de cálculo ou valor fixo use o seguinte código:

Public Sub lsValorIntervalo()
    Planilha1.Range("C8:C15").Value = Planilha1.Range("B8:B15").Value
End Sub

Veja no código acima que estamos passando o nome interno da planilha e passamos para a propriedade Value do intervalo os dados da origem, também à partir da propriedade Value.

Outra forma seria passar diretamente um valor, texto ou cálculo, por exemplo:

Public Sub lsValorIntervalo()
    Planilha1.Range("C8:C15").Value = "Sim"
End Sub

Caso queira copiar os dados de outra planilha, basta colocar o nome da planilha da origem.


Public Sub lsValorIntervalo()
    Planilha2.Range("C8:C15").Value = Planilha1.Range("B8:B15").Value
End Sub

No exemplo acima temos o intervalo da Planilha2 recebendo o valor à partir do intervalo B8:B15 da Planilha1.

Copiar Dados VBA Excel

Agora vamos ver a respeito do método COPY do VBA.

Com o método Copy nós conseguimos realizar a cópia dos dados mandando diretamente para um novo intervalo ou senão conseguimos guardar na memória e colar em outro intervalo.

O código tem a seguinte sintaxe:

Sheet.Range.Copy Destination

Temos então na sintaxe a planilha e o método Copy, o único parâmetro é Destination, ou seja aonde irá ser colada a informação.

Veja o exemplo abaixo:

Public Sub lsCopiarIntervalo()
    Planilha1.Range("B8:B15").Copy Planilha1.Range("E8")
End Sub

Nele temos então o intervalo da planilha1 das células B8 a B15 e colando na célula E8 da Planilha1.

Para intervalos múltiplos faça desta forma:

Public Sub lsCopiarIntervalosMultiplos()
    Planilha1.Range("B8:B15, B30:B50").Copy Planilha1.Range("E8")
End Sub

Veja que no exemplo acima, estamos copiando dois intervalos, que são então separados por vírgula no código e sempre colando em uma única célula para facilitar, pois o intervalo de destino deve ser uma célula ou senão um intervalo exatamente do mesmo tamanho, o que é mais difícil.

Copiar Linhas com VBA no Excel

De forma muito semelhante ao tópico anterior, veja como podemos copiar linhas com VBA no Excel.

Veja o exemplo abaixo:

Public Sub lsCopiarLinhas()
    Planilha3.Rows("14:17").Copy Planilha3.Range("6:6")
End Sub

No exemplo acima temos então a diferença no intervalo de origem.

Nele temos ao invés do Range, o Rows para a definição dos dados a serem copiados.

Veja aqui que temos então Planilha3.Rows(“14:17”).Copy, aonde definimos então que estamos usando o Rows para selecionar os dados e para definir as linhas da cópia você tem então o intervalo definido somente com os números das linhas, utilizando o : para definir este intervalo.

Outra forma de copiar a linha inteira da célula atual é utilizando a opção EntireRow, copiando então a linha atual.

Neste caso é necesário colocar na definição de onde irá colar a informação definindo a linha aonde será colada a informação.

Public Sub lsCopiarLinhaInteira()
    ActiveCell.EntireRow.Copy Planilha3.Range("6:6")
End Sub

Copiar Colunas com VBA no Excel

Para copiar ou colar colunas você deve seguir conforme o exemplo abaixo:

Public Sub lsCopiarColunas()
    Planilha3.Columns("E:F").Copy Planilha3.Range("Y1")
End Sub

Veja que neste caso ao invés do Range utilizamos a propriedade Columns(“E:F”) e o método Copy para copiar a informação e colar em uma determinada célula.

Veja que a célula tem que star na primeira linha para não gerar o erro de intervalo.

Outra forma é copiar a coluna atual.

Public Sub lsCopiarColunaInteira()
    ActiveCell.EntireColumn.Copy Planilha3.Range("Y1")
End Sub

Para isso usamos a propriedade EntireColumn e o método Copy para copiar a informação, e no destino definimos então o Range da célula Y1 aonde será colada a informação.

Copiar e Colar VBA Excel

Outra forma de realizar o copiar é colar é colocando em memória os dados e colando em outro ponto.

O método paste tem dois parâmetros possíveis: Destination e Link.

Veja o exemplo de código:

Public Sub lsColar()
    Planilha3.Range("E15:F26").Copy
    Planilha3.Range("Z15").Select
    Planilha3.Paste
    Application.CutCopyMode = False
End Sub

Veja que no código acima temos copiar com o método Copy e em seguida selecionamos uma determinada célula com o método Select.

Na linha seguinte usamos o método Paste para colar a informação na célula selecionada Z15 e em seguida limpamos da memória o que foi copiado utilizando o método Application.CutyCopyMode.

Outra forma de colar diretamente é no método Paste passando no parâmetro Destination o intervalo.

Public Sub lsColarDestination()
    Planilha3.Range("E15:F26").Copy
    Planilha3.Paste Planilha3.Range("Z15")
End Sub

Veja acima que temos a cópia e no método paste estamos colando diretamente em Z15 no destino.

Outro parâmetro que pode ser passado é o Link.

Ao colar o link serão criados links usando = ao invés de colar os valores e formatos.

Neste caso o destination deve estar vazio.

Veja o código abaixo de exemplo com link:

Public Sub lsColarLink()
    Planilha3.Range("E15:F26").Copy
    Planilha3.Range("Z15").Select
    Planilha3.Paste , True
End Sub

No exemplo iremos colar os valores de E15 a F26 no intervalo a partir do Z15.

Copiar e Colar Especial VBA Excel

Ao copiar dados podemos também colar as informações de várias formas diferentes.

Veja a imagem abaixo.

Ao colarmos especial temos uma sequência de 4 opções, e elas podem ser utilizadas em conjunto.

Da mesma forma você também pode copiar e colar especial usando o VBA e passando 4 parâmetros conforme a lista abaixo.

Tabela de Parâmetros do Colar Especial Valores no VBA

NomeObrigatório / OpcionalTipoDescrição
PasteOpcionalXlPasteTypeEspecifica a parte do intervalo a ser colada.
OperationOpcionalXlPasteSpecialOperationEspecifica como os dados numéricos serão calculados com as células de destino na planilha.
SkipBlanksOpcionalVariantVerdadeiro para que as células em branco no intervalo da área de transferência não sejam coladas no intervalo de destino. 
O valor padrão é Falso.
TransposeOpcionalVariantVerdadeiro para transpor linhas e colunas quando o intervalo for colado. 
O valor padrão é Falso.

Parâmetros de Colar (Item 1 da Imagem no topo)

NomeValorDescrição
xlPasteAll-4104Tudo será colado.
xlPasteAllExceptBorders7Tudo, exceto as bordas, será colado.
xlPasteAllMergingConditionalFormats14Tudo será colado e os formatos condicionais serão mesclados.
xlPasteAllUsingSourceTheme13Tudo será colado usando o tema de origem.
xlPasteColumnWidths8A largura da coluna copiada é colada.
xlPasteComments-4144Os comentários são colados.
xlPasteFormats-4122O formato de origem copiado é colado.
xlPasteFormulas-4123As fórmulas são coladas.
xlPasteFormulasAndNumberFormats11Fórmulas e formatos de números são colados.
xlPasteValidation6As validações são coladas.
xlPasteValues-4163Os valores são colados.
xlPasteValuesAndNumberFormats12Os formatos de valores e números são colados.

Parâmetros de Colar Operação (Item 2 da Imagem no Topo)

NomeValorDescrição
xlPasteSpecialOperationAdd2Os dados copiados serão adicionados ao valor na célula de destino.
xlPasteSpecialOperationDivide5Os dados copiados dividirão o valor na célula de destino.
xlPasteSpecialOperationMultiply4Os dados copiados irão multiplicar o valor na célula de destino.
xlPasteSpecialOperationNone-4142Nenhum cálculo será feito na operação de colagem.
xlPasteSpecialOperationSubtract3Os dados copiados serão subtraídos do valor na célula de destino.

No Parâmetro 3 temos o SkipBlanks que é o colar ignorando os vazios. passamos nele Verdadeiro para ignorar e False para colar.

No Parâmetro 4 temos a opção Transpose que é para colar transposta a informação.

Para isso é passado Verdadeiro para transpor e Falso para não transpor.

Exemplo de Colar Especial

Neste exemplo temos o colar especial tudo, passando o parâmetro xlPasteAll, mas poderia por exemplo colar somente os valores usando xlPasteValues ou qualquer outro parâmetro.

Public Sub lsColarEspecial()
    Planilha3.Range("E15:F26").Copy
    Planilha3.Range("Z15").PasteSpecial xlPasteAll
End Sub

Exemplo Colar Especial com Operações

No exemplo abaixo temos então o colar especial multiplicando o valor.

Public Sub lsColarEspecialOperacao()
    Planilha3.Range("Z12").Value = 100
    Planilha3.Range("M15:M25").Copy
    Planilha3.Range("Z15").PasteSpecial xlPasteAll
    Planilha3.Range("Z12").Copy
    Planilha3.Range("Z15:Z25").PasteSpecial xlPasteValues, Operation:=xlPasteSpecialOperationMultiply
End Sub

No exemplo de código acima temos o valor de 100 na célula Z12, em M15 e M25 temos a cópia dos dados para a memória e em Z15 colamos especial todos os valores, inclusive com formatação.

Em seguida, copiamos o valor 100 que está na célula Z12 e colamos na linha seguinte usando o PasteSpecial usando a Operação de multiplicação conforme a tabela.

Exemplo de Colar Especial sem Vazios

No exemplo abaixo temos o colar especial ignorando os vazios.

Public Sub lsColarEspecialSemVazios()
    'Não cola aonde tem valores vazios
    Planilha3.Range("B15:B30").Copy
    Planilha3.Range("Z15").PasteSpecial , , True
End Sub

Para isto basta mandarmos o terceiro parâmetro como True, e neste caso, para células em branco elas simplesmente não sobreporão os dados do destino.

Exemplo de Colar Especial Transpor

No exemplo abaixo estamos colando especial os dados de forma transposta.

Public Sub lsColarEspecialTranspor()
    Planilha3.Range("A14:U14").Copy
    Planilha3.Range("Z15").PasteSpecial xlPasteValues, , , True
End Sub

Veja no exemplo acima que é passado o quarto parâmetro True, assim os dados colados são transpostos de linha para coluna ou de coluna para linha.

Exemplo de Colar Especial com Loop

No exemplo abaixo estamos realizando um loop por uma série de dados e colando as linhas somente quando o código é par.

O exemplo abaixo é bastante prático e facilmente adaptável.

Public Sub lsCopiarColarLoop()
    On Error GoTo Sair
    
    Application.ScreenUpdating = False

    Dim lUltimaLinhaAtiva   As Long
    Dim i                   As Long
    Dim lLinha              As Long

    Planilha4.Range("15:2000").Clear

    lUltimaLinhaAtiva = Planilha3.Cells(Planilha3.Rows.Count, 1).End(xlUp).Row
    lLinha = 15
    
    For i = 15 To lUltimaLinhaAtiva
        If Planilha3.Cells(i, 1).Value Mod 2 = 0 Then
            Planilha3.Range("A" & i & ":U" & i).Copy
            Planilha4.Range("A" & lLinha).PasteSpecial xlPasteAll
            lLinha = lLinha + 1
        End If
    Next i
    
    MsgBox "Processo concluído"
    
Sair:
    Application.ScreenUpdating = True
End Sub

Download do Copiar e Colar Excel

Realize o download da planilha deste artigo no botão abaixo. Basta se inscrever na nossa newsletter gratuita para o download automático.

Baixe a planilha


Marcos Rieper

Pai, marido, professor e consultor em Excel.

Obrigado por ler este artigo, este blog foi criado para difundir o conhecimento em Excel à todos.

Divulgamos novos artigos nas redes sociais, basta clicar nos ícones abaixo.

Excel não precisa ser complicado

Assine nossa newsletter e receba dicas práticas para dominar o excel