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

Forumthread: Letzte und vorletzte Zeile löschen

Letzte und vorletzte Zeile löschen
09.12.2021 12:33:00
Frank
Hallo, ich krieg es trotz vieler Beispiele im Netz einfach nicht hin.
- es soll die letzte Zeile gelöscht werden
- es darf die erste Zeile (Überschrift) nicht gelöscht werden
- wenn in letzter Zeile in Spalte B ein "Ja" vorhanden ist sollen die letzten zwei Zeilen gelöscht werden
Hört sich einfach an, dennoch bin für eine Unterstützung dankbar.
Gruß Frank.
Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 12:40:05
UweD
Hallo
in ein Modul

Sub Frank()
Dim LR As Long
LR = Cells(Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte
If LR >= 3 And Cells(LR, 2) = "Ja" Then
Rows(LR - 1).Resize(2).Delete
End If
End Sub
LG UweD
Update..
09.12.2021 12:48:02
UweD

Sub Frank()
Dim LR As Long, iJ As Integer
LR = Cells(Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte
If LR >= 2 Then
If LR > 3 And Cells(LR, 2) = "Ja" Then iJ = 1
Rows(LR).Offset(-iJ).Resize(1 + iJ).Delete
End If
End Sub
LG UweD
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 12:45:26
volti
Hallo Frank,
eine Idee...
Code:

[Cc]

Sub LetzteZeileLoeschen() Dim iZeile As Long iZeile = Cells(Rows.Count, "B").End(xlUp).Row If Cells(iZeile, "B").Value = "ja" Then Rows(iZeile & ":" & (iZeile - 1)).Delete Else Rows(iZeile & ":" & iZeile).Delete End If End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 12:49:55
volti
Überschrift vergessen...
Code:

[Cc]

Sub LetzteZeileLoeschen() Dim iZeile As Long iZeile = Cells(Rows.Count, "B").End(xlUp).Row If Cells(iZeile, "B").Value = "ja" Then If iZeile > 2 Then Rows(iZeile & ":" & (iZeile - 1)).Delete Else If iZeile > 1 Then Rows(iZeile & ":" & iZeile).Delete End If End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 13:00:06
Frank
Vielen Dank,
jetzt löscht er mir aber nicht die letzte Zeile wenn in Spalte B nichts eingetragen wurde
AW: Letzte und vorletzte Zeile löschen
09.12.2021 13:07:27
volti
Hallo Frank,
zur Ermittlung der letzten Zeile musst Du dir eine Spalte aussuchen, anhand der Du das ermitteln willst. Ich hatte jetzt "B" genommen, also wird hier auch die letzte Zeile, in der in "B" was steht genommen. Du kannst ja auch z.B. "C" verwenden.
iZeile = Cells(Rows.Count, "C").End(xlUp).Row
Gruß KH
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 13:15:48
Frank
Vielen Dank, war mein Fehler!
Gruß Frank
AW: Letzte und vorletzte Zeile löschen
09.12.2021 13:40:42
Frank
Mist, ich war nicht weitsichtig genug...
Ich habe zusätzlich eine ListBox in welcher ich die zu löschende Zeile auswähle.

Dim i As Long
For i = 0 To ListBox1.ListCount - 1 '(-1 wegen Row.Source)
If ListBox1.Selected(i) = True Then
Sheets("TabStromEG").Rows(i + 2).EntireRow.Delete
End If
Next
Wenn nun eine Zeile ausgewählt wird in welche in Spalte B "Ja" steht soll überprüft werden ob in der Zeile darüber ODER eine Zeile darunter auch ein "Ja" in Spalte B steht -> dies dann zusätzlich auch löschen...
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 14:31:47
Frank
Wie kann man innerhalb der ListBox erkennen ob in der ausgewählten Zeile an zweiter Stelle ein "Ja" vorhanden und wenn dieses der Fall ist überprüfen ob ein "Ja" darüber oder darunter auch vorkommt und beide Einträge mit "Ja" dann löschen?
Gruß Frank
AW: Letzte und vorletzte Zeile löschen
09.12.2021 14:55:05
volti
Hallo Frank,
ich kenne Deine Listbox und auch die Rückgabe der Listbox nicht.
Wenn diese eine Zeilennummer zurückgibt, gilt doch der Restcode so wie von mir oder Uwe (bei dem Du Dich auch für seinen Einsatz bedanken solltest) weiterhin.
iZeile = VonListbox
  If Cells(iZeile, "B").Value = "ja" Then
     If iZeile > 2 Then Rows(iZeile & ":" & (iZeile - 1)).Delete
  Else
     If iZeile > 1 Then Rows(iZeile & ":" & iZeile).Delete
  End If
Gruß KH
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 15:40:00
Frank
Hallo Karl-Heinz,
ich weiß nicht ob ich dich richtig verstanden habe, aber ich denke das ich in meinem verwendeten ListBox-Code nur eine Rückgabe erhalte ob eine Zeile ausgewählt wurde oder nicht.
Bisher verwendeter Code:

Dim i As Long
For i = 0 To ListBox1.ListCount - 1 '(-1 wegen Row.Source)
If ListBox1.Selected(i) = True Then
Sheets("TabStromEG").Rows(i + 2).EntireRow.Delete
End If
Next
Deshalb kann ich deine Abfrage hier auch nicht einbauen oder sehe ich das falsch?
Vielleicht denke ich aber auch nur viel zu kompliziert.
Gruß Frank
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 15:52:46
volti
Hallo FRank,
ins Blaue und ungetestet. Kannst Du ggf. noch verfeinern.
Ansonsten wäre eine Beispielmappe sinnvoll.
Dim i As Long

  For i = 0 To ListBox1.ListCount - 1 '(-1 wegen Row.Source)
    If ListBox1.Selected(i) = True Then
       With Sheets("TabStromEG")
            If .Cells(i, "B").Value = "ja" Then
               If i > 2 Then .Rows(i & ":" & (i - 1)).Delete
            Else
               If i > 1 Then .Rows(i & ":" & i).Delete
            End If
        End With
    End If
  Next i
Gruß KH
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 16:42:09
Frank
Vielen Dank für deine Unterstützung, Karl-Heinz!
Irgendwie verstehe ich die Parameter nicht richtig...
bei Verwendung dieses Codes löscht es mir die Nein-Zeilen 2 Zeilen zu hoch und die Ja-Zeilen scheinen nicht erkannt zu werden und werden deshalb wie die Nein-Zeilen 2 Zeilen zu hoch gelöscht...?
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 17:03:58
Frank
Nachdem ich noch einiges Tests durchlaufen habe folgendes Ergebnis:
- Nein-Zeilen werden 2 Zeilen zu hoch gelöscht (wie kann der Offset verändert werden?)
- Ja-Zeilen werden erkannt und die darüberliegende Ja-Zeile mit gelöscht (hier aber auch das Offset-Problem, habe hierfür mal extra 2 Zeilen darunter zum Löschen ausgewählt)
- es wird nur die darüberliegende Ja-Zeile gelöscht, sollte sich die zweite Ja-Zeile allerdings darunter befinden wird diese nicht mit gelöscht
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 17:12:22
volti
Hier noch ein Versuch.
Ohne Mappe schwer zu testen.....
Dim i As Long, Offs1 As Integer, Offs2 As Integer

  For i = 0 To ListBox1.ListCount - 1 '(-1 wegen Row.Source)
    If ListBox1.Selected(i) = True Then
       With Sheets("TabStromEG")
            i = i + 2
MsgBox CStr(i)                                  ' Hier schaun, ob richtige Zeile
            If .Cells(i, "B").Value = "Ja" Then         ' In B steht "Ja"
               If .Cells(i, "B").Offset(-1, "B").Value = "Ja" Then Offs1 = 1
               If .Cells(i, "B").Offset(1, "B").Value = "Ja" Then Offs2 = 1
               If (i - Off1) > 1 Then
                  .Rows((i - Offs1) & ":" & (i + Offs2)).Delete
               End If
            Else                                        ' In B steht kein "Ja"
               If i > 1 Then .Rows(i & ":" & i).Delete  ' Diese Zeile löschen
            End If
        End With
        Exit For                                        ' Es kann nur eine Listwert true sein
    End If
  Next i
Gruß KH
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 19:55:57
Frank
Hallo Karl-Heinz,
vielen Dank für deinen Versuch!
Durch das Beispiel konnte ich viel dazulernen und hat meine Sichtweise ein kleines Stück weitergebracht.
Gruß Frank
AW: Letzte und vorletzte Zeile löschen
09.12.2021 18:15:21
Daniel
Hi
probiers mal so:

dim rngLösch as range
Dim i As Long
For i = 0 To ListBox1.ListCount - 1 '(-1 wegen Row.Source)
If ListBox1.Selected(i) = True Then
With Sheets("TabStromEG").Rows(i + 2, 2)
set rngLösch = .Cells
if .value = "ja" Then
if .offset(-1, 0).value = "ja" then Set rngLösch = union(rngLösch, .offset(-1, 0)
if .offset(1, 0).value = "ja" then Set rngLösch = union(rngLösch, .offset(1, 0)
end if
rngLösch.EntireRow.Delete
End with
End If
Next
Gruß Daniel
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 18:25:59
Frank
Vielen Dank,
die zwei Zeilen mit union bringen noch Fehler, müssen diese nicht noch definiert werden?
AW: Letzte und vorletzte Zeile löschen
09.12.2021 19:25:14
Daniel
Nö. Ich hab nen Tippfehler drin
Zähl mal die Klammern durch.
Vielleicht kannst du den Fehler selber finden und korrigieren
Und mach mal aus dem
With Sheets("TabStromEG").Rows(i + 2, 2)
Das hier:
With Sheets("TabStromEG").Cells(i + 2, 2)
Gruß Daniel
Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 19:53:34
Frank
Da hast du natürlich recht, noch eine andere Kleinigkeit korrigiert und läuft!
Vielen Dank!!
Gruß Frank
AW: Letzte und vorletzte Zeile löschen
09.12.2021 13:09:00
UweD
dann so
es wird jetzt die letzte Zeile des gesamten Blattes verwendet

Sub Frank()
Dim LR As Long, iJ As Integer
LR = Cells.SpecialCells(xlCellTypeLastCell).Row 'Letzte Zeile des gesamten Blattes
If LR >= 2 Then
If LR > 3 And Cells(LR, 2) = "Ja" Then iJ = 1
Rows(LR).Offset(-iJ).Resize(1 + iJ).Delete
End If
End Sub

Anzeige
AW: Letzte und vorletzte Zeile löschen
09.12.2021 15:41:20
Frank
Sorry für verspätete Antwort.
Funktioniert ebenso wie die Variante von Karl-Heinz, vielen Dank.
;

Forumthreads zu verwandten Themen

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 und vorletzte Zeilen in Excel löschen


Schritt-für-Schritt-Anleitung

Um die letzte und vorletzte Zeile in Excel zu löschen, kannst du ein einfaches VBA-Makro verwenden. Folgendes Beispiel zeigt, wie du dies umsetzen kannst:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul.

  3. Füge den folgenden Code ein:

    Sub LetzteZeileLoeschen()
       Dim LR As Long
       LR = Cells(Rows.Count, "B").End(xlUp).Row 'letzte Zeile der Spalte B
       If LR >= 2 Then
           If Cells(LR, 2) = "Ja" Then
               Rows(LR - 1 & ":" & LR).Delete 'lösche die letzten zwei Zeilen
           Else
               Rows(LR).Delete 'lösche die letzte Zeile
           End If
       End If
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus.


Häufige Fehler und Lösungen

  • Problem: Das Makro löscht nicht die letzte Zeile, wenn in Spalte B kein "Ja" steht.

    • Lösung: Stelle sicher, dass du die richtige Spalte überprüfst. Du kannst die Spalte in der Zeile LR = Cells(Rows.Count, "B").End(xlUp).Row anpassen.
  • Problem: Es wird eine Fehlermeldung angezeigt.

    • Lösung: Überprüfe, ob du das Makro in der richtigen Tabelle ausführst. Das Tastenkürzel ALT + F8 hilft dir, das Makro auszuwählen.

Alternative Methoden

Eine andere Möglichkeit besteht darin, die Excel-Funktion FILTER zu verwenden, wenn du nur leere Zeilen aus einer Liste entfernen möchtest. Dies ist besonders nützlich, wenn du eine dynamische Liste hast, die sich häufig ändert.

=FILTER(A1:B10, A1:A10<>"")

Diese Formel filtert nur die nicht-leeren Zeilen aus und zeigt sie an.


Praktische Beispiele

  1. Löschen von Zeilen basierend auf einer ListBox-Auswahl: Wenn du eine ListBox verwendest, um Zeilen auszuwählen, kannst du den folgenden Code verwenden:

    Dim i As Long
    For i = 0 To ListBox1.ListCount - 1
       If ListBox1.Selected(i) Then
           Sheets("TabStromEG").Rows(i + 2).EntireRow.Delete
       End If
    Next

    Dieser Code löscht die ausgewählten Zeilen basierend auf der ListBox.

  2. Erweiterung der Löschfunktionalität: Um auch benachbarte Zeilen zu löschen, wenn ein "Ja" in der ausgewählten Zeile steht:

    Dim rngLösch As Range
    Dim i As Long
    For i = 0 To ListBox1.ListCount - 1
       If ListBox1.Selected(i) Then
           With Sheets("TabStromEG").Cells(i + 2, 2)
               Set rngLösch = .Cells
               If .Value = "Ja" Then
                   If .Offset(-1, 0).Value = "Ja" Then Set rngLösch = Union(rngLösch, .Offset(-1, 0))
                   If .Offset(1, 0).Value = "Ja" Then Set rngLösch = Union(rngLösch, .Offset(1, 0))
               End If
               rngLösch.EntireRow.Delete
           End With
       End If
    Next

Tipps für Profis

  • Nutze das Excel-Tastenkürzel STRG + -, um schnell eine Zeile zu löschen, wenn du sie ausgewählt hast.
  • Verwende die Funktion Push zeilen nicht leer, um sicherzustellen, dass deine Zeilen dynamisch aktualisiert werden.
  • Um Zeilennummern ab einer bestimmten Zeile in Word zu integrieren, kannst du die Word-Funktion Zeilennummern verwenden, um deine Dokumente zu organisieren.

FAQ: Häufige Fragen

1. Wie finde ich die letzte Zeile in einer Excel-Tabelle?
Du kannst die letzte Zeile mit dem Befehl Cells(Rows.Count, "B").End(xlUp).Row finden, wobei "B" die Spalte ist, die du überprüfen möchtest.

2. Kann ich ein Tastenkürzel für das Löschen von Zeilen erstellen?
Ja, du kannst ein Makro mit einem bestimmten Tastenkürzel verknüpfen, indem du im VBA-Editor auf Extras > Makros > Optionen gehst und ein Kürzel festlegst.

3. Was ist der Unterschied zwischen Delete und Clear in Excel?
Delete entfernt die gesamte Zeile oder Spalte, während Clear nur den Inhalt entfernt, die Struktur jedoch beibehält.

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