• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Marcelo Grifo

Relatório de Referência Cruzada com Cód VBA

8 mensagens neste tópico

Prezados,

Este é meu 1º post no fórum. Como sou do Brasil não sei se conseguirei me fazer entender, por isto, às vezes, colocarei alguns termos em inglês para exemplificar o que quero dizer.

 

Preciso da sugestão de vocês para criar um código que me ajude a escrever numa folha do Excel uma tabela estilo referência cruzada (em inglês: "CrossTab") com base numa lista´pré-existente. Ou seja:

Suponha que eu tenha na folha 1 uma lista com a seguinte estrutura em colunas(campos) e inúmeras linhas(registros):

DataVenda, coluna A

CódigoProduto, coluna B

Descrição do Produto, coluna c

ValorVenda, coluna D

Quero escrever numa outra folha uma tabela com a seguinte aparência:

Código Produto Descrição Produto MêsVenda1 MêsVenda2 MêsVenda3 MêsVendaN

99999 Prod XXXX 0 999999 999999 0

99999 Prod XXXX 999999 0 999999 999999

99999 Prod XXXX 999999 999999 0 999999

99999 Prod XXXX 0 999999 999999 0

99999 Prod XXXX 999999 999999 999999 999999

Onde 9999 nas colunas de cada respectivo mês é o total de vendas do produto no respectivo mês.

Não sei se me fiz entender , mas o que quero é um código em VBA que transponha a tabela original que está em linash para colunas, totalizando os respectivos produto mês a mês em colunas para cada mês e quando um determinado produto não tenha venda em um mês específico o código insira o valor zero na local apropriado.

Grato pela ajuda

Marcelo Grifo

PS.: Como se usa o recurso de inserir tabela no post???Como eu poderia ter feita a tabela acima por esta ferramenta?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só uma ideia ... uma PivotTable não resolve isso ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Prezados,

Na verdade eu sei que uma tablela dinâmica faria este serviço. Todavia por motivos que demandariam ser muito extenso aqui o local e a forma onde vou utilizar este código não permitem o uso de uma Pivot Table (Só para exemplificar eu vou colocar colunas intermediárias com fórmulas, cabeçalhos personalizados, entre muitas outras adaptações). Por isto que preciso maniular a lista de forma a transformá-la de linhas p/ colunas.

Quanto à postar o ficheiro aqui eu ainda não tenho o ficheiro apenas simplifiquei a idéia pois trata-se de pegar uma folha em formato de lista e transpor via código para colunas algumas colunas específicas.

Grato

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se percebi bem, mas não bastaria copiar-->colar especial-->Transpor?

Se não vais ter de andar à procura (.find) de palavras chave e a partir daí vais buscar o resto dos valores.

Mas como não estamos a ver o ficheiro torna-se complicado dar-te melhores conselhos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Prezados,

Abaixo reproduzo uma lista que se simula os dados do ficheiro original. Basicamente é uma lista em ordem vertical.

Lista Original

Produtos Data Qtde

Prod 2 1/1/2001 2.288.524

Prod 3 1/1/2001 1.480.923

Prod 4 1/1/2001 806.141

Prod 6 1/1/2001 1.280.667

Prod N 1/1/2001 424.011

Prod 1 1/2/2001 568.559

Prod 2 1/2/2001 2.130.975

Prod 3 1/2/2001 1.506.191

Prod 5 1/2/2001 338.838

Prod 6 1/2/2001 1.261.589

Prod 1 1/3/2001 590.325

Prod 3 1/3/2001 1.475.802

Prod 4 1/3/2001 820.495

Prod 5 1/3/2001 350.987

Prod 6 1/3/2001 1.244.722

Prod N 1/3/2001 470.503

O que eu quero é um código que me permita "Horizontalizar" listas como este tipo. Como no exemplo a seguir:

Tabela desejada (simplificada)

Tabela desejada (simplificada)

Produtos 1/1/2001  |1/2/2001 |1/3/2001  |1/4/2001

Prod 1 -          |568.559  | 590.325  | 606.523

Prod 2 2.288.524|2.130.975|  -          |2.259.924

Prod 3 1.480.923|1.506.191| 1.475.802| 1.563.570

Prod 4 806.141  |-            | 820.495  | 856.797

Prod 5 -          |338.838  | 350.987  | 360.711

Prod 6 1.280.667| 1.261.589| 1.244.722| - 

Prod N 424.011  |-    |470.503    | 420.694

Note que neste tipo de construção o código precisa inserir uma valor de zero para os produtos que não tenham tido valor no período/ coluna correspondente.

Preciso fazer via código porque vou inserí-lo num projeto extenso que vai fazer com os dados mais do que uma tbela dinâmica pode fazer e mais do que o método copiar e colar especial transpor me permitiria, pois vou trabalhar os dados em certa etapa do código.

Grato pela ajuda

Marcelo Grifo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso podes fazer fácilmente com uma tabela dinamica. não precisas de VB nenhum para essa parte.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Prezados,

Conforme comentado no início do tópico eu não tenho a possibilidade de usar uma tabela dinâmica, devido ao fato de eu ter que tratar os dados de forma distinta que uma tabela dinâmica faz.

Mesmo sabendo da poderosa ferramenta que uma tabela dinâmica oferece ela não é minha solução neste caso.

O exemplo que eu coloquei é apenas uma simplificação do processo real.

O que eu preciso é um código que varre a tabela original e "transponha" os dados em cada período correspondente colocando um zero quando não existir dados p/ um item em questão.

Mais uma vez grato

Grifo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora