Hi faten,
hier ist irgendetwas durcheinander.
Erstmal gibt es allgemein zwei Möglichkeiten, die erste letzte Zelle in einer Spalte zu finden:
1) von oben nach unten suchen (entspricht STRG + Pfeil-Taste-nach-unten)
Dim rngCell As Excel.Range
With Worksheets("Tabelle1").Range("A1") 'von Zelle A1 aus ...
Set rngCell = .End(xlDown) '... nach unten
End With
rngCell.Select 'letzte Zelle mit Inhalt
' rngCell.Offset(1).Select 'letzte Zelle OHNE Inhalt
Hier gibts jedoch das Problem, wenn in der Zelle darunter nichts drin steht, dann springt man in die letzte Zeile vom Tabellenblatt (= größt möglicher Zeilenindex).
Das kann man so abfangen:
Dim rngCell As Excel.Range
With Worksheets("Tabelle1").Range("A1")
If .Cells(1).Offset(1).Value <> "" Then
Set rngCell = .End(xlDown) 'von Zelle A1 aus nach unten
Else
Set rngCell = .Cells(1)
End If
End With
rngCell.Select 'letzte Zelle mit Inhalt
' rngCell.Offset(1).Select 'letzte Zelle OHNE Inhalt
2) von unten nach oben suchen (entspricht STRG + Pfeil-Taste-nach-oben)
Dim rngCell As Excel.Range
With Worksheets("Tabelle1")
Set rngCell = .Cells(.Rows.Count, "A").End(xlUp) 'in Spalte A, von letzter Zeile aus, nach oben
End With
rngCell.Select 'letzte Zelle mit Inhalt
' rngCell.Offset(1).Select 'letzte Zelle OHNE Inhalt
In der Regel wird diese Variante oft benutzt.
Diese kann man nur nicht verwenden, sollte man mehrere (nicht zusammenhängende) Bereiche im Tabellenblatt untereinander benutzen - was selten der Fall ist.
Man kann das auch noch kombinieren:
Dim rngCell As Excel.Range
With Worksheets("Tabelle1")
'das kann hier entweder eine einzelne Zelle ergeben,
'oder einen Bereich
Set rngCell = .Range(.Cells(1, "A").End(xlDown), .Cells(.Rows.Count, "A").End(xlUp))
'im Falle eines Bereichs nehmen wir die erste Zelle
If rngCell.Cells.Count > 1 Then Set rngCell = rngCell(1)
End With
rngCell.Select 'letzte Zelle mit Inhalt
' rngCell.Offset(1).Select 'letzte Zelle OHNE Inhalt
Sagen wir nun mal, du hast die letzte leere Zelle gefunden und willst dahin etwas kopieren:
'kopiert 5 (untereinander liegende) Zellen von Tabelle2, Bereich A3:A7, nach rngCell
'(hierbei muss man beachten, dass man den Zielbereich anpasst;
' -> also von einer (1) Zelle auf fünf (5) Zellen ... das macht man mit <RangeObject>.Resize)
rngCell.Resize(5).Value = Worksheets("Tabelle2").Range("A3:A7").Value
|