Discussion:
Markieren von fester Zelle bis letzte Zelle
(zu alt für eine Antwort)
Christopher Flueckiger
2005-10-01 14:21:51 UTC
Permalink
Hallo

wie kann ich innerhalb eines Makros einen Bereich von einer bestimmten
Zelle, z. B. C10 bis zur letzten Zelle mit Inhalt markieren.

Oder etwas allgemeiner, dann kann ichs vielleicht auch in anderen Fällen
brauchen: Ich habe ein Makro, das mir die letzte Zelle ausgibt. Wie
verwende ich dieses nun eben für mein oben geschildertes Problem?

Excel XP mit Win XP

Gruss
Christopher
Eike Bimczok
2005-10-01 15:21:54 UTC
Permalink
Hallo Christopher,

schau mal in meine Antwort von diesem Thread von gestern rein:
Re: Zeilenhöhe 0 automatisch falls in der Zeile das Resultat 0 ist

Im ersten Makro mache ich das was du suchst, nämlich die letzte Zeile in
der angegeben Spalte herausfinden. Mit Range("C10:C" & lastRow).Select
kannst du dann auch den Bereich markieren.
Hinweis: Es ist in den seltensten Fällen notwendig oder sinnvoll mit
einem Makro Zellen zu markieren.

Gruß
Eike



*** ebay bekommt Konkurrenz - http://www.findix.com ***
Post by Christopher Flueckiger
Hallo
wie kann ich innerhalb eines Makros einen Bereich von einer bestimmten
Zelle, z. B. C10 bis zur letzten Zelle mit Inhalt markieren.
Oder etwas allgemeiner, dann kann ichs vielleicht auch in anderen Fällen
brauchen: Ich habe ein Makro, das mir die letzte Zelle ausgibt. Wie
verwende ich dieses nun eben für mein oben geschildertes Problem?
Excel XP mit Win XP
Gruss
Christopher
Christopher Flueckiger
2005-10-01 16:18:27 UTC
Permalink
Post by Eike Bimczok
Hallo Christopher,
Re: Zeilenhöhe 0 automatisch falls in der Zeile das Resultat 0 ist
Im ersten Makro mache ich das was du suchst, nämlich die letzte Zeile in
der angegeben Spalte herausfinden. Mit Range("C10:C" & lastRow).Select
kannst du dann auch den Bereich markieren.
Hinweis: Es ist in den seltensten Fällen notwendig oder sinnvoll mit
einem Makro Zellen zu markieren.
Gruß
Eike
*** ebay bekommt Konkurrenz - http://www.findix.com ***
Post by Christopher Flueckiger
Hallo
wie kann ich innerhalb eines Makros einen Bereich von einer bestimmten
Zelle, z. B. C10 bis zur letzten Zelle mit Inhalt markieren.
Oder etwas allgemeiner, dann kann ichs vielleicht auch in anderen Fällen
brauchen: Ich habe ein Makro, das mir die letzte Zelle ausgibt. Wie
verwende ich dieses nun eben für mein oben geschildertes Problem?
Excel XP mit Win XP
Gruss
Christopher
Hallo Elke

nach ein bisschen anpassen klappts einwandfrei. Vielen Dank!

Ich brauche die Markierung, um innerhalb des Bereichs eine Sortierung
durchzuführen, dann aber gehts anderswo weiter.
Wie sollte ich denn sowas lösen ohne Markierung?
Bin dankbar für jeden Hinweis, da noch nicht so bewandert mit Makros.

Nochmal danke und Gruss
Christopher
Eike Bimczok
2005-10-01 17:00:14 UTC
Permalink
Hallo Christopher,

Danke für die Rückmeldung. Es freut mich, wenn es geklappt hat. Aber ich
muss dir zustimmen. Sortieren ist so ziemlich der einzige Fall, bei dem
ein Select innerhalb von einem Makro nicht unbedingt überflüssig ist.

