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

In Mappe alle Zeilen löschen wenn ().

In Mappe alle Zeilen löschen wenn ().
09.06.2021 17:03:35
Hendrik
Hallo zusammen,
in meinem Kopf klingt das so leicht, ich kriege es aber ohne Hilfe einfach nicht hin:
Ziel: Ich versuche, dass in allen Arbeitsblättern in meiner Mappe die Zeilen gelöscht werden, wenn der entsprechende Spaltenwert (Spalte C) leer ist.
Also z.B.:
Wenn D3 leer, dann Zeile 3 löschen.
Dazu habe ich bereits folgende Möglichkeiten gefunden. (Manche Lösungen sind für Einzelblätter, das wollte ich dann für die Mappe ausweiten, wenn ich es denn zum Laufen gekriegt hätte.)
Entweder funktionieren sie aber nicht oder laufen eine Ewigkeit, ohne, dass etwas sichtbar passiert und ich Excel mit dem Task-Manager killen muss.
Option Explicit
Sub Zeile_loeschen()
Dim x As Integer
Dim ende, iRow As Long
For x = 1 To Sheets.Count
ende = Sheets(x).Cells(Rows.Count, 1).End(xlUp).Row
For iRow = ende To 1 Step -1
If Sheets(x).Cells(iRow, 3) = "" Then Sheets(x).Rows(iRow).Delete
Next iRow
Next x
End Sub

