AW: Listeneinträge mehrmals in neue Liste kopieren
27.08.2010 01:56:54
fcs
Hallo Adrian,
mein Tipp: Erstelle die Ziellisten koplett neu, wenn du die Ausgangsliste aktualisiert hast.
Das nachfolgende Makro verteilt die Daten dan auf die Zieltabellen.
Gruß
Sub DatenVerteilen()
Dim wksAusgang As Worksheet
Dim sName As String, vAlter As Variant
Dim arrAlter() As Variant, arrEintrag() As Variant
Dim arrZiel() As Worksheet
Dim Zeile As Long, ZeileZiel As Long, iZiel As Long, iEintrag As Long
Dim StatusCalc
Set wksAusgang = Worksheets("Ausgangsliste")
'Zuordnen von Alter und Zieltabellen
iZiel = 2 'Anzahl Altersangaben
ReDim arrAlter(1 To iZiel): ReDim arrZiel(1 To iZiel)
arrAlter(1) = "jung": Set arrZiel(1) = Worksheets("Zielliste 1")
arrAlter(2) = "alt": Set arrZiel(2) = Worksheets("Zielliste 2")
'sich wiederholende Einträge je Eintrag in den Zieltabellen
iEintrag = 3 'Anzahl der Einträge
ReDim arrEintrag(1 To iEintrag)
arrEintrag(1) = 2009: arrEintrag(2) = 2010: arrEintrag(3) = 2011
'Makrobremsen lösen
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'Ziellisten - Aldaten löschen
For iZiel = 1 To UBound(arrZiel)
With arrZiel(iZiel)
ZeileZiel = .Cells(.Rows.Count, 1).End(xlUp).Row
If ZeileZiel > 1 Then
.Range(.Rows(2), .Rows(ZeileZiel)).ClearContents
End If
End With
Next
'Zeilen in Ausgangsliste abarbeiten
With wksAusgang
For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
sName = .Cells(Zeile, 1)
vAlter = .Cells(Zeile, 2)
For iZiel = 1 To UBound(arrAlter)
'Index im Array ermitteln durch Vergleich von Alter mit den Arrayinhalten
If vAlter = arrAlter(iZiel) Then
With arrZiel(iZiel)
'Letzte Datenzeile im Zielblatt
ZeileZiel = .Cells(.Rows.Count, 1).End(xlUp).Row
'Werte in Zieltabelle eintragen
For iEintrag = 1 To UBound(arrEintrag)
.Cells(ZeileZiel + iEintrag, 1) = sName
.Cells(ZeileZiel + iEintrag, 2) = arrEintrag(iEintrag)
.Cells(ZeileZiel + iEintrag, 3) = vAlter
Next
End With
Exit For
End If
Next
Next
End With
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End Sub