HERBERS Excel-Forum - das Archiv

Thema: erste leere Zelle von oben finden

erste leere Zelle von oben finden
Mike
Hallo zusammen, ich versuche folgendes per Excel Makro hinzubekommen, funktioniert aber nicht so wie ich das gerne hätte, daher die Bitte um Hilfe & Unterstützung, vielen Dank vorab

Die Datei habe ich beigefügt

https://www.herber.de/bbs/user/177779.xlsx

1) finden der 1. leeren Zelle in Spalte B (hier B7, Ende1)
2) anschließend Bereich von A2 bis Ende zur ersten leeren Zelle in Spalte B -1 (hier B6) kopieren und in Sheet Tabelle2 Zelle A1 einfügen
3) anschließend Bereich von Zelle (A & Ende1+1) bis Ende zur letzten leerbeschriebenen Zelle in Spalte B (hier B11) kopieren und in Sheet Tabelle3 Zelle A1 einfügen

Gruß Mike
AW: erste leere Zelle von oben finden
cysu11
Hi Mike,

so?

Sub test2()

Dim i As Long, lr As Long
lr = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To Rows.Count
If IsEmpty(Cells(i, "B")) Then
ActiveSheet.Range("A2:B" & i - 1).Copy Destination:=ThisWorkbook.Sheets("Tabelle2").Range("A1")
ActiveSheet.Range("A" & i & ":B" & lr).Copy Destination:=ThisWorkbook.Sheets("Tabelle3").Range("A1")
Exit Sub
End If
Next i
End Sub


LG, Alexandra
AW: erste leere Zelle von oben finden
cysu11
zweite teil noch angepasst:

Sub test2()

Dim i As Long, lr As Long
lr = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To Rows.Count
If IsEmpty(Cells(i, "B")) Then
ActiveSheet.Range("A2:B" & i - 1).Copy Destination:=ThisWorkbook.Sheets("Tabelle2").Range("A1")
ActiveSheet.Range("A" & i + 1 & ":B" & lr).Copy Destination:=ThisWorkbook.Sheets("Tabelle3").Range("A1")
Exit Sub
End If
Next i
End Sub


LG, Alexandra
AW: erste leere Zelle von oben finden
Mike
Vielen Dank Euch allen für die hilfreichen Rückmeldungen, super! :-)

Da ich noch eine Erweiterung habe, wäre ich Euch dankbar wenn ihr mir auch hier helfen könntet, vielen Dank vorab

https://www.herber.de/bbs/user/177796.xlsm

1) finden der 1. leeren Zelle in Spalte B (hier B7, Ende1)
2) anschließend Bereich von A2 bis Ende zur ersten leeren Zelle in B-1 (hier B6) kopieren und in Sheet Tabelle2 Zelle A1 einfügen
3) anschließend Bereich von Zelle (A & Ende1+1) bis Ende zur nächsten leeren Zelle in Spalte B (hier B12) kopieren und in Sheet Tabelle3 Zelle A1 einfügen
4) anschließend Bereich von Zelle (A & Ende2+1) bis Ende zur nächsten leeren Zelle in Spalte B (hier B17) kopieren und in Sheet Tabelle4 Zelle A1 einfügen

Gruß Mike

AW: erste leere Zelle von oben finden
daniel
Hi
prinzipiell sollte meine Lösung alle Blöcke in ein eigenes Tabellenblatt schreiben (sofern genügend vorhanden sind)

aber noch eine Frage zu deiner Beschreibung:
deiner Beschreibung nach soll beim ersten Block die Zeile mit der Leeren Zelle NICHT mit kopiert werden (A2-B2)
aber bei den Blöcken 2 und drei soll die Leere Zeile mit kopiert werden (Block 2: A8-B12, Block 3: A13:B17

oder um es nochmal zu zeigen: ( "_" steht für Leerzelle)
nach Tabelle 2:
1|1
2|1
3|1
4|1
5|1

nach Tabelle3:
 7|1
 8|1
 9|1
10|1
11|_

nach Tabelle 4
12|1
13|1
14|1
15|1
_|_

ist das so korrekt mit diesem Unterschied zwischen Block 1 und den weiteren Blöcken?

und: gibt es nur 3 Blöcke oder können noch weitere Blöcke hinzukommen?

Gruß Daniel

AW: erste leere Zelle von oben finden
Mike
Hi Daniel,
danke für die schnelle Rückmeldung.
Danach kommt keine weitere Spalte mehr dazu.
Und ja, es soll die leere Zeile nicht mit kopiert werden wenn möglich
Viele Grüße,
Mike
AW: erste leere Zelle von oben finden
daniel
naja genau das macht doch mein Makro von gestern.
Meinst du...
Case
Moin Mike, :-)

... so? ;-)
https://www.herber.de/bbs/user/177780.xlsb

Servus
Case
AW: erste leere Zelle von oben finden
daniel
Hi

hier mal ein etwas unbekannterer Ansatz:

Sub test()

Dim a As Long
With Columns(2).SpecialCells(xlCellTypeConstants, 1)
For a = 1 To .Areas.Count
.Areas(a).Offset(0, -1).Resize(, 2).Copy
Sheets(a + 1).Range("a1").PasteSpecial xlPasteAll
Next
End With
End Sub


mit dem SpecialCells kann man einen größeren Zellbereich auf bestimmte Zellen einschränken.
hier auf alle Zellen mit festen Werten (xlcelltypeconstants, das gegenstück wären Zellen mit Formeln) , die Zahlen sind (dafür steht die 1, Texte wären 2 und 3 wären Zahlen und Texte)

wenn man das macht, bekommt man einen Zellbereich, der nur aus den Einsen besteht, dh ohne die Lücke (da Leerzelle) und ohne die Überschrift (die ist ja Text), also
B2:B6,B8:B11.
wie man sieht, besteht dieser Zellbereich auch zwei Blöcken. Diese einzelnen Blöcke kann man jetzt über das Konstrukt: AREA abfragen.
hier werden also die einzelnen Areas kopiert und das jeweilige Tabellenblatt eingefügt

man muss sich das so vorstellen:
Cells() - Einzelne Zelle
Range() - beliebige Zusammenstellung von Zellen auf einem Tabellenblatt
Area() - ist immer ein rechteckiger lückenloser Zellblock. Eine Area sind die lückenlosen rechteckigen Zellbereiche, aus denen eine Range zusammengesetzt sein kann.

Gruß Daniel