Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: letzte Zeile finden und kopieren + weitere Zeilen

letzte Zeile finden und kopieren + weitere Zeilen
28.04.2017 11:20:02
Uwe
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
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: letzte Zeile finden und kopieren + weitere Zeilen
28.04.2017 13:13:30
Werner
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
Anzeige
AW: letzte Zeile finden und kopieren + weitere Zeilen
28.04.2017 13:47:02
Uwe
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
Anzeige
Rückfrage
28.04.2017 15:48:09
Werner
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
Anzeige
AW: Rückfrage
29.04.2017 19:19:57
Uwe
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
Anzeige
AW: Rückfrage
29.04.2017 20:00:37
Werner
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
Anzeige
AW: Rückfrage
02.05.2017 08:48:42
Uwe
Hallo Werner,
vielen Dank! Das klingt logisch und funktioniert einwandfrei.
Besten Dank für deine Unterstützung und viele Grüße!
Uwe
Gerne u. Danke für die Rückmeldung. o.w.T.
02.05.2017 08:57:05
Werner
AW: letzte Zeile finden und kopieren + weitere Zeilen
28.04.2017 15:58:23
Wolfgang
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
Anzeige
falscher Ansprechpartner
28.04.2017 16:53:16
Werner
Hallo Wolfgang,
Uwe hatte die Frage gestellt, der Code ist von mir.
Gruß Werner
AW: letzte Zeile finden und kopieren + weitere Zeilen
29.04.2017 19:13:21
Uwe
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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Letzte Zeile in Excel finden und kopieren


Schritt-für-Schritt-Anleitung

Um die letzte Zeile in Excel zu ermitteln und darunter eine Kopie zu erstellen, kannst Du das folgende VBA-Makro verwenden. Es sucht die letzte beschriebene Zeile in Spalte A, kopiert die letzten 8 Zeilen und fügt sie unter der ermittelten letzten Zeile ein.

  1. Öffne die Excel-Datei, in der Du das Makro verwenden möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  4. Füge den folgenden Code ein:

    Option Explicit
    Sub Zeilen_kopieren()
        Dim loLetzte As Long
        With Worksheets("Tabelle1") ' Änder dies zu "ActiveSheet", wenn Du es in verschiedenen Blättern nutzen möchtest
            loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
            .Rows(loLetzte - 8 & ":" & loLetzte).Copy .Rows(loLetzte + 1)
            .Cells(loLetzte + 2, 2).ClearContents ' Beispiel für das Leeren einer Zelle
        End With
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Drücke ALT + F8, wähle Zeilen_kopieren aus und klicke auf Ausführen.

Dieses Makro ermittelt die letzte Zeile, kopiert die gewünschten Zeilen und leeren die definierten Zellen.


Häufige Fehler und Lösungen

  • Fehler: Das Makro findet keine letzte Zeile.

    • Lösung: Stelle sicher, dass Du die richtige Spalte angibst. Der Code sucht in Spalte A nach der letzten beschriebene Zeile.
  • Fehler: Die Zeilen werden nicht korrekt kopiert.

    • Lösung: Überprüfe, ob die Anzahl der zu kopierenden Zeilen im Code korrekt angegeben ist.
  • Fehler: Leere Zellen werden nicht wie gewünscht gelöscht.

    • Lösung: Stelle sicher, dass die richtigen Zellenreferenzen für das .ClearContents verwendet werden.

Alternative Methoden

Wenn Du keine VBA-Programmierung verwenden möchtest, gibt es auch Excel-Formeln, um die letzte Zeile zu finden. Eine Möglichkeit ist die Verwendung der Funktion =VERWEIS(2;1/(A:A<>"");ZEILE(A:A)), die die letzte Zeile mit Inhalt in Spalte A zurückgibt.

Für das Kopieren bis zur letzten Zeile kannst Du die Funktion „Ausfüllen“ verwenden, indem Du die gewünschte Formel in die erste Zelle eingibst und dann den Ausfüllgriff ziehst.


Praktische Beispiele

Hier sind einige praktische Beispiele, die Du verwenden kannst:

  1. Letzte Zeile mit Inhalten ermitteln:

    loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row ' Suche letzte Zeile in Spalte A
  2. Bestimmte Zellen im neuen Bereich leeren:

    .Cells(loLetzte + 2, 2).ClearContents ' Leere Zelle B28 im neuen Bereich
  3. Kopieren bis zur letzten Zeile:

    .Rows(loLetzte - 8 & ":" & loLetzte).Copy .Rows(loLetzte + 1) ' Kopiere die letzten 8 Zeilen

Tipps für Profis

  • Verwende ActiveSheet, wenn Du das Makro in mehreren Arbeitsblättern verwenden möchtest.
  • Du kannst auch Application.ScreenUpdating = False am Anfang des Makros hinzufügen, um die Bildschirmaktualisierung während der Ausführung zu deaktivieren, was die Geschwindigkeit verbessert.
  • Um die letzte Zeile mit einem bestimmten Wert zu finden, kannst Du Find verwenden, um gezielt nach einem Wert in einer Zeile zu suchen.

FAQ: Häufige Fragen

1. Wie kann ich die letzte beschriebene Zeile einer Tabelle ermitteln? Du kannst die Funktion End(xlUp) verwenden, um die letzte Zeile mit Inhalt in der gewünschten Spalte zu finden.

2. Was mache ich, wenn ich mehrere Zellen in der neuen Zeile leeren möchte? Du kannst mehrere .ClearContents-Befehle für die entsprechenden Zellen hinzufügen, z.B.:

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

3. Kann ich das Makro anpassen, um mehr oder weniger Zeilen zu kopieren? Ja, ändere einfach die Zahl 8 im Code .Rows(loLetzte - 8 & ":" & loLetzte) in die gewünschte Anzahl der zu kopierenden Zeilen.

4. Ist dieses Vorgehen auch in Excel Online möglich? Das Makro kann nur in der Desktop-Version von Excel ausgeführt werden, nicht in Excel Online.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige