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

Makro: Falls in einer Zelle "0" Zeile löschen

Forumthread: Makro: Falls in einer Zelle "0" Zeile löschen

Makro: Falls in einer Zelle "0" Zeile löschen
19.12.2006 14:36:41
bion
Hallo!
Ich habe von Makroprogrammierung leider keine Ahnung, könnte aber dringend eines gebrauchen:
Es so schauen, ob in der Zelle B2 eine "0" ist und falls ja die Zeile löschen, falls nicht in die nächste Zeile springen und das gleiche tun - bis zum Ende der Tabelle.
Ich würde das mit einer Schleife und einer IF-Abfrage machen, aber leider kenne ich die VBA Befehle nicht. Für Hilfe wäre ich sehr dankbar!
Gruß,
Bion
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Makro: Falls in einer Zelle "0" Zeile löschen
19.12.2006 14:43:34
Rudi
Hallo,
bemüh doch mal die Suche. 4070 Treffer für Zeile löschen.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
AW: Makro: Falls in einer Zelle "0" Zeile löschen
19.12.2006 14:49:26
UweD
Hallo
prüft nur auf Null, Wenn Zelle leer ist, bleibt die Zeile drin...
Man geht die Sache aber am besten von hinten nach vorne an...

Sub NullRaus()
On Error GoTo Fehler
Dim SP%, ZE&, LR&, TB1, i&
Set TB1 = ActiveSheet
SP = 2 'Spalte B
ZE = 2 'Zeile 2
LR = TB1.Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
Application.ScreenUpdating = False
For i = LR To ZE Step -1
If TB1.Cells(i, SP).Value <> "" And TB1.Cells(i, SP).Value = 0 Then
TB1.Rows(i).EntireRow.Delete
End If
Next
Fehler:
If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
Application.ScreenUpdating = True
End Sub

Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Makro: Falls in einer Zelle "0" Zeile löschen
19.12.2006 15:14:34
bion
Super, das klappt. Vielen Dank! Jetzt muss ich nur noch abwarten, bis meine 60000 Zeilen abgearbeitet sind.
AW: Makro: Falls in einer Zelle "0" Zeile löschen
19.12.2006 15:00:10
Luc:-?
Hallo Bion,
hier ist auch noch was Vglbares.
Gruß Luc :-?
0 Zeilen filtern und löschen per Code
19.12.2006 16:00:00
Beate
Hallo Bion,
wenn in Zeile1 Überschriften liegen geht das sehr schnell:
Sub Null_Zeilen_loeschen_mit_Autofilter()
'Voraussetzung: Liste beginnt in Zeile 1 (Überschriften)
With ActiveSheet.UsedRange ' This Will Take The Whole Cells In The Active Sheet...
    .AutoFilter Field:=2, Criteria1:="0" ' Everything 0
    .Offset(1, 0).Resize(.Rows.Count, .Columns.Count). _
        SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
    .AutoFilter
End With
End Sub


Gruß,
Beate
Anzeige
Achtung AutoFilter-Problem bei vielen Zeilen
19.12.2006 19:48:24
Daniel
Hallo
ich glaube es wurden gerade 60.000 Zeilen erwähnt.
Da wird die Schleife ne weile brauchen und der Autofilter hat das Problem, daß er bei vielen Zeilen (bei mir so ab c.a. 35000) einfach alles löscht, egal ob sichtbar oder nicht.
Ne lösung dafür wäre, die Daten vor dem Filtern und löschen zu SORTIEREN, so daß alle zu löschenden Zeilen LÜCKENLOS untereinander stehen.
Dann hat Excel auch kein Problem mit den vielen Zeilen und es geht superschnell.
dh, Code für Löschen mit Autofilter so modifieren:

Sub Null_Zeilen_loeschen_mit_Autofilter()
'Voraussetzung: Liste beginnt in Zeile 1 (Überschriften)
With ActiveSheet.UsedRange ' This Will Take The Whole Cells In The Active Sheet...
.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
.AutoFilter Field:=2, Criteria1:="0" ' Everything 0
.Offset(1, 0).Resize(.Rows.Count, .Columns.Count). _
SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
.AutoFilter
End With
End Sub

nach dem Löschen kannst du dann ja wieder in die alte Reihenfolge zurücksortieren (so es eine gibt)
Gruß, Daniel
Anzeige
Anderer Ansatz
19.12.2006 20:05:55
Beate
Hallo Daniel,
diese Beschränkung kannte ich nicht - aber stimmt! Danke.
Hier noch eine schnelle Lösung, insofern bisher keine Leerzellen in Spalte B sind:
Sub Null_Zeilen_loeschen()
'geht nur richtig, wenn keine Leerzellen in Spalte B sind!
'die würden sonst ungewollt mitgelöscht
Columns("B:B").Replace 0, "", xlWhole
Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub



