Schleife für Kopieren von Zellinhalten aus 12 Monatsblättern
Skriptyger
Guten Tag an alle VBA-Gurus, Excel-Profis und Helfer in der Not,
je länger ich mit Excel arbeitet, desto mehr merke ich, wie wenig ich davon beherrsche. Daher suche ich heute euren Rat. Dieses Forum und Archiv sind so riesig, dass es vielleicht schon eine Lösung gibt, die ich nicht gefunden habe. Dann würde ich mich über einen Link dahin freuen.
Meine Datei: In einer Statistik-Mappe mit Arbeitsblättern pro Monat (01-12), einem Summenblatt für das ganze Jahr und 2 leeren Blättern für die zu erstellenden Listen, gibt es unter anderem die Zeilen "Zugänge", "Abgänge", "Vermittelt" und "Verstorben" (es handelt sich um Tiere). Die Zeilen enthalten in einer Zelle die Namen aller betreffenden Tiere, mit Kommata getrennt und daneben die Anzahl der Namen. Das Zählen der Namen hat schon mal geklappt (=WENN(ISTLEER(D40);0;LÄNGE(D40)-LÄNGE(WECHSELN(D40;",";""))+1)). Dank Copy+Paste.
Nun möchte ich je eine Namensliste für "Vermittelte" und "Verstorbene" in den leeren Blättern erstellen, wobei je ein Name unter dem anderen stehen soll. Ich kopiere also das entsprechende Feld (Feldnamen Verm01-Verm12 und Gest01-Gest12) in die erste leere Zeile, wandle "Text in Spalten" und transponiere dann die Spalten zu Zeilen. Das klappt noch ziemlich fehlerhaft mit dem ersten Monat (nur zwei Namen).
Ich wünsche mir eine Schleife, die alle Monatsblätter 01-12 der Reihe nach durchläuft und die Zelle Gest+Monat kopiert, so dass am Ende alles in Spalte A untereinander steht.
Das Makro soll eine zuvor erstellte Liste löschen und im leeren Blatt neu beginnen. Ich möchte keine neues Blatt erstellen, da alle Blätter Namen haben.
Was ich bisher zusammengeschustert habe:
Sub ListeVerstorben()
Application.ScreenUpdating = False
'Spalte leeren
Sheets("Verstorben").Range("A:A").ClearContents
Range("A1").Select
z = Range("A65536").End(xlUp).Row + 1
'Beginn Schleife Alle Monate
'Zelle kopieren und anfügen
Application.Goto Reference:="Gest01"
Selection.Copy ' oder kürzer Range("Gest01").Copy ?
Sheets("Verstorben").Select
Cells(z, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
Application.CutCopyMode = False
'Text in Spalten
Selection.TextToColumns Destination:=Application.ActiveCell, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:= _
Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
'(Die kopierte Zelle enthielt nur 2 Namen. Ich bräuchte eher ein flexibles Array.)
'Transponieren
'x = Range("A65536").End(xlUp).Column
Selection.Offset(0, 1).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Cells(z + 1, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Application.CutCopyMode = False
'TransSpalten löschen
Range("B:B").End(xlToRight).Select
'Selection.ClearContents
'Ende Schleife (Und dann ist plötzlich die ganze Liste wieder weg.)
'Blatt formatieren
Cells.Select
With Selection
Call LinienLöschen '(funktioniert nicht)
'Selection.Borders(xlEdgeLeft).LineStyle = xlNone
'Selection.Borders(xlEdgeTop).LineStyle = xlNone
'Selection.Borders(xlEdgeBottom).LineStyle = xlNone
'Selection.Borders(xlEdgeRight).LineStyle = xlNone
'Selection.Borders(xlInsideVertical).LineStyle = xlNone
'Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Call FontArial10
End With
'Alphabetisch sortieren
Columns("A:A").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub
sowie:
Sub FontArial10()
'Cells.Select
With Selection.Font
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
End With
Range("A2").Select
End Sub
Sub LinienLöschen()
'Cells.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A1").Select
End Sub
Die Listen-Blätter sind mit Bedingter Formatierung versehen, so dass Dubletten ins Auge fallen (Formel: =ZÄHLENWENN(A:A;A1)>1). Das i-Tüpfelchen wäre dann noch eine Schaltfläche mit Makro, das die Dubletten rauslöscht, nachdem wir das nochmal kontrolliert haben. Die Listen brauchen keine Überschrift. Sie werden zu Word kopiert und dort in Spalten formatiert.
Wenn das gar nicht verständlich ist, kann ich auch eine abgespeckte Datei hochladen.
Ihr würdet mir und dem Tierschutz wirklich sehr helfen. Tausend Dank fürs Lesen und Tüfteln.