Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilen löschen - Excel stürzt ab

Zeilen löschen - Excel stürzt ab
24.04.2021 18:39:28
marc
Hallo liebes Forum,
ich habe ein Skript geschrieben, mit dessen Hilfe Zeilen gelöscht und neue aus einer anderen Arbeitsmappe hinzugefügt werden sollen. Eigentlich funktioniert(e) alles. Es scheint mir jedoch so, dass es ab einer größeren Menge von zu löschenden Zeilen ein Problem gibt.
Für das Löschen der Zeilen habe ich eine Funktion geschrieben. Nachdem das Makro eine Weile läuft erhalte ich wahlweise einen Laufzeitfehler -02147417848 (80010108)' oder Excel schließt sich irgendwann einfach komplett. Bis wohin das Makro dann schon gelaufen sein könnte, weiß ich nicht.
Der Code sieht so aus:

Function zeilen_loeschen(sht As Worksheet, spalte As Long)
Dim rng As Range
Dim lzeile As Long
lzeile =  sht.Cells(Rows.Count, 1).End(xlUp).Row
With sht
Set rng = .Range(.Cells(1, 1), .Cells(lzeile, spalte))
With rng
.AutoFilter Field:=spalte, Criteria1:="angemeldet"
.Offset(5, 0).Resize(.rows.count - 5).SpecialCells(xlCellTypeVisible).rows.Delete
End With
With sht
.AutoFilterMode = False
If .FilterMode = True Then
.ShowAllData
End If
End With
End With
End Function

Call zeilen_loeschen(Mappe1, 39)
Das Workbook enthält ca 5000 Zeilen und davon müssen ca 40 gelöscht werden. Mit weniger zu löschenden Zeilen scheint es zu laufen.
Ist im Code etwas suboptimal oder weiß jemand was der Laufzeitfehler bedeuten könnte?
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen - Excel stürzt ab
24.04.2021 19:51:44
onur
Du hast innerhalb von der "With Sheet"-Schleife noch eine "With Sheet"-Schleife.
Abgesehen davon: wenn du eine Zeile löschst, erweitert sich der Bereich rng um eine Zeile nach unten und somit "ensteht" eine sichtbare Zeile, die wiederum gelöscht werden muss usw usw.
Mehr kann ich nur sagen, wenn du die Datei postest.
Anzeige
AW: Zeilen löschen - Excel stürzt ab
24.04.2021 23:09:53
Yal
Hallo Marc,
Wenn es ein Feld gibt, nach dem Du wieder in originaler Reihenfolge sortieren kannst, würde ich vor dem Löschen nach dem Feld, wo "angemeldet" liegt, sortieren. Dann sind alle Einträge in einem Block und das Löschen sollte weniger anfällig sein.
VG
Yal
AW: Zeilen löschen - Excel stürzt ab
28.04.2021 20:33:31
Marc
Hallo Yal,
vielen Dank für den Vorschlag, das funktioniert super. Ich lasse das Makro einfach in einer leeren Spalte einen Zeilenindex erstellen, anhand dessen ich nach dem Löschen der Zeilen alles "zurücksortieren" kann. Also:
1. Indexspalte erzeugen
2. Alle Daten nach "angemeldet" sortieren, so dass alle zu löschenden Zeilen zusammenhängen
3. Die "angemeldet" Zeilen löschen
4. Alle Daten nach Index aus der erzeugten Indexspalte sortieren, so dass die Daten wieder die ursprüngliche Reihenfolge haben
Läuft stabil und schnell, selbst bei riesigen Datenmengen!
Anzeige
AW: Zeilen löschen - Excel stürzt ab
29.04.2021 17:49:02
Yal
Hallo Marc,
Eine Hilfspalte mit originaler Reihenfolge ist nicht mehr "Basiskenntnisse in VBA" sondern Profi ;-)
Du hast vergessen:
5. temporäre index wieder löschen.
VG
yal
Index-Spalte + Test
29.04.2021 18:10:36
Yal
Hallo Marc,
der Beitrag von Daniel hat mich auf folgender Idee gebracht: bei dem Herstellen der Index Spalte testen, ob in der aktuelel Zeile "angemeldet" vorliegt und in dem Fall "99999" eintragen. Es reduziert sich auf:
_ Index inkl. Test erzeugen
_ nach Index sortieren. 99999 ist dann am Ende
_ Filtern nach 99999
_ visible löschen
_ unfiltern
_ Index Löschen
Wobei am einfachste weiterhin das "direktes Löschen" bleibt:

