Letzte Zelle mit Zeichen in Bereich
#1
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?
Top
#2
Hallo!
Der zusätzliche Parameter SearchOrder:=xlByColumns sollte helfen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
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. :)
Top
#4
(06.08.2015, 13: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
Top
#5
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
Top
#6
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
(06.08.2015, 15: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.
Top
#8
Hallo Anne,

(06.08.2015, 17: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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#9
(08.08.2015, 05: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.
Top
#10
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste