PDA

Vollständige Version anzeigen : richtigen Zellbereich markieren


goodfreezer
21.02.2017, 09:27
Grüßt euch:)

ich möchte gern einen Zellbereich von der ersten bis zur letzten beschriebenden Zelle markieren.

Bsp:
A1(wert1)B1(wert2)
A2(leer)B2(leer)
A3(leer)b2(leer)C3(wert3)

hier sollte mir dann also immer sauber der Bereich A1:C3 markiert werden...

Mit
ActiveSheet.UsedRange.Select
schmeißt er ja dann oft zusätzliche Zeilen und SPalten mit rein, also funktioniert das wohl nicht immer sauber und
ActiveSheet.Range("a1").CurrentRegion.Select
kann ja mit der leerzeile in Zeile 2 nicht umgehen und markiert dann nur A1:B1.

Schon einiges gelesen und ausprobiert, leider ohne Erfolg. Habt ihr eine Lösung um das Problem (möglich einfach) sauber lösen zu können?

Liebe Grüße

hary
21.02.2017, 10:12
Moin
Eine Moeglichkeit mit find.
Dim lngLetzeZeile As Long
lngLetzeZeile = [A:C].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row'--mit Column bekommst du die Spalte wenn gebraucht
Range("A1:C" & lngLetzeZeile).Select
gruss hary

goodfreezer
21.02.2017, 10:40
Hallo Hary,

supi, das geht glaub genau in die Richtung was ich suche. Vielen Dank

Da der letzte Eintrag auch in einer beliebigen Spalte stehen kann, hab ich wie du ja im Kommentar schon vorgschlagen hast das Makro so angepasst:

Sub hary()
Dim lngLetzeZeile As Long
lngLetzeZeile = [A:Z].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row '--mit Column bekommst du die Spalte wenn gebraucht
lngLetzeSpalte = [A:Z].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Column

Range(lngLetzeSpalte & lngLetzeZeile).Select
End Sub


Leider bekomme ich dann aber eine Fehlermeldung Fehler 1004 die Methode Range für das Objekt Global ist Fehlgeschlagen. Vermute mal ich muss SearchDirection bei der Spaltendefinition zu ändern, aber wie nur?

hary
21.02.2017, 10:55
Moin
Syntax falsch;-)
Cells(lngLetzeZeile, lngLetzeSpalte).Select
wenn du nur die letzte markieren moechtest(stand in #1 anders)
Reicht auch:
Range([A:Z].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Address).Select
gruss hary

goodfreezer
21.02.2017, 11:32
Besten Dank!
Irgendwie steh ich da trotzdem immer noch auf dem Gartenschlauch, mit dem angepassten cells anstatt Range:


Sub hary()
Dim lngLetzeZeile As Long
Dim lngLetzeSpalte As Long
lngLetzeZeile = [A:Z].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row '--mit Column bekommst du die Spalte wenn gebraucht
lngLetzeSpalte = [A:Z].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Column
Cells(lngLetzeSpalte, lngLetzeZeile).Select
End Sub

springt mir die markierung auf eine scheinbar beliebige Zelle bei mir Q7.

Die letzte beschriebene Zelle in meinem Beispiel war aber eigentlich g17 und mein Wunsch wäre schon wie im ersten Post geschrieben das dann auch A1:g17 komplett markiert wird...

Das Anspringen nur der Zelle g17 funktioniert mit deinem Beispiel Code

Range([A:Z].Find(What:="*", After:=[A1], LookIn:=xlFormulas, SearchDirection:=xlPrevious).Address).Select


Aber es soll ja dann bis A1 hochmarkiert werden, dachte schon ich zeichne nachdem ich die letzte beschrieben Zelle markiert habe mal den Makro Rekorder an und drücke die Taste "Pos1"(um von der Position ganz nach linkz zu markieren) und eine Tastenkombination die jetzt alles bis in die erste Zeile markiert, wenn es die gibt...
Wenn ich die beiden Tasten dann an das einzelnen Markieren der letzten Zelle dranschmeiße hätte ich ja auch den kompletten Bereich markiert,,...

Vielleich hat ja noch jemand eine Idee...

hary
21.02.2017, 11:36
Moin
Lad mal eine Bsp.-Mappe hoch. Kann mehrere Gruende haben Format/Formel usw..
versuch
Range([A:Z].Find(What:="*", After:=[A1], LookIn:=xlValues, SearchDirection:=xlPrevious).Address).Select
Evtl. musst der Range dem Blatt zugewiesen werden.
Worksheets("Tabelle1").Range(.......
gruss hary

goodfreezer
21.02.2017, 14:03
Hallo Hary und alle Mitleser...

Habe jetzt durch rumprobieren doch endlich eine Lösung gedunden die für mich funktioniert. Für alle die ein ähnliches Problem haben


Sub jep()
Range([A:Z].Find(What:="*", After:=[A1], LookIn:=xlValues, SearchDirection:=xlPrevious).Address).Select
Range(Selection, Cells(ActiveCell.Row, 1)).Select
Range(Selection, Cells(1, ActiveCell.Column)).Select
End Sub

Vielleicht nicht die sauberste Varainte , aber sie funktioniert für mich ganz prächtig:)

Für mich gings dann weiter dass dieser Bereich kopiert werden soll und in eine andere Tabelle eingefügt werden soll. Wenn nun in dem Bereich ausgeblendete Spalten waren, werden diese beim einfügen mit ins neue Tabellenblatt kopiert um dieses zu verhindern habe ich das Paste etwas spezialisiert:


ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False



Lieben Dank nochmal lieber hary, für deine investierte Zeit zur Lösungsfindung:)