Leerzeilen im markierten Bereich löschen
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
Antwort schreiben
Antwort 1 von Hajo_Zi vom 15.07.2021, 09:37 Options
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
Antwort 2 von Beverly vom 15.07.2021, 09:38 OptionsLösung
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
Antwort 3 von m-o-m vom 15.07.2021, 09:50 Options
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
Antwort 4 von Beverly vom 15.07.2021, 10:43 Options
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