0 evaluări0% au considerat acest document util (0 voturi)
179 vizualizări4 pagini
O documento descreve uma macro VBA para transpor valores entre colunas no Excel de forma automática e sequencial. A macro permite que o usuário escolha a quantidade de valores por coluna e transpor os valores de uma coluna para as outras colunas de acordo com a quantidade especificada, limpando as células antes da transposição. Contadores são usados para controlar as linhas e colunas de origem e destino durante o processo de transposição.
O documento descreve uma macro VBA para transpor valores entre colunas no Excel de forma automática e sequencial. A macro permite que o usuário escolha a quantidade de valores por coluna e transpor os valores de uma coluna para as outras colunas de acordo com a quantidade especificada, limpando as células antes da transposição. Contadores são usados para controlar as linhas e colunas de origem e destino durante o processo de transposição.
O documento descreve uma macro VBA para transpor valores entre colunas no Excel de forma automática e sequencial. A macro permite que o usuário escolha a quantidade de valores por coluna e transpor os valores de uma coluna para as outras colunas de acordo com a quantidade especificada, limpando as células antes da transposição. Contadores são usados para controlar as linhas e colunas de origem e destino durante o processo de transposição.
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