Gruß
Eike
Post by Christopher Flueckiger
Post by Eike Bimczok
Hallo Christopher,
Re: Zeilenhöhe 0 automatisch falls in der Zeile das Resultat 0 ist
Im ersten Makro mache ich das was du suchst, nämlich die letzte Zeile in
der angegeben Spalte herausfinden. Mit Range("C10:C" & lastRow).Select
kannst du dann auch den Bereich markieren.
Hinweis: Es ist in den seltensten Fällen notwendig oder sinnvoll mit
einem Makro Zellen zu markieren.
Gruß
Eike
*** ebay bekommt Konkurrenz - http://www.findix.com ***
Post by Christopher Flueckiger
Hallo
wie kann ich innerhalb eines Makros einen Bereich von einer bestimmten
Zelle, z. B. C10 bis zur letzten Zelle mit Inhalt markieren.
Oder etwas allgemeiner, dann kann ichs vielleicht auch in anderen Fällen
brauchen: Ich habe ein Makro, das mir die letzte Zelle ausgibt. Wie
verwende ich dieses nun eben für mein oben geschildertes Problem?
Excel XP mit Win XP
Gruss
Christopher
Hallo Elke
nach ein bisschen anpassen klappts einwandfrei. Vielen Dank!
Ich brauche die Markierung, um innerhalb des Bereichs eine Sortierung
durchzuführen, dann aber gehts anderswo weiter.
Wie sollte ich denn sowas lösen ohne Markierung?
Bin dankbar für jeden Hinweis, da noch nicht so bewandert mit Makros.
Nochmal danke und Gruss
Christopher
Herbert Taferner
2005-10-01 15:52:24 UTC
Permalink
Hallo Christopher,

wie Eike schon schrieb das markieren ist zu 99% nicht nötig

z. B.

Function markieren(Optional Anfang As String) As String
Dim Ende As String

With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If
Ende = .Range("A1").SpecialCells(xlCellTypeLastCell).Address
End With
markieren = Anfang & ":" & Ende
ActiveSheet.Range(markieren).Select
End Function

'-------------------------------
aufrufen z. B. mit

markieren ("B5") ' dadurch ist Markierung ab B5
oder
markieren ' ohne Zellangabe wird ab aktiver Zelle markiert

mfg Herbert
Christopher Flueckiger
2005-10-01 16:21:30 UTC
Permalink
Post by Eike Bimczok
Hallo Christopher,
wie Eike schon schrieb das markieren ist zu 99% nicht nötig
z. B.
Function markieren(Optional Anfang As String) As String
Dim Ende As String
With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If
Ende = .Range("A1").SpecialCells(xlCellTypeLastCell).Address
End With
markieren = Anfang & ":" & Ende
ActiveSheet.Range(markieren).Select
End Function
'-------------------------------
aufrufen z. B. mit
markieren ("B5") ' dadurch ist Markierung ab B5
oder
markieren ' ohne Zellangabe wird ab aktiver Zelle markiert
mfg Herbert
Hallo Herbert

sorry, habe die Antwort erst nachträglich gesehen. Trotzdem danke!

Siehe meine Antwort an Elke in diesem Thread.

Gruss
Christopher
Eberhard Funke
2005-10-01 16:27:27 UTC
Permalink
Post by Eike Bimczok
Hallo Christopher,
wie Eike schon schrieb das markieren ist zu 99% nicht nötig
z. B.
Function markieren(Optional Anfang As String) As String
Dim Ende As String
With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If
Ende = .Range("A1").SpecialCells(xlCellTypeLastCell).Address
End With
markieren = Anfang & ":" & Ende
ActiveSheet.Range(markieren).Select
End Function
'-------------------------------
aufrufen z. B. mit
markieren ("B5") ' dadurch ist Markierung ab B5
oder
markieren ' ohne Zellangabe wird ab aktiver Zelle markiert
mfg Herbert
Hallo Herbert,

ich habe mit SpecialCells(xlCellTypeLastCell) schlechte Erfahrungen
gemacht. Hier werden manchmal - aber nicht immer - auch Zellen
zurückgegeben, die mal etwas enthielten, dann aber wieder gelöscht wurden.

Ich hab's gerade noch mal getestet mit

Sub test()
Dim ende As String
ende = Range("A1").SpecialCells(xlCellTypeLastCell).Address
Debug.Print ende
End Sub
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Herbert Taferner
2005-10-01 17:01:39 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
ich habe mit SpecialCells(xlCellTypeLastCell) schlechte Erfahrungen
gemacht. Hier werden manchmal - aber nicht immer - auch Zellen
zurückgegeben, die mal etwas enthielten, dann aber wieder gelöscht wurden.
Ich hab's gerade noch mal getestet mit
Sub test()
Dim ende As String
ende = Range("A1").SpecialCells(xlCellTypeLastCell).Address
Debug.Print ende
End Sub
ja das ist bekannt,
der sicherere Weg ist über Used.Range

z. B.
Function markieren(Optional Anfang As String) As String
Dim Ende As String

With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If

Ende = .UsedRange.Find(What:="*", _
After:=.UsedRange.SpecialCells(xlCellTypeLastCell), _
SearchDirection:=xlPrevious).Address

End With
markieren = Anfang & ":" & Ende
ActiveSheet.Range(markieren).Select
End Function


mfg Herbert
Herbert Taferner
2005-10-01 17:15:20 UTC
Permalink
Hallo Eberhard,

da hat sich jetzt der Copyteufel eingeschlichen

so sollte es lauten

Function markieren(Optional Anfang As String) As String
Dim Ende As String
Dim LastRow As Long
Dim LastCol As Long

With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If
LastRow = .Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastCol = .Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

Ende = Cells(LastRow, LastCol).Address

End With
markieren = Anfang & ":" & Ende
ActiveSheet.Range(markieren).Select
End Function


mfg Herbert
klaus.schmitz
2005-10-02 02:02:31 UTC
Permalink
Hallo zusammen,

ich kann noch eine andere Variante für eine
Datentabelle anbieten, die ich für sehr zuverlässig halte.

Wenn ich Datentabelle schreibe, dann meine ich damit
ein Tabelle mit klarer Dateneingabe in Spalten.

Wenn z. B. in der Spalte A das Datum steht, dann gibt
es keine Zeile keine Datum, also kann ich die belegten
Zeilen in dieser Spalte zählen und bekomme sofort mit
meinem Makro die nächste leere Zeile, also ganz unten
am Tabellenende.

Hier den Makro:

Sub Neuzeile()
Dim ZeilenBelegung
ZeilenBelegung = Application.CountA(Range("A5:A1000"))
Range("A" & 5 + ZeilenBelegung).Select
End Sub


Ob ich nun Select, Activate oder sonstwas nehme, das ist egal
bei mir funktioniert das jedenfalls einwandfrei.

Mit der fast gleichen Funktion ( etwas umgebauten Version)
kann mann auch zielgenau sortieren und ausdrucken lassen.


MfG
Klaus
Eberhard Funke
2005-10-02 17:53:21 UTC
Permalink
Am Sat, 1 Oct 2005 19:15:20 +0200 schrieb Herbert Taferner:


Hallo Herbert,


[Code gelöscht, da er unten mit Ergänzungen aufgeführt wird]


(Ich habe den Funktionsaufruf geändert, weil sonst "Anfang" keine
Zelladresse enthält; aber das nur nebenbei).

Mit Deiner Methode zur Bestimmung von LastRow komme ich nicht klar. Die
Funktion steigt an dieser Stelle einfach aus.

Aber auch das eigentlich nur nebenbei.

Mit Deiner modifizierten Funktion wir zwar "Neumarkieren" die richtige
Adresse zugewiesen, der Bereich wird aber nicht selektiert.


Function Neumarkieren(Optional Start As Range) As String '***geändert***
'Function markieren(Optional Anfang As String) As String

