2k Aufrufe
Gefragt in Tabellenkalkulation von m-o-m Mitglied (499 Punkte)
Hallo an Alle *Z*z,

Version: Excel 2003
Ich habe das folgende Problem, was in den bisherigen Threads nicht gänzlich gelöst wurde:

Ich habe veschiedenste Tabellen mit Leerzeilen. Jetzt möchte ich die Leerzeilen löschen, ABER nur für den Bereich, den ich markiert habe.


Gefunden habe ich das folgende Makro von nighty:

Sub LeereZeilenLoeschen()
Worksheets(1).Range(Cells(1, 1), Cells(Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row, Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Column)).AutoFilter Field:=1, Criteria1:="="
Worksheets(1).Rows("2:" & Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Delete Shift:=xlUp
Worksheets(1).Range(Cells(1, 1), Cells(Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row, Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Column)).AutoFilter
End Sub

Schonmal vorab vielen Dank für Eure Mühen.

Gruß Maik

4 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Maik,

Sub Leerzeilen_loeschen_Selection()
' alle Leerzeilen löschen im markierten Bereich
Dim LoI As Long
Dim RaZeile As Range
For LoI = Range(Mid(Selection.Address, InStr(1, Selection.Address, ":") + 1)).Row To Range(Selection.Address).Row Step -1
If Application.WorksheetFunction.CountA(Rows(LoI)) <> ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column Then
If Rows(LoI).SpecialCells(xlCellTypeBlanks).Count = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column Then
If RaZeile Is Nothing Then
Set RaZeile = Rows(LoI)
Else
Set RaZeile = Union(RaZeile, Rows(LoI))
End If
End If
End If
Next LoI
If Not RaZeile Is Nothing Then RaZeile.Delete
Set RaZeile = Nothing
End Sub

Gruß Hajo
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Maik,
Sub loeschen()
Dim loZeile As Long
For loZeile = Selection.Cells(1).Row + Selection.Rows.Count To Selection.Cells(1).Row Step -1
If Application.WorksheetFunction.CountA(Rows(loZeile)) = 0 Then Rows(loZeile).Delete
Next loZeile
End Sub

Bis später,
Karin
0 Punkte
Beantwortet von m-o-m Mitglied (499 Punkte)
Hallo Hajo,
hallo Karin,

Super Hilfe, beides funzt.

Besten Dank für die Antwort in 21 bzw 22 Minuten.

DAS NENNE ICH SUPPORT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Leider kann ich nur eine Antwort als Lösung auswählen. Habe mich für die schlankere entschieden, obwohl ich nicht wirklich verstehe was da eigentlich passiert.

Vielen Dank nochmal

Gruß Maik
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Maik,

mit dem Code wird in einer Schleife von der letzten Zeile des selektierten Bereichs bis zur ersten Zeile des selektierten Bereichs gelaufen. Dabei wird geprüft, ob in der Zeile (in irgendeiner Zelle) ein Wert steht - Application.WorksheetFunction.CountA ist die VBA-Version der Tabellenblattfunktion ANZAHL2. Ist also ANZAHL2(loZeile:loZeile) = 0, dann wird die Zeile gelöscht.

Bis später,
Karin
...