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

Zeilen löschen wenn Zelle leer

Forumthread: Zeilen löschen wenn Zelle leer

Zeilen löschen wenn Zelle leer
13.03.2025 18:34:25
Georg
Liebe Mitglieder,
im Code wird ein "Marker" = EndeTicket1 in eine Zelle geschrieben, danach möchte ich die Zeile des Markers finden und nach oben alle Zeilen löschen, wenn kein Wert drin ist. Beispiel
Marker = B45
Nächste leere Zelle = B40 --> Zeile löschen
Der Marker wird geschrieben, aber leere Zeilen werden nicht gelöscht. Keine Fehlermeldung, ich komm nicht dahinter. Danke für eure tipps. Georg


 'Den Marker "EndeTicket1" schreiben - siehe oben:

Sub löscheZ()
dim lastwsh
Set lastwsh = ThisWorkbook.Worksheets(Sheets.Count)
Dim finden As Range
With lastwsh
Set finden = Columns(2).Find(what:="EndeTicket1")
If finden Is Nothing Then
.Cells(lastRowAccount, 2).Value = "EndeTicket1"
' .Cells(lastRowAccount + 1, 2).Value = "EndeTicket1"
End If
End With

'Lösche Zeilen, ab dem Marker nach oben
With lastwsh
Dim zellenfund As Range
Dim lngspalte As Long
lngspalte = 2
Set zellenfund = .Cells.Find(what:="endeTicket1", LookIn:=xlValues)
For i = .Cells(zellenfund.Rows.Count, lngspalte).End(xlUp).Row To 1 Step -1
If .Cells(i, lngspalte).Value = "" Then
Rows(i).Delete shift:=xlUp
End If
Next i
End With
End sub
Anzeige

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen wenn Zelle leer
13.03.2025 18:58:51
UweD
Hallo

Welchen Wert hat denn die Variable "lastRowAccount" ?

Hast du mal eine Beispieldatei?

AW: Zeilen löschen wenn Zelle leer
13.03.2025 19:05:38
daniel
Hi

mit dem .Count zählst du die Zellen eines Bereichs, und das ist hier immer die 1
auch das nach oben springen ist unsinn.

vermutlich so:

...

Set zellenfund = .Cells.Find(what:="endeTicket1", LookIn:=xlValues)
For i = zellenfund.Row To 1 Step -1
...


ich würde das Löschen der Zeilen aber nicht mit Schleife machen, du kannst auch alle Zeilen mit leerer Zelle auf einmal löschen, sofern es echte Leerzellen sind.
Zellen mit Text "" müsstest du weiterhin per Schleife löschen.

With Range(Cells(1, 2), Cells(zellenfund.row, 2))

if worksheetfunction.CountBlank(.cells) > 0 Then .SpecialCells(xlcelltypeblanks).EntireRow.Delete
end with


Gruß Daniel
Anzeige
AW: Zeilen löschen wenn Zelle leer
13.03.2025 19:13:47
Marc
ich find das ja ehrlich gesagt viel zu umständlich

ich würde eine Startzeile und eine Endzeile definieren (als Integer)

und dann satt löschen einfach ausblenden ... (führt zu viel weniger problemen)

mit For i testen ist Zelle = "" (nicht nothing sondern nur leer)

und dann zeile mit Visible ein/ausblenden






Anzeige
AW: Zeilen löschen wenn Zelle leer
13.03.2025 20:27:35
Oppawinni
Also auch wenn das am Ende nichts zur Lösung beiträgt, solltest du verstehen, was das
.Cells(zellenfund.Rows.Count, lngspalte).End(xlUp).Row
bedeutet.
setze folgendes vor deine Schleife:
debug.print zellenfund.row
debug.print zellenfund.rows.count
debug.print .Cells(zellenfund.Rows.Count, lngspalte).End(xlUp).Row
schau dir das Ergebnis (im Direktfenster) an und überlege ggf. warum das Ergebnis anders ist, als du es erwartest.
Anzeige
AW: Zeilen löschen wenn Zelle leer
13.03.2025 20:09:41
GerdL
Es kommt drauf an. Bei Formel-Leer (="") versagen manche Methoden.
Ansonsten sind Schleifen über Zellen schnarchlangsam u. nicht zu empfehlen.

cu Ger
AW: Zeilen löschen wenn Zelle leer
13.03.2025 20:43:11
Marc
Oh welche Methoden denn? Das interessiert mich doch ...

Da ich oft damit arbeite... allerdings nicht in den Zellen direkt, sondern meist in Arrays bevor ich sie dann in die Zellen transportiere ..
Anzeige
AW: Zeilen löschen wenn Zelle leer
13.03.2025 20:54:44
Daniel
Die schnellste Methode zum löschen von Zeilen geht so (war zumindest früher so, jede neue Excelversion kann da ja was ändern)

1. per Formel in einer Hilfsspalte alle Zeilen markieren entweder:
a) die zu löschenden Zeilen mit 0 und die anderen mit der Zeilennummer
b) die zu löschenden Zeilen mit 1 und die anderen mit "" (Zahl und Text)
2. zum löschen dann:
a) die Zeilen über Duplikate-Entfernen entfernen mit der Hilfsspalte als Kriterium
b) Liste nochmal nach der Hilfsspalte sortieren, so dass die zu löschenden Zeilen direkt untereinander stehen, dann über Inhalte Auswählen (SpecialCells) die Zellen mit 1 auswählen und dann mit ganze Zeilen löschen

das waren früher zumindest die zwei schnellsten Methode für das Löschen von Zeilen in großen Datenmengen.