Dim Ende As String
Dim LastRow As Long
Dim LastCol As Long
Dim Anfang As String ' ***neu eingefügt***

Anfang = Start.Address '***neu***

With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If
'LastRow = .Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'LastCol = .Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
LastRow = Range("A65536").End(xlUp).Row '***neu***
LastCol = Range("A256").End(xlToLeft).Column '***neu***
Ende = Cells(LastRow, LastCol).Address

End With
'markieren = Anfang & ":" & Ende
Neumarkieren = Anfang & ":" & Ende '***neu***
'Range(markieren).Select
Range(Neumarkieren).Select '***neu***
End Function


Select scheint generell bei Funktionen nicht möglich zu sein, s. folgende
Funktion "irgendwas":

Function irgendwas(Zelle As Range) As String
irgendwas = Zelle.Address
Range("A1:A5").Select
End Function
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Herbert Taferner
2005-10-02 18:24:38 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
(Ich habe den Funktionsaufruf geändert, weil sonst "Anfang" keine
Zelladresse enthält; aber das nur nebenbei).
Mit Deiner Methode zur Bestimmung von LastRow komme ich nicht klar. Die
Funktion steigt an dieser Stelle einfach aus.
Aber auch das eigentlich nur nebenbei.
Mit Deiner modifizierten Funktion wir zwar "Neumarkieren" die richtige
Adresse zugewiesen, der Bereich wird aber nicht selektiert.
normalerweise genügt ja die Adresse zu suchen mit Find

das markieren ist kein Problem,
zumindest mit untenstehendem Code
unter XL 2003

z. B.

Function markieren(Optional Anfang As String) As String
Dim Ende As String

With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If
Ende = .Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Address

markieren = Anfang & ":" & Ende
.Range(markieren).Select
End With
End Function


Sub test()

markieren ("B5")
' markieren ([B5]) ' oder Startadresse aus Zellwert

End Sub
Eberhard Funke
2005-10-02 19:22:46 UTC
Permalink
Post by Herbert Taferner
Hallo Eberhard,
Post by Eberhard Funke
(Ich habe den Funktionsaufruf geändert, weil sonst "Anfang" keine
Zelladresse enthält; aber das nur nebenbei).
Mit Deiner Methode zur Bestimmung von LastRow komme ich nicht klar. Die
Funktion steigt an dieser Stelle einfach aus.
Aber auch das eigentlich nur nebenbei.
Mit Deiner modifizierten Funktion wir zwar "Neumarkieren" die richtige
Adresse zugewiesen, der Bereich wird aber nicht selektiert.
normalerweise genügt ja die Adresse zu suchen mit Find
das markieren ist kein Problem,
zumindest mit untenstehendem Code
unter XL 2003
z. B.
Function markieren(Optional Anfang As String) As String
Dim Ende As String
With ActiveSheet
If Anfang = "" Then
Anfang = ActiveCell.Address
End If
Ende = .Cells.Find(What:="*", After:=Range("A1"), _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Address
markieren = Anfang & ":" & Ende
.Range(markieren).Select
End With
End Function
Das ist dann entweder ein Versionsproblem (XL2000), oder ich mache etwas
fasch: Werte in A1:A5, Aufruf der Funktion in C2, Eingabe von A1 in die
Funktion. Steigt bei "Ende = ..." aus.
A1=4711. Mit Haltepunkt bei "With ActiveSheet" zeigt Intellsense für Anfang
den Inhalt von A1, nämlich 4711 an.
Selbst wenn der Code bei mir nicht aussteigen würde, wäre das Ergebnis von
markieren = Anfang & ":" & Ende = "4711:A5"
Post by Herbert Taferner
Sub test()
markieren ("B5")
' markieren ([B5]) ' oder Startadresse aus Zellwert
End Sub
Ja, hier geht das mit dem Select, aber das ist ja auch keine FUNCTION. Hast
Du das mal mit meine " Function irgendwas" probiert?
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Herbert Taferner
2005-10-02 20:05:08 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
Das ist dann entweder ein Versionsproblem (XL2000), oder ich mache etwas
fasch: Werte in A1:A5, Aufruf der Funktion in C2, Eingabe von A1 in die
Funktion. Steigt bei "Ende = ..." aus.
A1=4711. Mit Haltepunkt bei "With ActiveSheet" zeigt Intellsense für Anfang
den Inhalt von A1, nämlich 4711 an.
Selbst wenn der Code bei mir nicht aussteigen würde, wäre das Ergebnis von
markieren = Anfang & ":" & Ende = "4711:A5"
Post by Eberhard Funke
Sub test()
markieren ("B5")
' markieren ([B5]) ' oder Startadresse aus Zellwert
End Sub
Ja, hier geht das mit dem Select, aber das ist ja auch keine FUNCTION. Hast
Du das mal mit meine " Function irgendwas" probiert?
Jetzt habe ich geschnallt was du meinst, das war ja auch nicht von mir
vorgesehen diesen Code als Function in der Zelle aufzurufen,
sondern Ausgang war ja per Makro von einer Startzelle bis zum letzten Eintrag
den Bereich zu markieren um wie sich nachher heraustellte diesen Bereich
zu sortieren

das hier der Code als Function deklariert ist, ist rein zufällig

mfg Herbert
Eberhard Funke
2005-10-03 11:57:10 UTC
Permalink
Am Sun, 2 Oct 2005 22:05:08 +0200 schrieb Herbert Taferner:

Hallo Herbert,
Post by Herbert Taferner
Post by Eberhard Funke
Das ist dann entweder ein Versionsproblem (XL2000), oder ich mache etwas
fasch: Werte in A1:A5, Aufruf der Funktion in C2, Eingabe von A1 in die
Funktion. Steigt bei "Ende = ..." aus.
Das ist tatsächlich ein Versionsproblem: Find funktioniert bei XL2000 nicht
innerhalb einer Function. Ist bekannt, hatte ich aber vergessen :-(
Post by Herbert Taferner
das hier der Code als Function deklariert ist, ist rein zufällig
Und damit ist auch dies geklärt, danke.
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Eberhard Funke
2005-10-02 18:30:11 UTC
Permalink
Post by Christopher Flueckiger
Hallo
wie kann ich innerhalb eines Makros einen Bereich von einer bestimmten
Zelle, z. B. C10 bis zur letzten Zelle mit Inhalt markieren.
Oder etwas allgemeiner, dann kann ichs vielleicht auch in anderen Fällen
brauchen: Ich habe ein Makro, das mir die letzte Zelle ausgibt. Wie
verwende ich dieses nun eben für mein oben geschildertes Problem?
Excel XP mit Win XP
Gruss
Christopher
Hallo Christopher,

eine Standardmethode zur Ermittlung der untersten belegten Zelle (hier in
Spalte A) ist
LetzteZeile=Range("A65536").End(xlUP).Row
wobei 65536 das untere Tabellenende ist. Excel geht dann von unten nach
oben und sucht die erste belegte Zelle.
Statt Range("A65536") kann man auch Cells(65536,1) schreiben, wie ich es
unten getan habe.

Sub Markieren()
Dim rngStart As Range, rngEnde As Range
Dim lngLastRow As Long
Set rngStart = Application.InputBox(prompt:= _
"Bitte erste Zelle markieren", Type:=8)
lngLastRow = Cells(65536, rngStart.Column).End(xlUp).Row
Set rngEnde = Cells(lngLastRow, rngStart.Column)
Range(rngStart, rngEnde).Select
End Sub

Du wirst aufgefordert, die oberste Zelle Deines Bereichs anzuklicken
(stattdessen kannst Du auch die Adresse, z. B. A2, eintippen).
--
Gruß Eberhard
XL 2000
Eberhard(punkt)Funke(at)t-online.de
Lesen Sie weiter auf narkive:
Loading...