Public Sub Test()
Dim objWorksheet As Worksheet
For Each objWorksheet In ThisWorkbook.Worksheets
Call objWorksheet.Rows(7).Delete
Next
End Sub
Sub Makro3()
Columns(1).Insert
With Range("C40:C" & Cells(Rows.Count, 3).End(xlUp).Row)
.Formula = "=IF(RC[1]="""",true,Row())"
.Formula = .Value
.CurrentRegion.Sort key1:=Cells(1, 3), Order1:=xlAscending, Header:=xlNo
.SpecialCells(xlCellTypeConstants, 3).EntireRow.Delete
End With
Columns(1).Delete
End Sub Sub Zeilen_loeschen()
Dim loeschen As Double
For loeschen = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(loeschen, 3).Value = "" Then
Rows(loeschen).Delete
End If
Next loeschen
End Sub

Public Sub LeereRaus()
Dim WkSh     As Worksheet
Dim lLetzte  As Long
Dim lZeile   As Long
Application.ScreenUpdating = False
Set WkSh = Tabelle59  ' 
Kann mir da jemand helfen? Also über alle Tabellenblätter wenn Zelle in Spalte C leer, die Zeile löschen.
Viele Grüße!
Hendrik
PS: Irgendwie ist da kein Leerzeichen vor dem Sub "leere raus"...kriege ich nicht eingefügt. Sorry dafür.

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

Betreff
Datum
Anwender
Anzeige
AW: In Mappe alle Zeilen löschen wenn ().
09.06.2021 17:31:19
Beverly
Hi Hendrik,
vielleicht hilft dies:

Sub LeereLoeschen()
Dim wksTab As Worksheet
Dim varLeer
For Each wksTab In Worksheets
' prüfen ob leere Zellen in Spalte 3 vorhanden sind
On Error Resume Next
varLeer = wksTab.Columns(3).SpecialCells(xlCellTypeBlanks).Count
' es gibt leere Zellen, dann Zeilen löschen
If Err.Number = 0 Then wksTab.Columns(3).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Next wksTab
End Sub

GrußformelBeverly's Excel - Inn
Anzeige
noch einfacher:
09.06.2021 18:34:55
Daniel
warum so umständlich?
wenn schon On Error Resume Next aktiv ist dann kannst du die Prüfung weglassen und einfach die Zeilen mit Leerzelle löschen.
Wenns keine gibt, einfach überspringen.
Prüfen kann man dann, wenn man kein On Error Resume Next im Code haben will oder wenn der abhängige Code mehrere Zeilen umfasst
also Q'n'D

Sub LeereLoeschen()
Dim wksTab As Worksheet
For Each wksTab In Worksheets
On Error Resume Next
wksTab.Columns(3).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Next wksTab
End Sub
oder mit Prüfung, dann würde ich aber auch das On Error Resume Next vermeiden:
hierzu zählt man die Leerzellen mit der Excelfunktion AnzahlLeerezellen / Worksheetfunction.CountBlank, welches auch 0 und keinen Fehler, wenn keine Leerzellen vorhanden sind, allerdings muss man hier dann denn Zellbereich passen einschränken, weil das SpecialCells nur in der UsedRange zählt, während das CountBlank im vollständigen angegeben Zellbereich, auch in der ganzen Spalte.

Sub LeereLoeschen()
Dim wksTab As Worksheet
For Each wksTab In Worksheets
if Worksheetfunction.CountBlank(wksTab.UsedRange.Columns(3)) > 0 then
wksTab.Columns(3).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
end if
Next wksTab
End Sub
Gruß Daniel
Anzeige
AW: noch einfacher:
09.06.2021 18:41:52
Hendrik
Hi ihr beiden,
tausend Dank an euch beide! Ich hatte grade schon eine Antwort an Karin geschickt, die taucht hier aber nicht auf...
Und genau dann kam auch Daniels Vorschlag. :)
Karins Lösung habe ich schon ausprobiert, das hat gut funktioniert. Jetzt probiere ich nochmal Daniels aus.
(Danke auch nochmal für die erläuternden Kommentare! :) )
Eine Frage, das ist mir eben erst aufgefallen, als es mit dem Löschen geklappt hat:
Besteht die Möglichkeit, eure Codes ohne viel Aufwand so anzupassen, dass erst ab Zeile 37 gelöscht wird?
Dann könnte der Kopf der Tabellenblätter erhalten bleiben, dann sieht das schön gleichmäßig aus :)
Besten Gruß!
Hendrik
Anzeige
AW: noch einfacher:
09.06.2021 18:51:20
Beverly
Hi Hendrik,
das lässt sich so realisieren:

Sub LeereLoeschen()
Dim wksTab As Worksheet
Dim varLeer
For Each wksTab In Worksheets
With wksTab
' prüfen ob leere Zellen in Spalte 4 ab Zeile 37 vorhanden sind
On Error Resume Next
varLeer = .Range(.Cells(37, 4), _
.Cells(.Rows.Count, 4)).SpecialCells(xlCellTypeBlanks).Count
' es gibt leere Zellen, dann Zeilen ab 37 löschen
If Err.Number = 0 Then .Range(.Cells(37, 4), _
.Cells(.Rows.Count, 4)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
End With
Next wksTab
End Sub

GrußformelBeverly's Excel - Inn
Anzeige
AW: noch einfacher:
09.06.2021 20:33:53
Hendrik
Hi Karin,
das läuft! DANKESCHÖN! :)
You made my day today.
Eine Frage ploppt grade auf:
Durch bedingte Formatierungen sind nicht alle Zellen in Spalte C leer; in vielen ist eine weiße 0 -.-
Das wurde mir grade mit einem Schulterzucken vom lieben Kollegen zugeworfen nach dem Motto "Ach übrigens" -.-
Ist es schwierig, deinen Code anzupassen, dass er leer und 0 löscht?
Wenn das jetzt zu tricky oder umfangreich wird: Null Problemo!
Wie schon gesagt: You already made my day :)
Viele Grüße!
Hendrik
AW: noch einfacher:
09.06.2021 20:43:49
Daniel
wenn die Zellen nicht leer sind, gehts etwas anders:
am besten so:
am Tabellenende eine Formel einfügen, die alle Zeilen, die gelöscht werden sollen mit der 0 kennzeichnet und die die stehen bleiben, mit der akutellen zeilennummer:

=Wenn(Und(Zeile()>=37;Oder(C1=0;C1=""));0;Zeile())
in die überschriftenzeile des Bereichs ebenfalls die 0 eintragen.
dann auf den ganzen Bereich die Funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN anwenden, mit der Hilfsspalte als Kriterium und der Option "keine Überschrift.
das wäre auch die die Vorgehensweise für ein VBA-Makro, welches du dir ganz gut mit dem Recorder aufzeichenen kannst.
Gruß Daniel
Anzeige
AW: noch einfacher:
09.06.2021 23:14:55
Beverly
Hi Hendrik,
ich würde es dann so lösen:

Sub LeereLoeschen()
Dim wksTab As Worksheet
Dim lngZeile As Long
Dim rngZelle As Range
For Each wksTab In Worksheets
With wksTab
For lngZeile = 37 To .Cells.Find(What:="*", _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
If .Cells(lngZeile, 4) = 0 Or .Cells(lngZeile, 4) = "" Then
If rngZelle Is Nothing Then
Set rngZelle = .Cells(lngZeile, 4)
Else
Set rngZelle = Union(rngZelle, .Cells(lngZeile, 4))
End If
End If
Next lngZeile
If Not rngZelle Is Nothing Then rngZelle.EntireRow.Delete
End With
Set rngZelle = Nothing
Next wksTab
End Sub

GrußformelBeverly's Excel - Inn
Anzeige
AW: noch einfacher:
10.06.2021 11:06:33
Hendrik
Hallo Karin und Daniel!
Wirklich lieben Dank, wie ihr mir helfen möchtet!! :)
Ich habe mich zunächst an Karins Lösung versucht.
Dort habe ich folgende Meldung bekommen:
Userbild
Lässt sich das easy fixen?
Parallel dazu versuche ich auch Daniels Lösung, damit Daniel auch ein Feedback bekommt :)
Lieben Gruß!
Hendrik
Leere Zellen und 0-Werte löschen
10.06.2021 11:49:36
Beverly
Hi Hendrik,
der Fehler titt auf, wenn ein Tabellenblatt komplett leer ist - das lässt sich mit einer IF-Anweisung prüfen:

Sub LeereLoeschen()
Dim wksTab As Worksheet
Dim lngZeile As Long
Dim rngZelle As Range
For Each wksTab In Worksheets
With wksTab
' prüfen ob es belegte Zellen gibt
If Application.CountA(.Cells) > 0 Then
For lngZeile = 37 To .Cells.Find(What:="*", _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
If .Cells(lngZeile, 4) = 0 Or .Cells(lngZeile, 4) = "" Then
If rngZelle Is Nothing Then
Set rngZelle = .Cells(lngZeile, 4)
Else
Set rngZelle = Union(rngZelle, .Cells(lngZeile, 4))
End If
End If
Next lngZeile
If Not rngZelle Is Nothing Then rngZelle.EntireRow.Delete
End If
End With
Set rngZelle = Nothing
Next wksTab
End Sub

GrußformelBeverly's Excel - Inn
Anzeige
AW: Leere Zellen und 0-Werte löschen
10.06.2021 12:24:42
Hendrik
Hello again Karin :)
HAHAHAHA DAS WAR ES :-D
Das erste Tabellenblatt ist in der Tat leer; da wollte ich nur die Buttons platzieren, um die verschiedenen Makros ausführen zu können.
DANKESCHÖN KARIN!
Läuft wie geschmiert.
Danke auch nochmal an Daniel. Ich probiere deine Lösung nach dem Mittag nochmal aus und gebe nochmal Rückmeldung.
Lieben Gruß!
Hendrik
AW: noch einfacher:
09.06.2021 23:27:49
Daniel
wenn die Nullen echte Nullen sind und keine Formeln, dann könntest du sie auch mit

wksTab.Columns(3).Replace "0", "", xlwhole
entfernen, dann wären diese Zellen auch wieder echte Leerzellen die du über das SpecialCells(xlcelltypeblanks) selektieren und löschen kannst.
Gruß Daniel
Anzeige

324 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige