Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Leere Zeilen löschen

1,653 views
Skip to first unread message

Susanne Erlemann

unread,
Jan 19, 2003, 2:24:52 AM1/19/03
to
Hallo NG,


wie kann ich in einer größeren Tabelle mit einem Makro o.ä. leere Zeilen
löschen, die nicht regelmäßig in der Tabelle verteilt sind.

Zuerst umsortieren geht nicht .


Vielen Dank für Hilfe.
--
Mit freundlichen Gruessen aus Hamburg

Susanne


Bernd Held

unread,
Jan 19, 2003, 2:52:05 AM1/19/03
to
Hallo Susanne,
mit folgendem MAkro kannst du die Leerzeilen rauswerfen.

Sub ZeilenLöschenBedSpalteAGelichBlank()
Dim rng As Range
Set rng = Range(Cells(1, 1), Cells(Rows.Count, 1))
Set rng = rng.SpecialCells(xlBlanks).EntireRow
rng.Delete
End Sub


Viele Grüße
Bernd
MVP für Microsoft Excel
Jetzt neu: VBA-Datenbank und "Excel-VBA in 21 Tagen"
unter http://www.held-office.de

"Susanne Erlemann" <mseha...@gmx.de> schrieb im Newsbeitrag
news:b0djq5$o4qoq$1...@ID-2069.news.dfncis.de...

Monika Weber

unread,
Jan 19, 2003, 2:51:30 AM1/19/03
to
Hallo Susanne

> wie kann ich in einer größeren Tabelle mit einem Makro o.ä. leere Zeilen
> löschen, die nicht regelmäßig in der Tabelle verteilt sind.

Die folgende Prozedur löscht jeweils die gesamte Zeile,
wenn in der Spalte A ein leerer Eintrag ist ... wenn in A leere Einträge
stehen,
jeodch B usw. jedoch gefüllt sind, dann müsste die Prozedur ausgebaut
werden.

Teste das Ganze bitte an einer Kopie Deiner Mappe, da die Daten
unwiederbringlich verloren gehen.

Sub Loeschen()
Columns(1).Cells.SpecialCells(xlCellTypeBlanks) _
.EntireRow.Delete
End Sub

--
Ich hoffe, dass Dir das weiterhilft.

"Es liebs Grüessli" aus der Schweiz
Monika Weber [Microsoft MVP für Excel]
http://www.jumper.ch / http://excel.codebooks.de

Hajo

unread,
Jan 19, 2003, 2:53:26 AM1/19/03
to
Hallo Susanne

mit folgendem Makro, werden alle Zeilen gelöscht in denen in Spalte B nichts
steht

Sub ZeilenLoeschen()
' erstellt von Hajo Ziplies 10.01.03
' Zeilen löschen die spalte B leer sind
' weil gelöscht
Dim x As Range, oRange As Range
Dim oBlatt As Worksheet
Dim LoLetzte As Long
If [B65536] = "" Then
LoLetzte = [B65536].End(xlUp).Row
Else
LoLetzte = 65536
End If
Set oBlatt = ThisWorkbook.ActiveSheet
Set x = oBlatt.Range(Cells(1, 2), Cells(LoLetzte, 2))
Set oRange = x.SpecialCells(xlCellTypeBlanks)
oRange.EntireRow.Delete
End Sub

Gruß Hajo

"Susanne Erlemann" <mseha...@gmx.de> schrieb im Newsbeitrag
news:b0djq5$o4qoq$1...@ID-2069.news.dfncis.de...

Monika Weber

unread,
Jan 19, 2003, 2:57:12 AM1/19/03
to
Hallo Susanne

> wie kann ich in einer größeren Tabelle mit einem Makro o.ä. leere Zeilen
> löschen, die nicht regelmäßig in der Tabelle verteilt sind.

Du könntest alternativ zu VBA auch mit dem Autofilter arbeiten.
Filtere nach "Nichtleere". Dieser Eintrag ist im DropDown-Fenster
des AutoFilters aufgeführt - ganz unten.

Monika Weber

unread,
Jan 19, 2003, 3:47:51 AM1/19/03
to
Hallo Susanne

Hier noch eine andere VBA-Lösung:

Sub Loeschen2()
Dim intRow As Integer
Dim intCol As Integer
Dim x As Variant
For intRow = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
x = ""
For intCol = 1 To ActiveSheet.UsedRange.Columns.Count
x = x & Cells(intRow, intCol)
Next intCol
If x = "" Then
Cells(intRow, 1).EntireRow.Delete
End If
Next intRow
End Sub

Es werden nur Zeilen gelöscht, wenn in allen Zellen pro Zeile
keine Einträge drin sind.

--
Ich hoffe, dass Dir das weiterhilft.

"Es liebs Grüessli" aus der Schweiz
Monika Weber [Microsoft MVP für Excel]
http://www.jumper.ch / http://excel.codebooks.de

"Monika Weber" <monika...@mvps.org> schrieb im Newsbeitrag
news:OuF7S#4vCHA.2596@TK2MSFTNGP11...

Ullrich Schwarz

unread,
Jan 19, 2003, 4:54:33 AM1/19/03
to
Hallo Susanne,

folgendes Makro löscht in der aktiven Tabelle die Zeilen, die komplett leer sind:

Sub LöscheLeereZeilen()
letzteZeile = Cells.SpecialCells(xlCellTypeLastCell).Row
For z = letzteZeile To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(z)) = 0 Then
Rows(z).Delete
Next
End Sub

MfG Ullrich


"Susanne Erlemann" <mseha...@gmx.de> schrieb im Newsbeitrag news:b0djq5$o4qoq$1...@ID-2069.news.dfncis.de...

