Hallo, ich möchte in einer Excel Datei per vba code bis zur ersten leeren zeile gehen, wie tue ich das?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
PrimMay 
Fragesteller
 03.03.2017, 15:03

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...

0
PrimMay 
Fragesteller
 03.03.2017, 15:30
@Oubyi, UserMod Light

ja das klappt leider nicht, aber ich könnte ja evtl soritieren. wie mache ich in VBA, dass die leeren zeilen ganz unten stehen?

0
PrimMay 
Fragesteller
 03.03.2017, 15:52
@Oubyi, UserMod Light

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

0
PrimMay 
Fragesteller
 03.03.2017, 16:39
@PrimMay

ich habs, trotzdem danke für die antwort, war meine Rettung!

0

Hallo kidiktol, 

ich würde diese VBA-Funktion benutzen: 

Dim LastRow As Integer
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Distel

PrimMay 
Fragesteller
 03.03.2017, 10:58

ja das habe ich vorher auch, aber das Problem ist, dass eben in diesem Template, die leeren zeilen als nicht leer gesehen werden

0

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.

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich
PrimMay 
Fragesteller
 03.03.2017, 12:06

wie wäre dieser Code mit löschen?

0
nobytree2  03.03.2017, 12:18
@PrimMay

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).

0
nobytree2  03.03.2017, 12:23
@nobytree2

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

0
PrimMay 
Fragesteller
 03.03.2017, 13:47
@nobytree2

ich finde deinen code auf jeden fall auch super, aber leider müssen diese tatsächlich weggelöscht werden :-S

1
nobytree2  03.03.2017, 13:50
@PrimMay

Statt "Rows(CStr(erste_leere_Zeile) & ":" & CStr(Max_Y)).Hidden = True" muss dann für diese Rows oder den Range ein Löschbefehl her.

0

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)

PrimMay 
Fragesteller
 03.03.2017, 15:39

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.

0
Iamiam  04.03.2017, 02:26
@PrimMay

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

0
Ninombre  04.03.2017, 09:42
@Iamiam

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.

0

...und wenn nach der ersten leeren Zeile nch was kommt? Auch löschen, oder suchen bis zum absoluten Datenende?

PrimMay 
Fragesteller
 03.03.2017, 10:41

auch wenn nach der ersten zeile was kommt soll gelöscht werden

0