Clever-Excel-Forum

Normale Version: Letzte Zelle mit Zeichen in Bereich
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

kann jemand bei folgendem Problem helfen?
In einem Bereich z.B. B10:Z20 werden Buchstaben und Zahlen eingetragen.
Einzelne Zellen können auch leer bleiben.
Nun möchte ich per Makro zur letzten Zelle mit einem Inhalt in diesem Bereich springen.
Das mache ich bisher so, funktioniert aber nicht exakt:
Code:
Sub letzteZelle()
    Range("B10:Z20").Find(what:="?*", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious).Select
End Sub
Fallbeispiel: Wenn der letzte Inhalt in V16 steht und der vorletzte in S20 wird S20 markiert und nicht V16.
Es wird scheinbar immer die letzte unterste Zelle mit Inhalt im Bereich gefunden.
Was müßte im Code geändert werden?
Hallo!
Der zusätzliche Parameter SearchOrder:=xlByColumns sollte helfen.

Gruß Ralf
Hallo return,


meinst Du das hier?:

Code:
Sub letzteZelle()
   Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select
End Sub
Gruß Carsten

Edit:
Ne, Du willst die letzte gefüllte Zelle im Bereich. Nimm Ralfs Vorschlag. :)
(06.08.2015, 12:14)RPP63 schrieb: [ -> ]Der zusätzliche Parameter SearchOrder:=xlByColumns sollte helfen.
Super, der Parameter passt.
Allerdings bekomme ich eine Fehlermeldung, wenn der Bereich leer ist.
Laufzeitfehler '91':
Objektvariable oder With-Blockvariable nicht festgelegt
Habe das mit on error umgangen. Oder macht man es besser anders?
Das Makro ist einfach einer Form zuwiesen.



Bem.: Carstens Vorschlag funktioniert garnicht ??
Zitat:meinst Du das hier?:
Sub letzteZelle()
   Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select
End Sub
Gruß Carsten
Hallo Anne,

mein Beispiel funktionierte schon, nur eben nicht wie von Dir gewünscht.
Es sucht die letzte Zelle in der  Range auf.


Zu Deinem Problem mit dem Laufzeitfehler könnte es auch folgende Lösung geben:
Code:
Sub letzteZelle()
On Error GoTo Er
   If Not Range("B10:Z20").Find(what:="?*", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious, SearchOrder:=xlByColumns) Is Nothing Then
       Range("B10:Z20").Find(what:="?*", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious, SearchOrder:=xlByColumns).Select
   Else
       Range("B10").Select
   End If
Ex:
   Exit Sub
Er:
    MsgBox "FehlerNr:" & Err.Number & vbCrLf & Err.Description
   Resume Ex
End Sub


Gruß Carsten
Hallo Anne!
On Error sollte man nur bei unerwarteten Fehlern nutzen.
Dies ist hier nicht der Fall.
Eine Möglichkeit ist, eine Range-Variable (hier die Fundstelle) auf Nothing zu prüfen:

Code:
Sub letzteZelle()
Dim LZ As Range
Set LZ = Range("B10:Z20").Find(What:="?*", LookIn:=xlValues, _
  LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
If Not LZ Is Nothing Then Application.Goto LZ
End Sub

Gruß Ralf
(06.08.2015, 14:33)RPP63 schrieb: [ -> ]On Error sollte man nur bei unerwarteten Fehlern nutzen.
Dies ist hier nicht der Fall. Eine Möglichkeit ist, eine Range-Variable (hier die Fundstelle) auf Nothing zu prüfen:
Code:
Sub letzteZelle()
Dim LZ As Range
Set LZ = Range("B10:Z20").Find(What:="?*", LookIn:=xlValues, _
  LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
If Not LZ Is Nothing Then Application.Goto LZ
End Sub
Hallo Carsten und Ralf,

beide Codes laufen tadellos. Habe mich auf Grund der Erklärung für Ralfs Vorschlag entschieden.
Vielen Dank für Eure Beiträge.

@Carsten:
Hatte Deinen 1. Code in zwei Mappen ausprobiert. In der ersten wurde die Zelle A1 selektiert und
in der zweiten AH20. Daraus konnte ich mir keinen Reim machen. Aber jetzt ist ja ok.
Hallo Anne,

(06.08.2015, 16:42)anne schrieb: [ -> ]@Carsten:
Hatte Deinen 1. Code in zwei Mappen ausprobiert. In der ersten wurde die Zelle A1 selektiert und
in der zweiten AH20. Daraus konnte ich mir keinen Reim machen. Aber jetzt ist ja ok

Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select

findet auch eine Zelle, deren Inhalt Du in der Sitzung / nach dem letzten Speichern gelöscht hast.
(08.08.2015, 04:44)schauan schrieb: [ -> ]Hallo Anne,


Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select

findet auch eine Zelle, deren Inhalt Du in der Sitzung / nach dem letzten Speichern gelöscht hast.

Hallo André,

habe gerade mal ein bisschen damit rumgespielt. Erstaunlich, es werden ja auch nur Formatierungen gefunden.
Formatierungen haben aber scheinbar eine höhere Priorität wie Dateneinträge.
Hallo Anne,
Das ist eben das Unsichere an dem Code. Ging es bei den Formatierungen eventuell um benutzerdefinerte? Da gibt's auch noch Unterschiede. Wenn Du z.B. Das ganze Blatt markierst und eine normale Formatierung nimmst - beispielsweise Zellrahmen, findet es glücklicherweise nicht das ganze Blatt bzw die allerletzte Zelle rechts unten.