Microsoft Excel

Herbers Excel/VBA-Archiv

letzte Zeile finden und kopieren + weitere Zeilen


Betrifft: letzte Zeile finden und kopieren + weitere Zeilen von: Uwe
Geschrieben am: 28.04.2017 11:20:02

Hallo zusammen,

ich habe eine Tabelle (siehe hier: https://www.herber.de/bbs/user/113168.xlsm),
in der ich gerne die letzte beschriebene Zeile in Spalte A finden möchte. Diese Zeile und die darüberliegenden 8 Zeilen sollen kopiert und unter der letzten beschriebenen Zeile (ebenfalls der Spalte A) eingefügt werden.

Ich bekomme es mit folgendem Makro hin, die letzte Zeile zu finden und kopieren, weiß aber nicht, wie ich es mit den darüberliegenden 8 Zeilen machen soll. Über Hilfe würde ich mich sehr freuen.

Am besten sollen bestimmte Zellen des kopierten Zellbereiches noch "geleert" werden (in den Beispieldatei wäre es dann die Zellen B23 und C23).

Vielen Dank vorab und beste Grüße
Uwe

  

Betrifft: AW: letzte Zeile finden und kopieren + weitere Zeilen von: Uwe
Geschrieben am: 28.04.2017 11:21:42

der korrekte link zur Datei lautet natürlich: https://www.herber.de/bbs/user/113168.xlsm


  

Betrifft: AW: letzte Zeile finden und kopieren + weitere Zeilen von: Werner
Geschrieben am: 28.04.2017 13:13:30

Hallo Uwe,

Option Explicit

Sub Zeilen_kopieren()
Dim loLetzte As Long
    With Worksheets("Tabelle1")
        loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Rows(loLetzte - 8 & ":" & loLetzte).Copy .Rows(loLetzte + 1)
        .Range(Cells(loLetzte, 2), .Cells(loLetzte, 3)).ClearContents
    End With
End Sub
Gruß Werner


  

Betrifft: AW: letzte Zeile finden und kopieren + weitere Zeilen von: Uwe
Geschrieben am: 28.04.2017 13:47:02

Hallo Werner,

besten Dank für deine schnelle Antwort! Klappt soweit super! Ich habe leider nicht ganz präzise geschildert, wie das "Leeren" der Zellen funktionieren soll. Ich meinte nicht, dass aus dem "alten" Bereich etwas gelöscht wird, sondern aus dem Zellbereich, den ich mit dem Makro eingefügt habe. Hierbei handelt es sich dann z.B. um B28 und C29 (meine Beispiele B23 und C 23 waren im ersten Threat schlecht gewählt, sorry). Ich habe versucht, einfach dein "loletzte" zu ersetzen durch eine 1, was leider nicht zum Erfolg führte:

Sub Zeilen_kopieren()
   Dim loLetzte As Long
    With Worksheets("Tabelle1")
        loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Rows(loLetzte - 8 & ":" & loLetzte).Copy .Rows(loLetzte + 1)
        .Range(Cells(1, 2), .Cells(1, 3)).ClearContents
    End With

End Sub

Zudem habe ich das Worksheet ersetzt mit "ActiveSheet", da ich das Makro in mehreren Blättern nutzen möchte. Das sollte passen oder? Zumindest meinen VErsuchen nach hats geklappt :).

Danke und viele Grüße
Uwe


  

Betrifft: Rückfrage von: Werner
Geschrieben am: 28.04.2017 15:48:09

Hallo Uwe,

B28 und C29
ist das so richtig?

oder meinst du
B28 und C28

und warum ausgerechnet B28?

Immer die fünfte Zeile in Spalte B des neu eingefügten Bereiches, oder an was machst du das fest, was gelöscht/geleert werden soll? Du schreibst nämlich "zum Beispiel"??

Gruß Werner


  

Betrifft: AW: Rückfrage von: Uwe
Geschrieben am: 29.04.2017 19:19:57

Hi Werner,

besten Dank für deine abermalige Rückmeldung. Mache dich nicht an den angegebenen Zellen B28, C29 fest.

Im Endeffekt soll es so sein, wie du in deinem letzten Satz angedeutet hast: im Bereich, der durch dein Makro eingefügt wurde, sollen nach dem einfügen immer bestimmte Zellen geleert werden. Um bei den Beispielzellen zu bleiben so wie du schreibst immer die fünfte Zeile/zweite Spalte. Meine originaldatei ist größer und insb. mehrspaltiger als das Beispiel.

Was ich eigentlich möchte, ist, dass in demjenigen Zellbereich, der durch Deinen Code unterhalb eingefügt wurde, bestimmte Zellen geleert werden. Als Laie würde ich sagen, man muss den eben eingefügten Bereich selektieren und dann sagen: "leere in diesem Bereich die Zellen (2,2), (4,5), (7,9)". Diese Zeilen/Spaltenangaben sind momentan nur Dummies, da ich noch nicht genau weiß, welche Zellen es genau sein werden (die eingangs angefügte Datei ist nur ein vereinfachtes Beispiel meiner eigentlichen Datei, in Summe werden es wahrscheinlich 6 verschiedene Zellen sein, die geleert werden müssen).

Habe es hier nochmal versucht zu veranschaulichen, was ich genau möchte. Hoffe es wird dadurch verständlicher. https://www.herber.de/bbs/user/113199.xlsx

Danke und viele GRüße
Uwe


  

Betrifft: AW: Rückfrage von: Werner
Geschrieben am: 29.04.2017 20:00:37

Hallo Uwe,

da braucht man nichts zu selektieren. Das kannst du doch alles über die Variable loLetzte händeln.
Du weißt ja, dass loLetzte die letzte beschriebene Zelle/Zeile ist.
Eingefügt wird eine Zeile darunter. Also ist die erste Zeile des eingefügten Bereichs loLetzte + 1.
Darüber lässt sich doch alles steuern.

Wenn du in der zweiten Zeile des eingefügten Bereichs die Zelle in Spalte B leeren willst dann:

.Cells(loLetzte + 2, 2).ClearContents
Die dritte Zeile des eingefügten Bereichs Spalte C wäre dann:
.Cells(loLetzte + 3, 3).ClearContents
Und so weiter und so fort.

Gruß Werner


  

Betrifft: AW: Rückfrage von: Uwe
Geschrieben am: 02.05.2017 08:48:42

Hallo Werner,

vielen Dank! Das klingt logisch und funktioniert einwandfrei.

Besten Dank für deine Unterstützung und viele Grüße!

Uwe


  

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T. von: Werner
Geschrieben am: 02.05.2017 08:57:05




  

Betrifft: AW: letzte Zeile finden und kopieren + weitere Zeilen von: Wolfgang
Geschrieben am: 28.04.2017 15:58:23

Hallo Werner,
wenn ich es richtig verstanden habe,
dann sollen doch die letzten 8 Zeilen ab der letztbeschriebenen Zelle in Spalte A nach unten kopiert werden?
Dann paßt doch der Code von Uwe:
ption Explicit

Sub Zeilen_kopieren()
 Dim loLetzte As Long
     With Worksheets("Tabelle1")
         loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
         .Rows(loLetzte - 8 & ":" & loLetzte).Copy .Rows(loLetzte + 1)
         .Range(Cells(loLetzte, 2), .Cells(loLetzte, 3)).ClearContents
     End With
 End Sub
Du musst die Zeile

.Range(Cells(loLetzte, 2), .Cells(loLetzte, 3)).ClearContents

auskommentieren,

'.Range(Cells(loLetzte, 2), .Cells(loLetzte, 3)).ClearContents

dann klappt das.

Gruss Wolfgang


  

Betrifft: falscher Ansprechpartner von: Werner
Geschrieben am: 28.04.2017 16:53:16

Hallo Wolfgang,

Uwe hatte die Frage gestellt, der Code ist von mir.

Gruß Werner


  

Betrifft: AW: letzte Zeile finden und kopieren + weitere Zeilen von: Uwe
Geschrieben am: 29.04.2017 19:13:21

Hi Wolfgang,

danke für deine Antwort. Wie schon von Werner geschrieben, ist er der "Zurhilfeeilende" und ich der "Verzweifelte".

Was meinst du genau mit auskommentieren? Ich hatte versucht, "loletzte" durch die Zeilennummer zu ersetzen, in der ich eine Zelle leeren möchte, also

.Range(Cells(2, 2), .Cells(2, 3)).ClearContents
... allerdings ohne Erfolg. Was ich eigentlich möchte, ist, dass in demjenigen Zellbereich, der durch Werners Code unterhalb eingefügt wurde, bestimmte Zellen geleert werden. Als Laie würde ich sagen, man muss den eben eingefügten Bereich selektieren und dann sagen: "leere in diesem Bereich die Zellen (2,2), (4,5), (7,9)". Diese Zeilen/Spaltenangaben sind momentan nur Dummies, da ich noch nicht genau weiß, welche Zellen es genau sein werden (die eingangs angefügte Datei ist nur ein vereinfachtes Beispiel meiner eigentlichen Datei).

Habe es hier nochmal versucht zu veranschaulichen, was ich genau möchte. Hoffe es wird dadurch verständlicher. https://www.herber.de/bbs/user/113199.xlsx

Danke und viele GRüße
Uwe


Beiträge aus den Excel-Beispielen zum Thema "letzte Zeile finden und kopieren + weitere Zeilen"