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

Forumthread: VBA Zeile löschen wenn bestimmte Zelle ""

VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 09:06:56
Dennis
Hallo ich habe ein problem bei einem Makro program.
Ich habe eine Tabelle mit vielen Datensätzen (10000x10)
Nun möchte ich alle leeren (bzw "") zeilen löschen. Dazu habe ich mich viel im Forum belesen und einiges konnte ich auch anwenden jedoch nicht in effizienter Zeit.
Dann habe ich folgenden Code gefunden welcher für große Datensätze sein soll:

Sub Makro3()
Columns(1).Insert
With Range("A1:A" & Cells(Rows.Count, 2).End(xlUp).Row)
.Formula = "=IF(RC[1]="""",true,Row())"
.Formula = .Value
.CurrentRegion.Sort key1:=Cells(1, 1), Order1:=xlAscending, header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End With
Columns(1).Delete
End Sub

Diesen versteh ich jedoch nicht ganz und kann ihn daher nicht anpassen.
Meine Tabelle starten von B5 bis N10000. Demnach müsste ich sie anpassen.
Die zelle nach der Kontrolliert werden soll ist spalte "K"
Gibt es eine möglichkeit diesen anzupassen oder einen anderen für große Datensätze oder muss ich meine ganze Tabelle umstrukturieren ?
Vielen Dank im Vorraus
MfG
Dennis
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 09:08:51
Hajo_Zi
Hallo Dennis,
benutze Autofilter und kopiere den sichtbaren Bereich.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 09:26:22
Bernd
Servus Dennis,
mach mal eine Sicherheitskopie des Blattes und teste darauf mal diesen Code

Sub test()
For i = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 5 Step -1
If ActiveSheet.Cells(i, 11).Value = "" Then ActiveSheet.Rows(i).EntireRow.Delete
Next i
End Sub
Grüße, Bernd
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 11:27:44
Dennis
hallo Bernd,
danke für die schnelle Antwort,
jedoch hatte ich ein Code wie diesen bereits getestet.
Es dauerdt bis zu 5min zum executen, was daher für das Makro ungeeigenet ist das es 10000x10 Daten sind.
Grüße, Dennis
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 17:58:57
Bernd
Servus Dennis,
mal saublöd gefragt, sind in allen Zeilen diese Formeln drin?
Dann würde ich zur Beschleunigung mal vorschlagen erst die Berechnung des Blattes auszuschalten, dann löschen, dann wieder einschalten. Sollte deutliche Schnelligkeitsvorteile bringen bei ~ 10.000 Formeln, die sich bei automatischer Zellenberechnung nach jeder gelöschten Zeile neu berechnen...

Sub test()
Application.Calculation = xlCalculationManual
For i = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 5 Step -1
If ActiveSheet.Cells(i, 11).Value = "" Then ActiveSheet.Rows(i).EntireRow.Delete
Next i
Application.Calculation = xlCalculationAutomatic
End Sub
Grüße, Bernd
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
19.07.2018 08:31:30
Dennis
Danke für den Tipp.
Jedoch habe ich im Code bereits diese initial settings drin:
screenUpdateState = Application.ScreenUpdating
statusBarState = Application.DisplayStatusBar
calcState = Application.Calculation
eventsState = Application.EnableEvents
displayPageBreakState = ActiveSheet.DisplayPageBreaks
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

Dauerdt dennoch noch zu lange.
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 09:51:17
Daniel
Hi
So für deine Datei
Sub Makro3()
Columns(1).Insert
With Range("A5:A" & Cells(Rows.Count, 3).End(xlUp).Row)
.Formula = "=IF(RC12="""",true,Row())"
.Formula = .Value
.EntireRow.Sort key1:=Cells(1, 1), Order1:=xlAscending, header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End With
Columns(1).Delete
End Sub
Gruß Daniel
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 11:34:58
Dennis
Hallo Daniel,
ich habe den Code ausprobiert. Jedoch funktioniert dieser nicht.
Auch bei einigen händischen Ändererungen meinerseits.
Ich glaube es liegt daran das der code immernoch nicht auf meine TabellenSituation abgestimmt ist.
Da meine Tabelle erst bei Zeile B5 startet funktioniert es nicht wirklich.
Ich würde jedoch ungern diesen ändern wollen.
Beste Grüße Dennis
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 11:55:50
Daniel
Hi
"Funktioniert nicht" ist als Fehlerbeschreibung nicht besonders hilfreich, wenn es darum geht herauszufinden, warum es nicht funktioniert.
Hilfreich wäre auch eine kleine Beispieldatei (ein paar Zeilen reichen)
Ansonsten, bist du den Code mal im Einzelstepmodus durchgegangen und hast kontrolliert, was nach jedem Programmschrift in Excel passiert?
Dann lernst du auch den Code besser verstehen.
Gruß Daniel
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 13:35:05
Dennis
Hallo Daniel
Entschuldigen sie die unsachliche Antwort.
Wenn ich diese Makro ausführe löscht sich die gesamte Tabelle ab der Zeile 5.
Da ich nun nach einer Leeren zelle ("") in Spalte "G" filter hab ich den code so angepasst.
With Sheets("versteckte Tabelle")
Columns(1).Insert
With Range("A5:A" & Cells(Rows.Count, 3).End(xlUp).Row)
.Formula = "=IF(RC7="""",true,Row())"
.Formula = .Value
.EntireRow.Sort key1:=Cells(1, 1), Order1:=xlAscending, Header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End With
Columns(1).Delete
End With
Die excel Tabelle sieht wie folgt aus: (leider kann ich aktuell kein File updloaden. Ich hoffe sie können es trotzdem deuten.
" - sind leere Zellen
X - Überschrift
1 - alle zahlen sind werte
_ A B C D E F G H I
1 " " " " " " " " "
2 " " " " " " " " "
3 " " " " " " " " "
4 " X X X X X X X
5 " 1 2 3 4 5 6 7
6 " 4 3 5 2 6 7 2
7 " " " " " " " "
8 " 3 5 3 6 7 5 3
9 " 4 5 6 7 3 2 2
10" 5 3 3 3 3 2 2
11" " " " " " " "
12" 4 5 6 3 2 3 4
Mit freundlichen Grüßen
Dennis Mattutat
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 13:52:35
Daniel
Hi
schwer zu sagen, ohne die Datei zu kennen.
hast du berücksichtigt, dass der Code eine Hilfsspalte am Anfang einfügt und diese am Schluß wieder löscht?
dh für die formel verschieben sich die Zellbezüge um eine Spalte nach rechts.
du setzt noch mal eine WITH-Klammer für das Tabellenblatt.
die musst du natürlich auch nochmal im Code berücksichtigen:
With Sheets("versteckte Tabelle")
.Columns(1).Insert
With .Range("A5:A" & .Cells(.Rows.Count, 3).End(xlUp).Row)
.Formula = "=IF(RC7="""",true,Row())"
.Formula = .Value
.EntireRow.Sort key1:=Cells(1, 1), Order1:=xlAscending, Header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End With
.Columns(1).Delete
End With
Zellbezüge ohne Punkt davor beziehen sich auf das aktive Tabellenblatt, Zellbezüge mit Punkt davor auf das Tabellenblatt, welches bei WITH deklariert ist.
Gruß Daniel
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 14:22:29
Dennis
Ich habe das Programm ausgeführt und einige Sachen auskommentiert um zu schauen was passiert.
Der Fehler im Program ist in der "IF" condition.
Ich bekomme in der eingefügten Spalte überall ein WAHR.
In einer Zelle in der Tabelle ist folgende Formel exemplarisch enthalten:
=WENN('Tabelle1'!J10="";"";WENN('Tabelle1'!K10= 0; "";WENN('Tabelle1'!K10 ="Sum:";"";'Tabelle1'!K10)))
Diese zeigt an sich den richtigen Wert an.
Jedoch wird von der Funktion jeder inhalt als "WAHR" empfunden.
Können Sie sich das erklären?
MfG
Dennis
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 15:25:15
Daniel
Hi
lade bitte die Beispieldatei hoch.
sonst kann ich dazu nichts sagen.
deine Beschreibungen sind immer noch nicht ausreichend.
Beispiel:
"In einer Zelle in der Tabelle ist folgende Formel exemplarisch enthalten"
"in einer Zelle" - In welcher? Excel hat mehr Zellen, als es zählen kann ;-)
du solltest schon dazu schreiben, in welcher Zelle diese Formel steht.
ist das auch die Zelle, die die vom Makro überprüft wird?
das alles kann ich mit deinen Angaben nicht beurteilen.
Entweder du beschreibst alles möglichst genau, oder du lädst die Datei hoch.
Gruß Daniel
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
19.07.2018 09:20:08
Dennis
Hallo Daniel.
Ich lade nun eine Beispiel Tabelle hoch die dem Aufbau meiner entspricht mit Fakedaten.
https://www.herber.de/bbs/user/122778.xlsx
Dazu zu sagen gibt es noch das jeder dieser Zellen unterhalb der überschrifften in Zeile 4 aus einer anderen Tabelle eingefügt ist.
Dazu hab ich die Formel: (aus einer Zelle in Reihe 10)
=WENN('Tabelle1'!J10="";"";WENN('Tabelle1'!K10= 0; "";WENN('Tabelle1'!K10 ="Sum:";"";'Tabelle1'!K10)) )
genommen.
Diese filtert dann die andere Tabelle raus und schreibt dann wenn die Bedingungen nicht erfüllt sind "" in die ganze Zeile. Pro Spalte unterscheiden sich die Zellen in der Formeln nur vom Spaltenindex der andere Tabelle (Tabelle1)
Ich hoffe diese Informationen sind ausreichend für eine weitere Hilfe. Zusätzlich zu der anderen Information die ich Ihnen gegeben habe. (eingefügte Spalte A -> überall nur WAHR ohne Formel)
Mit freundlichen Grüßen
Dennis Mattutat
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 11:44:47
Dennis
Hallo Hajo,
Ich bekomme dort ebenfalls nur Fehlermeldungen raus oder es dauerdt extrem lange.
Mir ist es vorallem wichtig das es schnell geht und ohne "Select" oder ähnlichem.
Beste Grüße
Dennis
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 15:04:24
Torsten
Hallo,
nochmal eine Frage dazu. In welcher Spalte kann denn geprueft werden, dass die Zeile als leer gilt und damit geloescht werden kann?
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 15:14:28
Torsten
Kann dir das hier anbieten. Kann aber nicht sagen, wie es bei deiner Dateigroesse mit der Geschwindigkeit aussieht. Hab jetzt gesehen, dass du in Spalte G suchst. Den Tabellennamen musst du noch anpassen.
Sub Delete()
Application.ScreenUpdating = False
Dim Row As Long
Dim RowMax As Long
With Sheets("Tabelle1")
RowMax = .UsedRange.Rows.Count
For Row = RowMax To 5 Step -1
If .Cells(Row, 7).Value = "" Then
.Rows(Row).Delete
End If
Next Row
End With
Application.ScreenUpdating = True
End Sub
Der Code startet bei der letzten benutzten Zeile und geht bis Zeile 5.
Gruss Torsten
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 15:17:43
Dennis
Hallo Thorsten.
Diese Art von Code habe ich bereits probiert.
Dieser dauerdt bei meiner Datengröße leider zu lange. Aber danke trotzdem.
Ich bin mit einem anderen Kollegen bereits im Gespräch welcher basierend auf meiner Vorlage mir probiert zu helfen diesen zu Debuggen um eine schnelle option zu generieren
Mit freundlichen Grüßen
Dennis
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 15:18:07
Torsten
Ok. Wenn in Spalte K gesucht wird, dann hier aendern:
If .Cells(Row, 7).Value = "" Then

