Hallo, ich möchte in einer Excel Datei per vba code bis zur ersten leeren zeile gehen, wie tue ich das?
ich möchte zur ersten leeren Zeile gehen und dann den rest markieren und löschen, also den kompletten Bereich ab da? BSp. A10 ist leer, dann möchte ich ab A10:z10 und abwärts alles markieren und löschen
Wie??
Sub FIND_EMPTY_CELL()
Dim zeil As Integer
Dim z As Integer
Dim leerAbWo As Long
zeil = ActiveSheet.UsedRange.Rows.Count 'letzte ausgefüllte Zeile
For z = 8 To zeil
If Cells(z, 1) = "" Then
'leere Zelle gefunden
leerAbWo = Cells(z, 1).Select 'gefundene Zelle selektieren
'jetzt ab da an bis AA markieren und rest löschen!!!
MsgBox leerAbWo
Exit Sub
End If
Next z
End Sub
5 Antworten
Ich habe mal nur Deine Schleife ergänzt:
If Cells(z, 1) = "" Then
'leere Zelle gefunden
'leerAbWo = Cells(z, 1).Select 'gefundene Zelle selektieren
'jetzt ab da an bis AA markieren und rest löschen!!!
Range(Cells(z, 1), Cells(zeil, 27)).ClearContents
MsgBox Cells(z, 1).Address 'leerAbWo
Exit Sub
Richtig so? Teste mal genau.
Ich wollte Dich gerade auf meine Antwort hier hinweisen:
Jetzt ist mir aufgefallen, dass diese Frag auch von Dir stammt.
Du hast leider nicht weiter auf meinen Kommentar reagiert.
Kannst Du dazu vielleicht noch etwas sagen?
ja das klappt leider nicht, aber ich könnte ja evtl soritieren. wie mache ich in VBA, dass die leeren zeilen ganz unten stehen?
weißt du wie ich eine spalte einer Tabelle absteigend sortieren kann?...ich will das erst absteigend sortieren und dann löschen...das löschen funktioniert ja, jetzt muss ich vorher nur noch sortieren
Hallo kidiktol,
ich würde diese VBA-Funktion benutzen:
Dim LastRow As Integer LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Distel
ja das habe ich vorher auch, aber das Problem ist, dass eben in diesem Template, die leeren zeilen als nicht leer gesehen werden
Sub func()
Const Max_X = ... ' hier die maximale Spaltenzahl angeben
Const Max_Y = ... ' hier die maximale Zeilenzahl angeben
Dim erste_leere_Zeile As Long
Dim x As Long
Dim y As Long
Dim leer As Boolean
Dim erste_leere_Zeile_String As String
Dim Max_Y_String As String
For y = 1 To Max_Y
leer = True
For x = 1 To Max_X
If CStr(Cells(y, x).Value) <> "" Then leer = False
Next
If leer Then
erste_leere_Zeile = y
Exit For
End If
Next
If erste_leere_Zeile = 0 Then
MsgBox ("Keine leere Zeile gefunden")
End
End If
Rows(CStr(erste_leere_Zeile) & ":" & CStr(Max_Y)).Hidden = True
'For y = erste_leere_Zeile To Max_Y
' Rows(y).EntireRow.Hidden = True
'Next
End Sub
Ich habe die Zeilen ausgeblendet, nicht gelöscht in diesem Beispiel.
Ich glaube nicht, dass man leere Zeilen am Ende der Tabelle wegreduzieren kann. Die Zeilen werden ja nur angezeigt, das ist pure Darstellung. Ich kenne außer Ausblendung kein Mittel, die Tabellendarstellung zu reduzieren.
Gespeichert werden dann nur die Zeilen mit Inhalt, ggf. auch dann wenn leere Zeilen dazwischen liegen bzw. leere Zeilen verbrauchen im Speicher ja nur max. ein Byte (es wird nur gespeichert, dass oder wie viele leere Spalten oder Zeilen zwischen Zeilen - Spalten mit Inhalt liegen, ggf. werden auch nur die Inhalte mit Zeile/Spalte gespeichert und die Darstellung beim Laden neu aufgebaut, so dass leere Zeilen gar nicht gespeichert werden, ggf. hat Excel ein selbstoptimierendes Speicherformat, ich weiß es nicht).
Du kannst auch bis heute Abend oder Samstag warten, dann melden sich die VBA-Profis, da Du korrekterweise als Themen Excel und VBA angegeben hast :-)
Im Prinzip bin ich nur ein MS-DOS-Basic-Programmierer
ich finde deinen code auf jeden fall auch super, aber leider müssen diese tatsächlich weggelöscht werden :-S
Teste mal in einer Kopie, ob das tut, was Du tun möchtest:
Range(Cells(Range("A1").End(xlDown).Offset(1, 0).Row, 1), Cells(100000, 26)).Delete
Annahme: Leere Zeile in Spalte A suchen, sonst das A1 anpassen
Max. 100000 Zeilen genutzt (sonst eben erhöhen)
Bis Spalte Z wird gelöscht (sonst wie zuvor: erhöhen, dh.. die 26)
Das hat leider gar nicht funktioniert, aber danke...fürs löschen habe ich die lösung schon aber es soll anhalten sobald ein voller datensatz da ist...bzw. mit Inhalt. Dort soll er aufhören mit löschen und überspringen und dann wenn wieder etwas leeres kommt, die leeren markieren und wieder löschen usw.
DH!
ich kann mir nicht vorstellen, dass das NICHT funktioniert:
Was funktioniert denn nicht?
Allenfalls würde ich anstatt .delete .clear nehmen (.delete braucht möglicherweise ein xltoleft oder ein xlup)
Bei .clear werden Bezüge auf die nun leeren Zellen allerdings erhalten, .delete löst #Bezug in den ggf betroffenen Zellen aus.
ohne Rückfrage: ...offset(1, 0).entirerow.delete
Das kommt daher, wenn der Fragetext nichts mit der tatsächlichen Anforderung zu tun hat. Angefragt war
zur ersten leeren Zeile gehen und dann den rest markieren und löschen
irgendwann kommt dann heraus, dass es jeweils bis zur nächsten gefüllten Zeile gehen soll und die Zeilen dazwischen zu löschen sind.
...und wenn nach der ersten leeren Zeile nch was kommt? Auch löschen, oder suchen bis zum absoluten Datenende?
auch wenn nach der ersten zeile was kommt soll gelöscht werden
Super das hat geklappt, aber ich hatte einen gravierenden Denkfehler :-S
nun ich lade die Daten von mehreren Excel Dateien in eine Excel Datei rein. Und wenn ich diesen befehl in der Excel Datei ausführe wo alle Daten drinnen sind, dann wird sobald eine leere zeile erscheint der rest gelöscht, aber auch ausgefüllte datensätze. Wie kann ich einen stop einbauen, sodass es nur die leeren markiert und löscht? Vielleicht nach der if Bedingung beim markieren nur die leeren markieren dann löschen und dann weiter im code checken ob leer usw...