Hallo Experten!
Als Gelegenheits-Makroschreiber habe ich wieder einmal ein Problem. Ich bin dabei mein Kontakte zu verwalten und habe mir durch Herumwerken im Tabellenblatt zwischen meinen Daten auch Leerzeilen eingehandelt, welche ich ganz simpel mit einer If > Then Abfrage entfernen wollte. Konkret:
Range(„b1“).Select
Anfang:
If ActiveCell = „“ Then
Selection.EntireRow.Delete
GoTo Anfang
Else
End If
ActiveCell.Offset(1, 0).Select
GoTo Anfang
End Sub
Das interessante an diesem Makro ist, dass er zwar funktioniert, dann aber wieder Leerzeilen stehen lässt. Wenn ich es richtig beobachtet habe, lässt er ab drei leeren Zeilen eine über, dh. er löscht sie nicht. Aber warum?
Vorweg besten Dank für Eure Antworten und
freundliche Grüsse
wiedhalm
Moin,
für „a1“ setzt Du die Spalte, die auf leere Zellen zu prüfen ist.
Gruß Ralf
Sub leere_raus()
'
Dim fr As Long ' firstrow
Dim lr As Long ' lastrow
Dim i As Long
ActiveCell.SpecialCells(xlLastCell).Select
lr = ActiveCell.Row
lr = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Range("a1").Select
' leere suchen und löschen
For i = lr To fr Step -1
If Cells(i, 1).Value = "" Then
Rows(i).Delete
End If
Next i
End Sub
ps:
Ich zähle von unten rauf, weil ich in der umgekehrten Richtung nie weiß, was schon weg ist - oder vielleicht noch da '
Gruß Ralf
o je!
so geht’s, wenn bis zur letzten Sekunde noch verschlimmbessert wird …
Hier der richtige Code:
Dim lr As Long ' lastrow
Dim i As Long
ActiveCell.SpecialCells(xlLastCell).Select
lr = ActiveCell.Row
Range("a1").Select
' leere suchen und löschen
For i = lr To 1 Step -1
If Cells(i, 1).Value = "" Then
Rows(i).Delete
End If
Next i
Dim lr As Long ' lastrow
Dim i As Long
ActiveCell.SpecialCells(xlLastCell).Select
lr = ActiveCell.Row
Range("a1").Select
' leere suchen und löschen
For i = lr To 1 Step -1
If Cells(i, 1).Value = "" Then
Rows(i).Delete
End If
Next i
Hallo Ralf!
Besten Dank für den Code, aber leider tut er auch nicht das, was ich erwarte.
Wenn ich die, von dir korrigierte Version laufen lasse - und zwar in dem ich meine Datensätze in ein jungfräuliches Tabellenblatt kopiere - so erhalte ich ebenfalls in unregelmässigen Abständen Leerzellen. Diese jedoch immer nur als einzelne Leerzelle und nicht wie bei meinem Code einmal eine, dann wieder wieder zwei hintereinander.
Nochmals besten Dank für deine Bemühungen, aber ich werde die von meinem Code nicht gefressenen Leerzellen mit einem manuell betreibbaren Zellenlöscher herausputzen.
Freundliche Grüsse
wiedhalm
Moin,
hast Du mal geprüft, ob die Leerzeilen wirklich leer sind, also keine Leerzeichen enthalten? Falls solche vorkommen dürfen, würde
If Cells(i, 1).Value = "" _
Or Cells(i, 1).Value = " " Then
helfen.
Gruß Ralf
1 „Gefällt mir“
Hallo Ralf!
Die Ergänzung von heute hat gewirkt, jetzt arbeitet der Code so wie ich es mir vorgestellt habe. Er wird sofort in meine Sammlung aufgenommen, damit ich ihn nächstes Jahr bei der Adressaktualisierung wieder zur Hand habe.
Nochmals besten Dank für deine Bemühungen und
freundliche Grüsse
wiedhalm