Notifications
Clear all

Varias Colunas em apenas 04 colunas

5 Posts
2 Usuários
0 Reactions
1,005 Visualizações
(@igormdiniz)
Posts: 0
New Member
Topic starter
 

Caros amigos feras no excel,

Estou com uma planilha que preciso transpor várias colunas em apenas 04 colunas, mais o menos como abaixo:

Queira saber se tem alguma macro que faça esse tipo de "ação"

*Ela possui bem mais linhas (com diversos produtos) e bem mais colunas com 90 dias ao total.

Descrição do Produto Nome da Loja 25/11/2015 26/11/2015 27/11/2015 28/11/2015 29/11/2015 30/11/2015
PRODUTO A LOJA 1 5,0 6,0 1,0 12,0 2,0 1,0
PRODUTO B LOJA 2 4,0 2,0 5,0 5,0 7,0 2,0
PRODUTO C LOJA 3 6,0 2,0 11,0 11,0 4,0 4,0
PRODUTO B LOJA 4 0,0 0,0 0,0 5,0 2,0 1,0
PRODUTO A LOJA 5 0,0 0,0 0,0 0,0 0,0 0,0
PRODUTO C LOJA 6 6,0 5,0 3,0 7,0 2,0 1,0
PRODUTO B LOJA 7 4,0 8,0 1,0 13,0 31,0 0,0
PRODUTO A LOJA 8 0,0 0,0 0,0 3,0 2,0 2,0
PRODUTO C LOJA 9 0,0 1,0 1,0 7,0 1,0 2,0
PRODUTO B LOJA 10 5,0 0,0 1,0 1,0 0,0 0,0

O OBJETIVO é que ela fique com apenas 04 colunas (Descrição Produto, Nome da Loja, Data e Valor)

Descrição do Produto Nome da Loja
PRODUTO A LOJA 1 25/11/2015 5,0
PRODUTO B LOJA 2 25/11/2015 4,0
PRODUTO C LOJA 3 25/11/2015 6,0
PRODUTO B LOJA 4 25/11/2015 0,0
PRODUTO A LOJA 5 25/11/2015 0,0
PRODUTO C LOJA 6 25/11/2015 6,0
PRODUTO B LOJA 7 25/11/2015 4,0
PRODUTO A LOJA 8 25/11/2015 0,0
PRODUTO C LOJA 9 25/11/2015 0,0
PRODUTO B LOJA 10 25/11/2015 5,0
PRODUTO A LOJA 1 26/11/2015 6,0
PRODUTO B LOJA 2 26/11/2015 2,0
PRODUTO C LOJA 3 26/11/2015 2,0
PRODUTO B LOJA 4 26/11/2015 0,0
PRODUTO A LOJA 5 26/11/2015 0,0
PRODUTO C LOJA 6 26/11/2015 5,0
PRODUTO B LOJA 7 26/11/2015 8,0
PRODUTO A LOJA 8 26/11/2015 0,0
PRODUTO C LOJA 9 26/11/2015 1,0
PRODUTO B LOJA 10 26/11/2015 0,0
PRODUTO A LOJA 1 27/11/2015 1,0
PRODUTO B LOJA 2 27/11/2015 5,0
PRODUTO C LOJA 3 27/11/2015 11,0
PRODUTO B LOJA 4 27/11/2015 0,0

Obrigado a todos.

Att,
Igor Diniz

 
Postado : 23/02/2016 3:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia,

Veja se o seguinte código atende:

Sub ReduzirColunas()
    Dim i As Long
    Dim j As Integer
    Dim k As Long
    Dim Produto As String
    Dim Loja As String
    Dim Linhas As Long
    Dim Colunas As Integer
    Dim Valor As Double
    Dim Dt As Date
    
    Linhas = [A1].CurrentRegion.Rows.Count
    Colunas = [A1].CurrentRegion.Columns.Count
    k = Linhas + 6
    Cells(k - 1, 1).Value = "Descrição do Produto"
    Cells(k - 1, 2).Value = "Nome da Loja"
    
    For j = 3 To Colunas
        Dt = Cells(1, j).Value
        For i = 2 To Linhas
            Produto = Cells(i, "A").Value
            Loja = Cells(i, "B").Value
            Valor = Cells(i, j).Value
            Cells(k, 1).Value = Produto
            Cells(k, 2).Value = Loja
            Cells(k, 3).Value = Dt
            Cells(k, 4).Value = Valor
            k = k + 1
        Next
    Next
End Sub

Abraço

 
Postado : 24/02/2016 6:10 am
(@igormdiniz)
Posts: 0
New Member
Topic starter
 

José aparentemente deu certo. Fiz o teste na planilha teste, onde tem poucas linhas e poucas colunas e deu CERTO !!

Porem quando fui rodar na planilha original que tem 1.073 linhas e 92 colunas (uma combinação de 98.716 linhas) a macro ficou rodando por 1hora e daí eu interrompi e quando fui checar ela tinha "criado" mais de 18.200 linhas, talvez se rodasse por mais tempo teria dado tudo certo.

Será que tem como diminuir esse "time" ?

Enviando a planilha em anexo

 
Postado : 24/02/2016 8:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite,

Tente esta nova versão do código:

Sub ReduzirColunas()
    Dim i As Long
    Dim j As Integer
    Dim k As Long
    Dim Produto As String
    Dim Loja As String
    Dim Linhas As Long
    Dim Colunas As Integer
    Dim Valor As Double
    Dim Dt As Date
    Dim tIni As Date
    Dim tDur As Date
    Dim tFim As Date
    
    tIni = Now
    Application.ScreenUpdating = False
    
    Linhas = [A1].CurrentRegion.Rows.Count
    Colunas = [A1].CurrentRegion.Columns.Count
    k = Linhas + 6
    Cells(k - 1, 1).Value = "Descrição do Produto"
    Cells(k - 1, 2).Value = "Nome da Loja"
    
    For j = 3 To Colunas
        Dt = Cells(1, j).Value
        For i = 2 To Linhas
            Produto = Cells(i, "A").Value
            Loja = Cells(i, "B").Value
            Valor = Cells(i, j).Value
            Cells(k, 1).Value = Produto
            Cells(k, 2).Value = Loja
            Cells(k, 3).Value = Dt
            Cells(k, 4).Value = Valor
            k = k + 1
            If k Mod 1000 = 0 Then
                Application.StatusBar = k
                DoEvents
            End If
        Next
    Next
    Application.StatusBar = k
    Application.ScreenUpdating = True
    tFim = Now
    tDur = tFim - tIni
    MsgBox "Fim de Execução da Macro em " & tDur
    Application.StatusBar = False
End Sub

Na barra de status vai aparecer o número da linha que está sendo preenchida.
Aqui rodou em 17 segundos e gerou 96.480 linhas.

Abraço

 
Postado : 25/02/2016 9:12 pm
(@igormdiniz)
Posts: 0
New Member
Topic starter
 

Show José deu certíssimo e em apenas 16seg, fiz o check dos valores por dia e também bateu !!!

Muito obrigado.

Abraço,
Igor Diniz

 
Postado : 26/02/2016 7:14 am