Wie kann ich einen Zellwert in die erste leere Zelle eines Bereiches eintragen lassen?
Die Beispiele zeigen, wie die letzte ausgefüllte Zelle zu ermitteln ist. In jedem Fall muss dann nur Zeile oder Spalte um 1 erhöht werden, um auf die erste leere Zelle zu kommen.
VBA
Grundsätzlich:
Mit Cells(Rows.Count, 1).End(xlUp).Row können wir abfragen, welche die letzte ausgefüllte Zelle in Spalte A (also 1) ist.
Brauchen wir die letzte ausgefüllte Zelle in einer Zeile, also die Spaltenangabe dieser Zelle, können wir Cells(1, Columns.Count).End(xlToLeft).Column verwenden (hier für Zeile 1).
Diese beiden Codestücke funktionieren auch zuverlässig, wenn nicht gerade die erste Zelle in der Spalte bzw. in der Zeile leer ist. In dem Fall würde auch die 1 zurückgegeben - was hie�e, dass
diese erste Zelle Inhalt hätte. Aus diesem Grund muss, wenn dies eine Rolle spielen kann, vorher geprüft werden, ob die erste Zelle der Spalte/Zeile auch leer ist. Damit wird dies berücksichtigt:
Dim strAddr As String
'Spalte A, entspricht 1:
If IsEmpty(Cells(1, 1)) Then
strAddr = Cells(1, 1).Address
Else
strAddr = Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Address
End If
Range(strAddr).Value = "Erste leere Zelle"
Stehen in der ersten Zeile grundsätzlich Spaltenüberschriften, spielt das bei der ersten ausgefüllten Zelle in einer Spalte natürlich keine Rolle.
Das Eintragen erfolgt dann einfach in die nächste Zelle. Entweder:
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Select
oder:
a = Cells(Rows.Count, 2).End(xlUp).Row + 1
Entsprechend ist es auch bei der ersten leeren Zelle in einer Zeile:
a = Cells(2, Columns.Count).End(xlToLeft).Column + 1
Wenn etwas in die erste freie Zelle in einer Zeile kopiert werden soll, kann man z. B. so vorgehen:
Sub NaechstfreieSpalte()
Selection.Copy Destination:=Cells(ActiveCell.Row, Columns.Count).End(xlToLeft).Offset(0, 1)
End Sub
Formel
Mit der Funktion ADRESSE() in Verbindung mit ANZAHL2() kann die letzte ausgefüllte Zelle ermittelt werden, wenn sich keine leeren Zellen im Bereich befinden:
=ADRESSE(ANZAHL2(B1:B34)+2;2;4)
Das +2 bedeutet, dass der zu prüfende Bereich erst in B3 beginnt.
Oder:
=INDIREKT("B"&ANZAHL2(B2:B10000)+1)
Das +1 hei�t, dass der erste Wert in B in Zeile 2 steht. Steht der erste Wert in Zeile 1, kann es weggelassen werden. Steht der erste Wert aber in Zeile 3, wäre es +2 usw.
Eine andere Variante, die aber nur bis Spalte Z funktioniert, ist:
=LINKS(ADRESSE(ZEILE($B$6);SPALTE($B$6));3)&ANZAHL2($B$3:$B$65536)+ZEILE($B$3)-1