auf
If .Cells(Row, 11).Value = "" Then

AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 15:14:36
Dennis
Geprüft werden soll in Spalte "K"
Habe die Code soweit angepasst bereits.
 With Sheets("versteckte Tabelle")
.Columns(1).Insert
With Range("A5:A" & Cells(Rows.Count, 3).End(xlUp).Row)
.Formula = "=IF(RC8="""",true,Row())"
.Formula = .Value
.EntireRow.Sort key1:=Cells(1, 1), Order1:=xlAscending, Header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End With
.Columns(1).Delete
End With
Jedoch gibt es überall "WAHR" zurück und löscht dann alle zeilen
Grüße
Dennis
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
18.07.2018 15:29:02
Daniel
Hi
Spalte K ist die Spaltennummer 11, also RC11 in der Formel
da steht aber noch RC8, was Spalte H ist.
setz mal nen Haltepunkt auf die Zeile .Formula = .Value und schau dir die Formel an, die in Spalte A steht. Diese Wurde vom Makro eingefügt, um die zu löschenden zeilen zu kennzeichnen.
Gruß Daniel
Anzeige
AW: VBA Zeile löschen wenn bestimmte Zelle ""
19.07.2018 08:35:08
Dennis
Hallo Daniel,
Ich habe die Spalte auf H geändert. Das wurde bewusst getan.
Die Spalte A enthält nur den Wert "WAHR" und es steht keine Formel drin. Wenn ich dort die Formel anhalte
Beste Grüße
Dennis
AW: VBA Zeile löschen wenn bestimmte Zelle ""
19.07.2018 08:35:09
Dennis
Hallo Daniel,
Ich habe die Spalte auf H geändert. Das wurde bewusst getan.
Die Spalte A enthält nur den Wert "WAHR" und es steht keine Formel drin. Wenn ich dort die Formel anhalte
Beste Grüße
Dennis
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Zeile löschen bei leerer Zelle in Excel


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA leere Zeilen zu löschen, kannst Du folgenden Code verwenden. Dieser löscht alle Zeilen, wenn in einer bestimmten Zelle (z.B. Spalte K) der Inhalt leer ist. Der Code ist für große Datensätze optimiert.

Sub ZeilenLoeschen()
    Application.ScreenUpdating = False
    Dim i As Long
    Dim LastRow As Long
    LastRow = Cells(Rows.Count, 11).End(xlUp).Row ' Spalte K ist die 11. Spalte

    For i = LastRow To 5 Step -1 ' Beginne ab der letzten Zeile bis zur Zeile 5
        If Cells(i, 11).Value = "" Then ' Überprüfe, ob die Zelle leer ist
            Rows(i).Delete ' Lösche die Zeile
        End If
    Next i

    Application.ScreenUpdating = True
End Sub

Stelle sicher, dass Du den Code in ein Modul in Deinem VBA-Editor einfügst. Dieser Code wird alle leeren Zeilen löschen, die in Spalte K leer sind.


Häufige Fehler und Lösungen

  1. Lange Ausführungszeit: Wenn der Code bei großen Datenmengen lange dauert, solltest Du die automatische Berechnung deaktivieren, während das Makro läuft.

    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = xlCalculationAutomatic
  2. Falsche Zeilen gelöscht: Achte darauf, dass Du die richtige Spalte überprüfst. Wenn Du z.B. in Spalte K nach leeren Zellen suchst, stelle sicher, dass die Bedingung korrekt gesetzt ist.

  3. Spaltenindex: Wenn Du eine Hilfsspalte einfügst, müssen die Zellbezüge in Deinen Formeln entsprechend angepasst werden.


Alternative Methoden

Wenn Du keine VBA-Lösungen verwenden möchtest, kannst Du auch die Autofilter-Funktion nutzen, um leere Zeilen zu filtern und dann zu löschen:

  1. Wähle die gesamte Tabelle aus.
  2. Gehe zu Daten > Filter.
  3. Setze einen Filter auf die Spalte K und wähle Leere aus.
  4. Markiere die gefilterten Zeilen und lösche sie.

Praktische Beispiele

Hier ist ein Beispiel für ein Makro, das alle Zeilen löscht, wenn die Zelle in Spalte G leer ist:

Sub LeereZeilenInSpalteGLoeschen()
    Application.ScreenUpdating = False
    Dim i As Long
    Dim LastRow As Long
    LastRow = Cells(Rows.Count, 7).End(xlUp).Row ' Spalte G ist die 7. Spalte

    For i = LastRow To 5 Step -1
        If Cells(i, 7).Value = "" Then
            Rows(i).Delete
        End If
    Next i

    Application.ScreenUpdating = True
End Sub

Tipps für Profis

  • Verwende .SpecialCells: Du kannst die Methode .SpecialCells verwenden, um nur die leeren Zellen zu finden und schneller zu löschen.

  • Optimierung der Geschwindigkeit: Deaktiviere Application.ScreenUpdating und Application.Calculation, um die Geschwindigkeit zu erhöhen, wenn Du viele Zeilen löschst.

  • Debugging: Setze Haltepunkte im Code, um zu sehen, welche Zeilen gelöscht werden. Dies hilft, Fehler zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, wenn ich eine andere Spalte überprüfen möchte?
Ändere einfach die Zahl in Cells(i, 11) auf die entsprechende Spaltennummer, die Du überprüfen möchtest.

2. Was kann ich tun, wenn das Makro nicht alle leeren Zeilen löscht?
Überprüfe, ob die Zellen tatsächlich leer sind. Manchmal können unsichtbare Zeichen oder Leerzeichen vorhanden sein.

3. Wie kann ich sicherstellen, dass ich eine Sicherheitskopie meiner Daten habe?
Bevor Du das Makro ausführst, speichere Deine Datei unter einem anderen Namen, um die Originaldaten nicht zu verlieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige