Priložte nejakú prílohu, nech je jasnejšie, čo tým myslíte, a hlavne aké je rozloženie dát, či sú medzi riadkami dátových listov medzery, či môže nastať neexistencia listu, a treba chytať chyby a pod...
Zjednodušený príklad:
Kód: Vybrat vše
Sub End_of_month2() 'makro na vykopírování dat pro list NAVISYS
Dim RS As Long, arS()
Dim i As Long, RW As Long
'načítanie zoznamu listov
With wsSettings 'pracuj s listom Settings
RS = .Cells(Rows.Count, "K").End(xlUp).Row 'počet riadkov zoznamu listov (podľa popisu nieje hlavička)
If RS = 1 Then 'počet 1 dostaneme aj keď je 0 aj 1
ReDim arS(1 To 1, 1 To 1) 'jednoprvkové pole nemôžeme priradiť priamo, tak ho vytvoríme
arS(1, 1) = .Range("K1").Value 'a potom doň priradíme hodnotu
Else
arS() = .Range("K1:K" & RS).Value 'viacprvkové pole zaplníme rovno
End If
End With
'prechádzanie listov a kopírovanie hodnôt
For i = 1 To RS 'prejdeme všetky prvky poľa listov
If Not IsEmpty(arS(i, 1)) Then 'spracuj list iba ak je prvok poľa neprázdny (ošetrenie vynechania alebo žiadneho riadka)
With Worksheets(arS(i, 1)) 'pracuj s listom podľa indexu
RW = .Cells(Rows.Count, "A").End(xlUp).Row - 1 'počet riadkov v danom liste (nepredpokladá medzery medzi riadkami, a hlavička sa vynechá)
If RW > 0 Then 'ak sú v stĺpci A nejaké data
wsNAVISYS.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(RW).Value = .Cells(2, 1).Resize(RW).Value 'tak ich nakopíruj pod posledné data v stĺpci A v liste NAVISYS
End If
End With
End If
Next i
End Sub