Notifications
Clear all

Repetir linhas da tabela com base nos dados das colunas

7 Posts
3 Usuários
0 Reactions
1,040 Visualizações
(@aaribeiro)
Posts: 7
Active Member
Topic starter
 

Bom dia,

Preciso criar uma macro que copie as linhas de uma tabela, com base nas informações das colunas, e replique as informações das colunas conforme o exemplo.
Poderiam ajudar?

Obrigada!

 
Postado : 25/05/2016 6:00 am
(@osvaldomp)
Posts: 858
Prominent Member
 

Experimente:

Sub ArranjaDados()
 Dim a As Long, k As Long, m As Long, x As Long, rng()
 Columns("J:L") = ""
 For a = 2 To Cells(Rows.Count, 1).End(3).Row
  k = Application.CountA(Cells(a, 1).Offset(, 1).Resize(, 3))
  Cells(m + 2, 10).Resize(k) = Cells(a, 1)
  For x = 1 To 3
   If Cells(a, 1).Offset(, x) <> "" Then
    rng = Array(Cells(1, x + 1), Cells(a, x + 1))
    Cells(m + 2, 11).Resize(, 2).Value = rng
    m = m + 1
   End If
  Next x
 Next a
End Sub

Osvaldo

 
Postado : 25/05/2016 2:48 pm
(@aaribeiro)
Posts: 7
Active Member
Topic starter
 

O código funcionou, mas está limitado a três estados, e na realidade a quantidade de colunas será variável. Eu também vou precisar jogar o resultado para outra aba, pode por favor ajudar? Obrigada!

 
Postado : 30/05/2016 10:55 am
(@mprudencio)
Posts: 2749
Famed Member
 

Disponibilize um exemplo de acordo com a necessidade real....

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 30/05/2016 11:20 am
(@aaribeiro)
Posts: 7
Active Member
Topic starter
 

Segue exemplo

 
Postado : 30/05/2016 1:36 pm
(@osvaldomp)
Posts: 858
Prominent Member
 
Sub ArranjaDadosV2()
Dim a As Long, k As Long, m As Long, x As Long, rng(), LR As Long, LC As Long
 LR = ActiveSheet.UsedRange.Find(what:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
 LC = ActiveSheet.UsedRange.Find(what:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column
 Sheets("Plan2").Range("A4:C" & Cells(Rows.Count, 1).End(3).Row) = ""
  For a = 2 To LR
   On Error GoTo gko
   k = Application.CountA(Cells(a, 1).Offset(, 1).Resize(, LC))
    Sheets("Plan2").Cells(m + 4, 1).Resize(k) = Cells(a, 1)
     For x = 1 To LC
      If Cells(a, 1).Offset(, x) <> "" Then
       rng = Array(Cells(1, x + 1), Cells(a, x + 1))
       Sheets("Plan2").Cells(m + 4, 2).Resize(, 2).Value = rng
       m = m + 1
      End If
     Next x
gko:
Resume Next
  Next a
End Sub

Osvaldo

 
Postado : 30/05/2016 5:48 pm
(@aaribeiro)
Posts: 7
Active Member
Topic starter
 

Muito obrigada!!

 
Postado : 31/05/2016 1:14 pm