Thomas Ramel

unread,
Jan 19, 2003, 5:59:59 AM1/19/03
to
Grüezi Susanne

Susanne Erlemann schrieb:


>
> wie kann ich in einer größeren Tabelle mit einem Makro o.ä. leere Zeilen
> löschen, die nicht regelmäßig in der Tabelle verteilt sind.
>
> Zuerst umsortieren geht nicht .

'Geht nicht' --> mag ich nicht ;-)

Erstelle eine Hilfsspalte mit der Nummerierung 1 bis .....

Sortiere so, dass die leeren Zeilen als Block untereinander stehen und
lösche sie.
Sortiere dann erneut nach der zuvor eingefügten Hilfsspalte und lösche diese.

--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -

Martin Riedel

unread,
Jan 20, 2003, 12:52:46 PM1/20/03
to
Ullrich Schwarz wrote:
> Hallo Susanne,
>
> folgendes Makro löscht in der aktiven Tabelle die Zeilen, die
> komplett leer sind:
>
> Sub LöscheLeereZeilen()
> letzteZeile = Cells.SpecialCells(xlCellTypeLastCell).Row
> For z = letzteZeile To 1 Step -1
> If Application.WorksheetFunction.CountA(Rows(z)) = 0 Then
> Rows(z).Delete
> Next
> End Sub
>
> MfG Ullrich

Da fehlt ein "End If", würde ich vor "Next" einfügen.
Brachte bei mir durchschlagende Erfolge, dauert u.U. ziemlich lange.
Ergänzungsfrage: Wie kann man auch eventuelle Formate der Zellen
löschen, so das sie auf "Standard" zurückgesetzt werden?

--
Mit freundlichen Grüßen
Martin Riedel

Melanie Breden

unread,
Jan 20, 2003, 2:50:52 PM1/20/03
to
Hallo Martin,

"Martin Riedel" schrieb:

> Ergänzungsfrage: Wie kann man auch eventuelle Formate der Zellen
> löschen, so das sie auf "Standard" zurückgesetzt werden?

alle Zellen eines Tabellenblattes setzt du mit:
Cells.NumberFormat = "General"
auf das Standard Format

Anstatt >>Cells<< kannst du auch Bereiche angeben:
Range("A1:A10")
Columns(1)
Columns("A:E")
Rows(2)
Rows("2:4")

mit Gruß
Melanie

____________________
Melanie Breden
[Microsoft MVP für Excel]

Ullrich Schwarz

unread,
Jan 20, 2003, 3:33:11 PM1/20/03
to
Hallo Martin!

> > Sub LöscheLeereZeilen()
> > letzteZeile = Cells.SpecialCells(xlCellTypeLastCell).Row
> > For z = letzteZeile To 1 Step -1
> > If Application.WorksheetFunction.CountA(Rows(z)) = 0 Then
> > Rows(z).Delete
> > Next
> > End Sub
> >
>

> Da fehlt ein "End If", würde ich vor "Next" einfügen.
> Brachte bei mir durchschlagende Erfolge, dauert u.U. ziemlich lange.

Die Zeilen
"IF ..." und "Rows(..."
sollte eigentlich in einer Zeile stehen, dann erübrigt sich auch ein "End If".

Eine Beschleunigung kannst Du erreichen, wenn Du am Anfang ein
"Application.ScreenUpdating = False" und am Schluß ein
"Application.ScreenUpdating = True" einfügst.

Wenn Formeln vorhanden sind, hilft u.U. zusätzlich auch ein
"Application.Calculation = xlCalculationManual" (am Schluß wieder auf
"Application.Calculation =xlCalculationAutomatic" setzen)


> Ergänzungsfrage: Wie kann man auch eventuelle Formate der Zellen
> löschen, so das sie auf "Standard" zurückgesetzt werden?


Die Frage verstehe ich in diesem Kontext nicht ganz. Grundsätzlich können Zellformate mit Range.ClearFormats gelöscht werden. Dies war aber vermtl. nicht Deine Frage.

MfG Ullrich

Martin Riedel

unread,
Jan 21, 2003, 2:32:10 PM1/21/03
to

Bei mir war die Zeilenhöhe im gesamten Blatt geändert. Das Löschen mit
dem Skript ließ dies aber so bestehen, daher die Frage. Es wurde ja
hier schon öfters geschrieben, bei sehr großen Dateien alle eventuell
formatierten, leeren Zellen zu löschen, das verringert dann die
Dateigröße u.U. erheblich. Diese Skript hier macht das jedenfalls sehr
gut. Ich bin leider, was VBA betrifft, ein Anfänger und das fehlende
"End If" bemängelte Excel selber. Das mit dem "ScreenUpdating"
leuchtet ein, aber was bewirkt "Application.Calculation"? Nun müßte
ich nur noch Melanie Breden's Tip: Cells.NumberFormat = "General"
irgendwo einbauen und nach Möglichkeit irgendwie auch "unbenutzte"
Spalten säubern - dann wäre es das richtige, um eine fertige Tabelle
"abzuschließen".

Martin Riedel

unread,
Jan 26, 2003, 4:27:53 AM1/26/03
to
Melanie Breden wrote:
> Hallo Martin,
>
> "Martin Riedel" schrieb:
>
>> Ergänzungsfrage: Wie kann man auch eventuelle Formate der Zellen
>> löschen, so das sie auf "Standard" zurückgesetzt werden?
>
> alle Zellen eines Tabellenblattes setzt du mit:
> Cells.NumberFormat = "General"
> auf das Standard Format
>
Das setzt aber nicht eine veränderte Zeilenhöhe zurück.
0 new messages