Você está na página 1de 4

TRANSPOR VALORES ENTRE CLULAS DO EXCEL COM VBA

Primeiramente quero agradecer ao meu amigo e scio Ivair Ferrari


pela oportunidade de publicar no EXCELMAX e, como estreia, vou
publicar um artigo sobre uma dvida que constantemente recebemos
e que relativamente simples, mas de grande utilidade.

Vamos a dvida do leitor:

Tenho uma lista em uma coluna com valores, podemos dizer de b1


at b120, e preciso transpor estes valores em colunas de doze em
doze: b1 at b12 ficaria na coluna c1 at c12, j b13 at b24 ficaria
na coluna d1 at d12 e assim sucessivamente...

Trata-se de um cdigo que tem o objetivo de transpor valores de


uma determinada coluna para outras colunas, de forma sequencial e
automtica.

Para tornar o cdigo mais interessante, criei um campo onde o


usurio pode escolher a quantidade de valores que cada coluna ter,
j que isso depende da necessidade de cada um.

Abaixo, mostro uma planilha que simula um relatrio, com valores


colocados na coluna A, e esses valores devem ser transportados
para as outras colunas na quantidade especificada no campo Quant.
de valores por coluna, que no nosso exemplo 7.
Alm disso, coloquei um boto para o cdigo que aciona a
transposio dos valores e outro que executa a limpeza dos dados.

DEMONSTRAO DA MACRO (Sub TransporValores):

1) A varivel X representa o campo nomeado QUANT na


planilha. Nesse caso o campo nomeado foi a clula A2 da planilha e
no VBA representada entre colchetes [QUANT].

2) A instruo CALL faz a chamada para a rotina LIMPAR, que


explicarei mais adiante. Essa rotina limpa as clulas antes da
transposio dos valores.

3) O cdigo (macro) inicia com a instruo DO, ou seja, determina a


seleo de um range (intervalo) de clulas que inicia na Linha
5 da Coluna 1 e vai at a Linha 11 da mesma coluna, usando a
varivel X - 1. Dessa forma selecionamos um range de 7 clulas,
que o valor de [QUANT], no nosso exemplo.
4) A instruo FOR EACH diz o que fazer com cada clula (varivel
CEL) no range selecionado.

5) Dentro da instruo FOR EACH, colocamos uma condio IF. Ou


seja, ao percorrer o range, se a clula for diferente de vazia (<>
), armazena o valor dessa clula na varivel CEL.

6) Caso contrrio, se a clula estiver vazia a instruo seguinte, EXIT


DO acionada. Essa instruo transfere o controle para a instruo
seguinte ao LOOP. Ou seja, encerra o
procedimento SUB TransporValores.

7) NEXT encerra a instruo FOR EACH, colocada mais acima.

8) LOOP encerra a instruo DO, colocada no incio do cdigo.

9) END SUB encerra toda a macro.

interessante salientar a importncia dos contadores:

Linha = Linha + 1: incrementa a varivel LINHA, na qual o valor


da clula copiada, note que antes do lao FOR NEXT essa varivel
retorna ao valor de 5, que sempre a linha inicial de cada coluna.

Coluna = Coluna + 1: incrementa a varivel COLUNA, que indica a


coluna onde o range ser copiado. Esse contador est logo aps o
lao FOR NEXT, pois incrementa a coluna aps o range ser
percorrido.

Lin = Lin + X: Incrementa a varivel LIN, indicando a linha inicial


do range. Adicionado da varivel X o contador permite iniciar o
range a ser copiado sempre 7 clulas (no caso do nosso exemplo)
depois do incio do range anterior e tambm colocado aps o
lao FOR NEXT.

DEMONSTRAO DA MACRO (Sub Limpar):

A macro LIMPAR acionada de duas formas: no inicio da


macro TransportaValores ou ao clicar no boto Limpar.
O funcionamento do cdigo bem simples. A varivel Nlin verifica
quantas linhas esto preenchidas na coluna 2 (que a primeira
coluna do relatrio) e a varivel Ncol verifica quantas colunas esto
preenchidas na linha 5 (que a primeira linha do relatrio).

Com esses valores possvel selecionar um range (intervalo)


partindo da Linha 5 da Coluna 2. Esse intervalo selecionado terminar
sempre nas variveis Nlin e Ncol. Depois disso o cdigo d a
instruo para limpar a seleo(Selection.Clear).

Importante verificar que h uma condio IF na macro. Ou seja, o


cdigo far a limpeza se a clula B5 (que a primeira clula a ser
preenchida) conter um valor (<> ). Sem essa condio, a instruo
apagaria o intervalo A4 at B5.

Espero que tenham gostado da publicao! Obrigado a todos pela


visita e compartilhem com seus amigos!

Link para Download: Macro para transpor valores entre clulas do


excel

Andr Lucio de Moura


Administrador e Consultor

Read more: http://excelmax.blogspot.com/2014/05/macro-para-transpor-valores-


entre.html#ixzz4IGadbbXK