Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
828to832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
828to832
828to832
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

42 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige