Marcelo Grifo Posted May 17, 2009 at 03:11 AM Report #264760 Posted May 17, 2009 at 03:11 AM 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?
joseA Posted May 18, 2009 at 12:48 AM Report #264982 Posted May 18, 2009 at 12:48 AM Se dispor o seu ficheiro facilitaria. ?
jpaulino Posted May 18, 2009 at 06:41 AM Report #264990 Posted May 18, 2009 at 06:41 AM Só uma ideia ... uma PivotTable não resolve isso ?
Marcelo Grifo Posted May 20, 2009 at 05:30 PM Author Report #265876 Posted May 20, 2009 at 05:30 PM 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
MetalFatigue Posted May 22, 2009 at 01:38 PM Report #266474 Posted May 22, 2009 at 01:38 PM 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
Marcelo Grifo Posted May 29, 2009 at 02:38 PM Author Report #268321 Posted May 29, 2009 at 02:38 PM 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
MetalFatigue Posted May 29, 2009 at 04:45 PM Report #268393 Posted May 29, 2009 at 04:45 PM Isso podes fazer fácilmente com uma tabela dinamica. não precisas de VB nenhum para essa parte.
Marcelo Grifo Posted May 29, 2009 at 06:50 PM Author Report #268417 Posted May 29, 2009 at 06:50 PM 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
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now