Gruß,
Beate
Anzeige
AW: Anderer Ansatz - gleiches Problem
19.12.2006 20:31:45
Daniel
Hallo
auch ne sehr elegante Lösung, wenn keine anderen Leerzellen vorhanden sind, die eigentlich stehen bleiben sollen.
Allerdings besteht hier das gleiche Problem, ab einer bestimmten Zeilenzahl wird die Funktion langsam oder stürzt sogar ganz ab.
Ursache ist aber auch hier wieder nicht die Menge der der Zeilen, sondern die Aufsplitterung.
dh. auch hier sollte vorher sortiert werden.
Sind die Zeilen sortiert, so daß alle zu löschenden Zeilen lückenlos beisammen stehen, gehts rasend schnell, dann spielt die Anzahl der Zeilen fast keine Rolle mehr.
Wer will, kann die verschiedenen Methoden (Schleife, Specialcells) hier mal ausprobieren.
https://www.herber.de/bbs/user/39118.zip
Gruß, Daniel
Anzeige
Replace-Makro zum Zeilenlöschen
20.12.2006 10:44:16
Beate
Hallo Daniel,
das Replace-Makro läuft bei mir problemlos auch ohne Sortierung. Mag ja an der Excel Version liegen.
Wenn man das Makro so modifiziert, bleiben auch Zeilen erhalten, die leer in Spalte B sind:
Sub Null_Zeilen_loeschen2()
'so geht es auch mit Leerzellen im Bereich, wenn deren Zeilen erhalten
'bleiben sollen. vorher die Leerzellen in einen String ändern,
'der ansonsten nicht in der Spalte vorkommt;
'nach 0-Zellen Löschung werden diese Zellen dann wieder in Leerzellen
'gewandelt
Columns("B:B").Replace "", "#", xlWhole
Columns("B:B").Replace 0, "", xlWhole
Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Columns("B:B").Replace "#", "", xlWhole
End Sub

Danke für deine Beispieldatei.
Gruß,
Beate
Anzeige
AW: Replace-Makro zum Zeilenlöschen
21.12.2006 00:49:39
Daniel
Hallo
der Replace ist ja auch nicht das Problem.
die Delete-Funktion kommt ins Stocken, wenn zuvielen Einzelzellen selektiert sind.
Könnte natürlich auch ein Speicherplatz- abhängiges Problem sein
gruß, Daniel
Anderer Ansatz
19.12.2006 20:05:55
Beate
Hallo Daniel,
diese Beschränkung kannte ich nicht - aber stimmt! Danke.
Hier noch eine schnelle Lösung, insofern bisher keine Leerzellen in Spalte B sind:
Sub Null_Zeilen_loeschen()
'geht nur richtig, wenn keine Leerzellen in Spalte B sind!
'die würden sonst ungewollt mitgelöscht
Columns("B:B").Replace 0, "", xlWhole
Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub



Gruß,
Beate
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

Infobox / Tutorial

Zeilen in Excel löschen, wenn die Zelle "0" enthält


Schritt-für-Schritt-Anleitung

Um in Excel alle Zeilen mit einer "0" in einer bestimmten Zelle zu löschen, kannst du ein Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

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

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub NullRaus()
        On Error GoTo Fehler
        Dim SP As Long, ZE As Long, LR As Long, TB1 As Worksheet, i As Long
        Set TB1 = ActiveSheet
        SP = 2 'Spalte B
        ZE = 2 'Zeile 2
        LR = TB1.Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
        Application.ScreenUpdating = False
        For i = LR To ZE Step -1
            If TB1.Cells(i, SP).Value <> "" And TB1.Cells(i, SP).Value = 0 Then
                TB1.Rows(i).EntireRow.Delete
            End If
        Next
    Fehler:
        If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
        Application.ScreenUpdating = True
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Drücke ALT + F8, wähle das Makro NullRaus aus und klicke auf Ausführen.

Dieser Code durchläuft die Zeilen in der angegebenen Spalte und löscht alle Zeilen, in denen die Zelle "0" ist.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 9: Index außerhalb des gültigen Bereichs"

    • Lösung: Stelle sicher, dass die aktive Tabelle korrekt ist und dass die Spalte B auch Daten enthält.
  • Die Funktion löscht nicht alle "0" Werte.

    • Lösung: Überprüfe, ob in der Spalte B auch wirklich nur "0" Werte vorhanden sind und keine anderen Leer- oder Nullwerte.

Alternative Methoden

Es gibt verschiedene Ansätze, um Excel-Zeilen mit "0" zu löschen. Hier sind zwei alternative Methoden:

  1. AutoFilter-Methode

    Sub Null_Zeilen_loeschen_mit_Autofilter()
        With ActiveSheet.UsedRange
            .AutoFilter Field:=2, Criteria1:="0"
            .Offset(1, 0).Resize(.Rows.Count, .Columns.Count).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
            .AutoFilter
        End With
    End Sub
  2. Replace-Methode

    Sub Null_Zeilen_loeschen()
        Columns("B:B").Replace 0, "", xlWhole
        Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End Sub

Diese Methoden sind effizient und besonders nützlich, wenn du viele Zeilen in Excel hast, die gelöscht werden müssen.


Praktische Beispiele

  • Beispiel 1: Wenn du eine Liste mit 60.000 Zeilen hast, ist das Verwenden des AutoFilter besonders empfehlenswert, um alle Zeilen mit "0" schnell zu löschen.

  • Beispiel 2: Bei kleineren Datenmengen kannst du die Replace-Methode verwenden, um nullwerte zu löschen.


Tipps für Profis

  • Daten sortieren: Es ist ratsam, die Daten vor dem Löschen zu sortieren, um sicherzustellen, dass alle "0" Werte lückenlos beieinander stehen. So kannst du die Leistung verbessern und Excel stürzt weniger ab.

  • Makros speichern: Speichere deine Makros in einer Excel-Vorlage, damit du sie schnell in zukünftigen Projekten wiederverwenden kannst.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ich keine wichtigen Daten lösche? Bevor du das Makro ausführst, erstelle eine Sicherungskopie deiner Excel-Datei.

2. Funktioniert das auch mit Excel Online? Leider können VBA-Makros derzeit nur in Desktopversionen von Excel ausgeführt werden. In Excel Online musst du manuell arbeiten oder andere Lösungen suchen.

3. Kann ich die Zeilen auch mit SPSS löschen? SPSS hat eine andere Struktur und ist nicht in der Lage, Excel-Makros auszuführen. Du müsstest die Daten zuerst in SPSS importieren und dann dort die entsprechenden Zeilen löschen.

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