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.
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
Nome | Obrigatório / Opcional | Tipo | Descrição |
---|---|---|---|
Paste | Opcional | XlPasteType | Especifica a parte do intervalo a ser colada. |
Operation | Opcional | XlPasteSpecialOperation | Especifica como os dados numéricos serão calculados com as células de destino na planilha. |
SkipBlanks | Opcional | Variant | Verdadeiro 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. |
Transpose | Opcional | Variant | Verdadeiro 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)
Nome | Valor | Descrição |
---|---|---|
xlPasteAll | -4104 | Tudo será colado. |
xlPasteAllExceptBorders | 7 | Tudo, exceto as bordas, será colado. |
xlPasteAllMergingConditionalFormats | 14 | Tudo será colado e os formatos condicionais serão mesclados. |
xlPasteAllUsingSourceTheme | 13 | Tudo será colado usando o tema de origem. |
xlPasteColumnWidths | 8 | A largura da coluna copiada é colada. |
xlPasteComments | -4144 | Os comentários são colados. |
xlPasteFormats | -4122 | O formato de origem copiado é colado. |
xlPasteFormulas | -4123 | As fórmulas são coladas. |
xlPasteFormulasAndNumberFormats | 11 | Fórmulas e formatos de números são colados. |
xlPasteValidation | 6 | As validações são coladas. |
xlPasteValues | -4163 | Os valores são colados. |
xlPasteValuesAndNumberFormats | 12 | Os formatos de valores e números são colados. |
Parâmetros de Colar Operação (Item 2 da Imagem no Topo)
Nome | Valor | Descrição |
---|---|---|
xlPasteSpecialOperationAdd | 2 | Os dados copiados serão adicionados ao valor na célula de destino. |
xlPasteSpecialOperationDivide | 5 | Os dados copiados dividirão o valor na célula de destino. |
xlPasteSpecialOperationMultiply | 4 | Os dados copiados irão multiplicar o valor na célula de destino. |
xlPasteSpecialOperationNone | -4142 | Nenhum cálculo será feito na operação de colagem. |
xlPasteSpecialOperationSubtract | 3 | Os 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.