Sub Zeilen_loeschen(WS As Worksheet, SpalteNr As Long, LöschKey As String, Optional ErsteZeile = 2, Optional LetzteZeile = 999999)
Dim r
If LetzteZeile = 999999 Then LetzteZeile = WS.Cells(999999, SpalteNr).End(xlUp).Row
Application.ScreenUpdating = False
For r = LetzteZeile To ErsteZeile Step -1
If StrComp(WS.Cells(r, SpalteNr).Value, LöschKey, vbTextCompare) Then wb.Cells(r, 1).EntireRow.Delete
Next
Application.ScreenUpdating = True
End Sub
(Beim Einfügen/Löschen immer von "hinten" rangehen. Siehe "Step -1")
VG
Yal
Anzeige
AW: Zeilen löschen - Excel stürzt ab
25.04.2021 10:38:24
GerdL
Moin,
teste mal an einer Kopie.

Function zeilen_loeschen(sht As Worksheet, spalte As Long)
Dim lzeile As Long
With sht
lzeile = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range(.Cells(1, 1), .Cells(lzeile, spalte))
If WorksheetFunction.CountIf(.Columns(spalte), "angemeldet") > 0 Then
.AutoFilter Field:=spalte, Criteria1:="angemeldet"
.AutoFilter.Range.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter
End If
End With
End With
End Function
Gruß Gerd
Anzeige
AW: Zeilen löschen - Excel stürzt ab
28.04.2021 20:38:00
Marc
Hallo Gerd,
vielen Dank für den Vorschlag. Allerdings bekomme ich bei dieser Codezeile eine Fehlermeldung, nämlich dass nach einem Objekt verlangt wird:

.AutoFilter.Range.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete

AW: Zeilen löschen - Excel stürzt ab
28.04.2021 20:52:52
Daniel
Hi
beim Löschen von Zeilen auf diesem Weg ist die entscheidende Kenngröße, aus wie vielen einzelnen getrennten Zellbereichen das ganze Feld zusammengesetzt ist.
das Löschen von 1:1000 ist für Excel nicht aufwendiger als das Löschen einer einzigen Zeile, weil es ebenfalls nur ein einziger zusammenhängender Zellbereich ist. Das Löschen der Zeilen 1 und 3 (ohne die 2 dazwischen bedeutet hingegen den doppelten Aufwand.
Wobei 40 zu löschenende Zeilen jetzt nicht viel sind, das sollte Excel schon schaffen, egal wie vereinzelt die sind.
Trotzdem würde ich nicht den Autofilter zum Löschen von Zeilen verwenden, sondern das Duplikate entfernen.
das ist dabei schneller und leistungfähiger und hat kein Problem, egal wieviele Zeilen du löschst.
hierzu kennzeichnet man die zu löschenden Zeilen per Formel in einer Hilfsspalte mit 0 und die die stehen bleiben sollen mit der Zeilennummer.
dann wendet man das Duplikate entfernen an und die Zeilen mit 0 werden gelöscht.
der Code dafür sieht so aus:

with sht.usedrange
with .columns(.columns.count + 1)
.Formular1c1 = "=IF(row()
was mir an deinem Code auffällt ist das "..Rows.Delete". ich verwende an dieser Stelle wenn ganze Zeilen gelöschst werden sollen: ".EntireRow.Delete"
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zeilen effizient löschen in Excel ohne Abstürze


Schritt-für-Schritt-Anleitung

Um Zeilen in Excel effizient zu löschen, ohne dass Excel sich schließt oder Fehler auftreten, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Indexspalte erstellen: Füge eine Hilfspalte ein, um einen Zeilenindex zu erstellen. Dies hilft, die Originalreihenfolge nach dem Löschen wiederherzustellen.

  2. Daten sortieren: Sortiere die Daten nach der Spalte, in der die zu löschenden Einträge (z.B. "angemeldet") stehen. Dadurch sind alle zu löschenden Zeilen zusammenhängend.

  3. Zeilen löschen: Verwende ein Makro oder VBA, um die gewünschten Zeilen zu löschen. Beispielcode:

    Sub Zeilen_loeschen(WS As Worksheet, SpalteNr As Long, LöschKey As String, Optional ErsteZeile = 2, Optional LetzteZeile = 999999)
       Dim r
       If LetzteZeile = 999999 Then LetzteZeile = WS.Cells(WS.Rows.Count, SpalteNr).End(xlUp).Row
       Application.ScreenUpdating = False
       For r = LetzteZeile To ErsteZeile Step -1
           If StrComp(WS.Cells(r, SpalteNr).Value, LöschKey, vbTextCompare) = 0 Then
               WS.Cells(r, 1).EntireRow.Delete
           End If
       Next r
       Application.ScreenUpdating = True
    End Sub
  4. Ergebnisse prüfen: Überprüfe die Arbeitsmappe, um sicherzustellen, dass die gewünschten Zeilen gelöscht wurden.

  5. Indexspalte löschen: Entferne die Hilfspalte, sobald du die Daten in die ursprüngliche Reihenfolge zurücksortiert hast.


Häufige Fehler und Lösungen

  • Excel schließt sich einfach: Dies könnte an einer zu großen Anzahl an zu löschenden Zeilen liegen. Stelle sicher, dass du die Daten in einer Hilfsspalte vorverarbeitest.

  • Laufzeitfehler -2147417848 (80010108): Dieser Fehler tritt häufig auf, wenn Excel bei der Verarbeitung überlastet ist. Reduziere die Anzahl der Zeilen, die du auf einmal verarbeiten möchtest.

  • Excel kann Zeile nicht löschen: Prüfe, ob die Zeile gesperrt oder durch eine Datenüberprüfung geschützt ist. In diesem Fall musst du die Datenüberprüfung in Excel löschen, bevor du die Zeile entfernst.


Alternative Methoden

Wenn die oben beschriebene Methode nicht funktioniert, können folgende Alternativen helfen:

  • Duplikate entfernen: Markiere die zu löschenden Zeilen mit einer Formel in einer Hilfsspalte, setze einen Wert für die zu behaltenden Zeilen, und verwende die Funktion "Duplikate entfernen".

  • Google Sheets verwenden: Wenn du auf Probleme mit Excel stößt, könntest du auch Google Sheets verwenden, um leere Zeilen zu löschen. Die Funktion ist ähnlich, aber manchmal stabiler bei großen Datenmengen.


Praktische Beispiele

Hier sind einige praktische Beispiele für das Löschen von Zeilen:

  1. Beispiel für das Löschen von Zeilen, die "angemeldet" enthalten:

    Call Zeilen_loeschen(ThisWorkbook.Sheets("Tabelle1"), 39, "angemeldet")
  2. Beispiel mit Datenüberprüfung: Wenn du eine Datenüberprüfung in Excel hast, die einige Zeilen schützt, stelle sicher, dass du diese zuerst löschst, bevor du die Zeilen entfernst.


Tipps für Profis

  • Performance-Optimierung: Verwende Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Performance beim Löschen von Zeilen zu verbessern.

  • Makros verwenden: Erstelle ein Makro, das regelmäßig die Anzahl der Zeilen reduziert, insbesondere wenn du oft große Datenmengen bearbeitest.

  • Sicherheitskopien: Teste jede Änderung an einer Kopie deiner Arbeitsmappe, bevor du Änderungen an der Originaldatei vornimmst.


FAQ: Häufige Fragen

1. Warum kann Excel einige Zeilen nicht löschen? Manchmal sind Zeilen durch Formate oder Datenüberprüfungen geschützt. Überprüfe die Einstellungen und entferne diese, bevor du versuchst, die Zeilen zu löschen.

2. Was tun, wenn Excel sich beim Löschen von Zeilen schließt? Reduziere die Anzahl der Zeilen, die du auf einmal löschst, oder versuche die Daten in einer Hilfsspalte vorzuverarbeiten, um die Last zu verringern.

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