bastian94
Goto Top

Excel Vba Kopieren und Einfügen von Daten basierend auf Kriterienüberschriften in mehrere Arbeitsblätter

Moin,

komme bei einer copy and paste Aufgabe nicht voran.

Ich habe mehrere Tabellen zu unterschiedlichen Aufträgen, die untereinander mit einer variablen Zeilenanzahl in einem Arbeitsblatt aufgelistet sind. Den Auftragsnamen sowie die Tabelle darunter möchte ich kopieren und in der selben Arbeitsmappe in unterschiedliche Arbeitsblätter einfügen. Dabei haben die Arbeitsblätter die Namen der Aufträge, sprich Auftrag 1, Auftrag 2 etc.

Hoffe könnt mir da weiterhelfen.

Grüße
Basti
auftrag

Content-ID: 3935996689

Url: https://administrator.de/forum/excel-vba-kopieren-und-einfuegen-von-daten-basierend-auf-kriterienueberschriften-in-mehrere-arbeitsblaetter-3935996689.html

Ausgedruckt am: 25.12.2024 um 08:12 Uhr

3803037559
Lösung 3803037559 14.09.2022 aktualisiert um 14:15:55 Uhr
Goto Top
Moin.
Sub Kopiere_Tabellen()
    On Error Resume Next
    Dim ws As Worksheet, cell As Range, intLast As Long, wsNew As Worksheet, r As Long
    Set ws = Sheets("Tabelle1")  
    With ws
        lastrow = .Cells(Rows.Count, "A").End(xlUp).Row  
        intLast = lastrow
        For r = lastrow To 1 Step -1
            If .Cells(r, "A").Value = "A" Then  
                Set wsNew = Sheets(.Cells(r - 1, "A").Value)  
                If Err.Number <> 0 Then
                    Set wsNew = Sheets.Add(After:=Sheets(Sheets.Count))
                    wsNew.Name = .Cells(r - 1, "A").Value  
                    Err.Clear
                Else
                    wsNew.Range("A:I").Clear  
                End If
                .Range(.Cells(intLast, "I"), .Cells(r - 1, 1)).Copy Destination:=wsNew.Range("A1")  
                intLast = r - 3
            End If
        Next
    End With
End Sub
Der Wert "A" im If in Zeile 9 und das "Tabelle1" in Zeile 4 müssen natürlich an die eigenen Gegebenheiten angepasst werden...

Cheers
certguy
Bastian94
Bastian94 14.09.2022 um 14:03:16 Uhr
Goto Top
Thanks, klappt super und habs angepasst! face-smile

Ich müsste das täglich laufen lassen, daher meckert der Code, weil ja die Arbeitsblätter schon vorhanden sind. Wäre da eine For Each schleife nötig, um die Daten bei bereits existierenden Arbeitsblättern einzutragen?
3803037559
3803037559 14.09.2022 aktualisiert um 14:16:07 Uhr
Goto Top
Zitat von @Bastian94:
Wäre da eine For Each schleife nötig, um die Daten bei bereits existierenden Arbeitsblättern einzutragen?
Nein nicht zwingend, Ein "On Error Resume Next" einbauen und dann checken ob das Object nicht Nothing ist geht auch. S. Anpassung oben.
Bastian94
Bastian94 14.09.2022 aktualisiert um 17:18:49 Uhr
Goto Top
Top, versteh es, danke dir! Versuche gerade das Problem zu beheben, dass er restliche Daten, die täglich in diesen Arbeitsblättern gepflegt werden, löscht. Ich schaue mal was die Lösung dafür ist.
3803037559
3803037559 14.09.2022 aktualisiert um 17:59:54 Uhr
Goto Top
dass er restliche Daten, die täglich in diesen Arbeitsblättern gepflegt werden, löscht.
Macht das Skript doch hiermit.
wsNew.UsedRange.Clear
Denn sonst würde ja ein Mischmasch entstehen wenn du das Skript erneut anwendest, und da noch alte Zeilen von vorher stehen ...
Bastian94
Bastian94 14.09.2022 um 18:55:17 Uhr
Goto Top
Ja das hab ich rauslesen können. Mit „restlichen Daten“ sind weitere Tabellen gemeint, die außerhalb der zu importierenden Tabellen (Range(A1:I1)) schon vorhanden sind. Es wird also der komplette Inhalt im jeweiligen Arbeitsblatt gelöscht…
3803037559
3803037559 14.09.2022 um 19:21:56 Uhr
Goto Top
Sonst wir hier nichts gelöscht.
Bastian94
Bastian94 19.09.2022 aktualisiert um 12:24:00 Uhr
Goto Top
Hab das heute mehrmals getestet. Der komplette Content im Arbeitsblatt wird gelöscht und die Tabelle importiert.
3803037559
3803037559 19.09.2022 aktualisiert um 12:28:48 Uhr
Goto Top
Zitat von @Bastian94:

Hab das heute mehrmals getestet. Der komplette Content im Arbeitsblatt wird gelöscht und die Tabelle importiert.

Habe ich ich doch oben schon geschrieben..
wsNew.UsedRange.Clear
löscht jeglichen Inhalt des Sheets, aber niemals das Sheet ansich !!!!!!
Denn würdest du das nicht machen und in dem Bereich des Einfügens schon was stehen und der kopierte Inhalt kürzer sein als das was da vorher schon steht gibt's ja inkonsinstenzen ...
Also nochmal dein Vorhaben genau überdenken... Anpassen darst du ja gerne auch selbst, wir kennen deinen Workflow nicht!!!!!
Bastian94
Bastian94 19.09.2022 um 12:28:09 Uhr
Goto Top
Achso dann ich hab ich das falsch vestanden...sorry

Jeglicher Inhalt soll nicht gelöscht werden, sondern nur die Range von Spalte A:I, wo die Tabelle täglich eingefügt wird :D
3803037559
3803037559 19.09.2022 aktualisiert um 12:43:48 Uhr
Goto Top
Zitat von @Bastian94:
Jeglicher Inhalt soll nicht gelöscht werden, sondern nur die Range von Spalte A:I, wo die Tabelle täglich eingefügt wird :D
Siehe mein ergänzter Hinweis dazu im letzten Kommentar.
Und warum änderst du das dann nicht passend??? Koppschüttel, wohl mal wieder copy n paster syndrom.
wsNew.Range("A:I").Clear  
s. A. o.

me => out. Schließen bitte nicht vergessen.
Cheers
cg
Bastian94
Bastian94 19.09.2022 um 13:43:30 Uhr
Goto Top
Ich hab nicht gesehen, dass du den Code angepasst hast. So passt es perfekt. Danke dir für die Mühe!
Gruß
Basti