Gruß Daniel
Anzeige
AW: Zeilen löschen wenn Zelle leer
14.03.2025 01:56:24
Oppawinni
Ich habe ja nicht den Eindruck, dass es sich da um große Datenmengen handelt.
Von daher kann man das vielleicht auch mit einer Union erschlagen... etwas so:
(Nur so ne Idee.. wobei ich nicht verstanden habe, woher die Variable lastRowAccount beim TO kommt und was damit genau bezweckt wird. Also mal was ins Blaue....)



Sub löscheZ()

Dim ws As Worksheet
Dim zelle As Range, spalteRng As Range
Dim unionRng As Range
Dim gefundeneZelle As Range
Dim lngRowAccount As Long

' Arbeitsblatt setzen
Set ws = ThisWorkbook.Worksheets(Sheets.Count)
lngRowAccount = 100

' Suchen nach "EndeTicket1" in der Spalte 2 der Tabelle
Set gefundeneZelle = ws.Columns(2).Find(what:="EndeTicket1")

' Falls "EndeTicket1" nicht gefunden wird, Abbruch
If gefundeneZelle Is Nothing Then
Set gefundeneZelle = ws.Cells(lngRowAccount, 2)
gefundeneZelle.Value = "EndeTicket1"
End If

' Bereich der Spalte festlegen
Set spalteRng = ws.Range(ws.Cells(1, 2), ws.Cells(gefundeneZelle.Row, 2))

' Durch die Zellen der Spalte iterieren
For Each zelle In spalteRng
' Leere Zellen zur Union hinzufügen
If IsEmpty(zelle) Or Trim(zelle.Value) = "" Then
If unionRng Is Nothing Then
Set unionRng = zelle
Else
Set unionRng = Union(unionRng, zelle)
End If
End If
Next zelle

' Falls leere Zellen in Spalte 2 oberhalb "EndeTicket1" gefunden wurden, diese Zeilen löschen
If Not unionRng Is Nothing Then
unionRng.EntireRow.Delete
End If
End Sub
Anzeige
AW: Zeilen löschen wenn Zelle leer
14.03.2025 09:38:31
daniel
ja, kann man
mit dem Duplikate entfernen gehts halt nicht nur schneller, sondern auch programmiertechnisch einfacher
- keine schleifen, keine Verzweigungen im Code
- keine Variablen notwendig
- weniger Zeilen
Gruß Daniel
AW: Zeilen löschen wenn Zelle leer
14.03.2025 12:10:44
Oppawinni
Ist dein Code so kurz, dass ich den übersehen habe?
Egal. Geschwindigkeit sollte hier das Argument jedenfalls nicht sein.
Bei 2000 Zeilen wovon jede 2te Zeile einen Wert enthält, also 1000 zu löschende Zeilen, braucht meine lahme Mühle weniger als 1 Sekunde.
Aber mir ist aufgefallen, dass ich einen Kommentar versiebt habe, weil ich ursprünglich einen Ausstieg vorgesehen hatte, wenn "EndeTicket1" nicht gefunden wird und das obwohl ich immerhin fast 5 Minuten an dem Code gearbeitet hatte. Sowas auch.....
Anzeige
AW: Zeilen löschen wenn Zelle leer
14.03.2025 16:37:24
daniel
naja,
1 + 2 Bereich festlegen
3 Formel einfügen
4. Fixwert für Überschriftenzeile
5. Duplikate entfernen ausführen
6. Formel löschen

der konkrete Code wird schon seit längerem immer mal wieder hier vorgestellt.
Wenn man hier regelmäßig mitliest, sollte man ihn kennen.

Gruß Daniel
Anzeige
AW: Zeilen löschen wenn Zelle leer
14.03.2025 16:44:06
Oppawinni
Asoo.. naja ich lese nicht alles..
ich dachte, dass der "kurze Code" kein Aufwand wäre..
Es scheint aber doch irgendwie ein Problem damit zu geben.. nunja ..... aber...
ich muss aber auch nicht mehr alles wissen.....
AW: Zeilen löschen wenn Zelle leer
14.03.2025 16:56:01
daniel
welches Problem meinst du?
werde mal bitte konkret.
Kein Kommentar
14.03.2025 23:50:19
Oppawinni
sonst werde ich gelöscht :=)
Anzeige
AW: warum?
15.03.2025 14:52:01
Daniel
Gelöscht werden hier nur Menschen, die sich nicht benehmen können.
Glaubst du, dass du so einer bist?
AW: warum?
15.03.2025 18:12:31
Oppawinni
Du solltest mit Provokationen etwas zurückhaltender sein, denn mir tut es sicher weniger weh hier gesperrt zu werden, als dir.
AW: warum?
15.03.2025 19:10:47
Daniel
Wo habe ich provoziert?
Bitte mit Zitat belegen.
Ungerechtigte Anschuldigungen mag ich nicht.
Anzeige
AW: warum?
16.03.2025 13:29:00
Daniel
Ich habe die Schritte, die man ausführen muss, ausführlich erklärt, so das man sie von Hand ausführen kann.
Denn Code dazu kann man sich dann mit Hilfe des Recorders selbst ermitteln.
Das nennt sich Hilfe zur Selbsthilfe und die soll ja die beste Hilfe sein, so von wegen Eigeninitiative und so.
Anzeige
AW: warum?
16.03.2025 17:37:20
Oppawinni
Du bist wohl nicht zu retten, oder? Ich hab nicht nach deiner Hilfe gefragt.

Forumthreads zu verwandten Themen

Anzeige