Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: usedrange

usedrange
20.06.2014 15:44:50
Stephan
Hallo Zusammen,
ich würde gern ab Zeile 5 den gesamten Bereich markieren. Bisher verwende ich folgenden Code:
Sheets("Tabelle1").Rows("5:65553").Select
Nun würde ich gern ab Zeile 5 den gesamten gefüllten Bereich ansprechen. Von A1 beginnend klappt es:
Sheets("Tabelle1").UsedRange.Rows.Select
Aber ab Zeile 5 gestaltet es sich schwierig. Mein Versuch leider mit Fehlermeldung:
Sheets("Tabelle1").Rows("8:" & UsedRange).Rows.Select
Freue mich über jede Hilfe. Vielen Dank!
Grüße
Stephan

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Range statt 1.Rows, 2.Rows entfällt! Gruß owT
20.06.2014 15:49:59
Luc:-?
:-?

AW: Range statt 1.Rows, 2.Rows entfällt! Gruß owT
20.06.2014 15:58:54
Stephan
Hallo Luc,
danke für deine Antwort. Das würde dann für mich so aussehen:
Sheets("Tabelle1").Range("5:" & UsedRange).Select
Klappt aber nicht.
Grüße
Stephan

AW: Range statt 1.Rows, 2.Rows entfällt! Gruß owT
20.06.2014 16:11:55
Daniel
Hi
Korrekterweise schaust auch so aus
Sheets("Tabelle1").Range("5:" & Sheets("Tabelle1").cells.specialcells(xlcelltypelastcell).row). _
Select

Oder
Sheets("Tabelle1").Range("5:" & Sheets("Tabelle1").Usedrange.rows.count).Select
Die zweite Variante setzt voraus, dass die Zeile 1 benutzt wird, dh Daten oder Formate enthält.
Ansonsten gehört sie nicht zur Usedrange und das Rows.Count liefert ein für diese Anwendung falsches Ergebnis.
Gruß Daniel

Anzeige
AW: Range statt 1.Rows, 2.Rows entfällt! Gruß owT
20.06.2014 16:27:36
Stephan
Hallo Daniel,
vielen Dank! Nun habe ich folgenden Code:
Sheets("Tabelle1").Range("A5:O" & Sheets("Tabelle1").UsedRange.Rows.Count).Select
Passt für mich! Danke auch für den Hinweis mit der ersten Zeile.
Grüße
Stephan

Kann auch nicht! UsedRange ist selbst Bereich! owT
20.06.2014 16:59:09
Luc:-?
:-?

AW: usedrange
20.06.2014 16:11:39
EtoPHG
Hallo Stephan,
SELECT ist zu 99% überflüssig. Also erkläre WAS du in dem Bereich mit VBA anstellen willst.
Der Bereich ohne die ersten 4 Zeilen wäre:
    With Worksheets("Tabelle1")
Intersect(.UsedRange, .UsedRange.Offset(4)).Select
End With
Gruess Hansueli

Anzeige
AW: usedrange
20.06.2014 16:36:09
Stephan
Hallo Hansueli,
vielen Dank für deinen Vorschlag. Daniel hat mir eine gute Lösung gegeben.
Grüße und schönes Wochenende
Stephan

UsedRange.Rows.Count ... Die Irrtümer
20.06.2014 18:17:58
Matthias
Hallo Stephan
Bist Du Dir darüber im Klaren was
Sheets("Tabelle1").UsedRange.Rows.Count

Dir zurückgibt?
Das ist die letzte Zeile im benutzten Bereich, ab Beginn des benutzten Bereichs!

Beispiel!
Wenn Du nun in A5 beginnst Daten einzupflegen und den Code so benutzt kann/wird es zu falschen Auswertungen kommen!
Ich werde Dir das hier mal an einem Bsp. demonstrieren
https://www.herber.de/bbs/user/91196.xlsm
UsedRange hat im Bsp. 5 Zeilen also gibt UsedRange.Rows.Count 5 zurück
und markiert auch nur Zeile5 im gewünschten SpaltenBereich
Verstanden?
Gruß Matthias

Anzeige
AW: UsedRange.Rows.Count ... Die Irrtümer
21.06.2014 13:06:36
Stephan
Hallo Matthias,
vielen Dank für deinen Hinweis. Deinen Thread habe ich verstanden und meine bisherige Lösung überprüft.
Nun muss ich folgenden Code verwenden: Sheets("Tabelle1").Range("A5:G" & Sheets("Tabelle1").Cells.SpecialCells(xlCellTypeLastCell).Row).Select
Bisher habe ich immer das gesamte Tabellenblatt angesprochen mit rows.(5:65536) Dabei spreche ich aber das gesamte Tabellenblatt an, unabhängig ob Daten enthalten sind. Bei xls 2010 müsste ich das noch erweitern.
Eine andere Möglichkeit wäre End(xlUp) und End(xlToRight. Dies setzt jedoch voraus, dass die Spalte A komplett gefüllt ist. Ist bei mir leider nicht der Fall.
Somit sollte… xlCellTypeLastCell…, oder?
Vielen Dank nochmal
Grüße
Stephan

Anzeige
AW: UsedRange.Rows.Count ... Die Irrtümer
21.06.2014 14:27:44
Daniel
Hi
die Usedrange ist ein rechteckiger Zellbereich, welcher alle Zellen umfasst, die einen Wert, eine Formel oder eine eigenständige Formatierung enthalten.
Cells.SpecialCells(xlcelltypelastcell) ist die rechte unter Zelle der Usedrange.
Cells.SpecialCells(xlcelltypelastcell).Row liefert als Ergbnis die Zeilennummer der letzen benutzen Zelle.
Activesheet.Usedrange.Rows.Count liefert dir als Ergbnis die Anzahl der Zeilen des benutzen Bereichs.
wenn die Zeile 1 zum benutzen Bereich gehört, sind beide Werte gleich.
gehört die Zeile 1 nicht zum benutzen Bereich, dh der benutze Bereich fängt erst in Zeile 2 oder später an, dann ist die Anzahl der Zeilen im benutzen Bereich natürlich kleiner als die Zeilennummer der letzen benutzten Zeile.
wenn du die Zeilennummer der letzten benutzen Zeile brauchst, dann hast du folgende Möglichkeiten:
1. cells.specialcells(xlcelltypelastcell).row
2. Activesheet.Usedrange.Row + Activesheet.Usedrange.Rows.Count - 1
wenn sichergestellt ist, dass die erste Zeile zum benutzen Bereich gehört, dann reicht auch
3. Activersheet.Usedrange.Rows.count.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Mit .UsedRange in Excel VBA arbeiten


Schritt-für-Schritt-Anleitung

Um in Excel VBA den UsedRange ab einer bestimmten Zeile zu selektieren, gehe folgendermaßen vor:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen > Modul.

  3. Gib folgenden Code ein:

    Sub SelectUsedRangeFromRow()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Tabelle1")
       ws.Range("A5:" & ws.Cells.SpecialCells(xlCellTypeLastCell).Row).Select
    End Sub

    Hiermit wird der Bereich ab Zeile 5 bis zur letzten benutzten Zeile ausgewählt.

  4. Führe das Makro aus: Drücke F5, während der Cursor im Code steht.

Dieser Code nutzt SpecialCells(xlCellTypeLastCell) um die letzte benutzte Zelle zu ermitteln und selektiert den gewünschten Bereich.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler, da die Zeile nicht existiert."

    • Lösung: Stelle sicher, dass der Arbeitsblattname korrekt ist und dass es tatsächlich Daten ab der angegebenen Zeile gibt.
  • Fehler: "Method 'Range' der Klasse 'Worksheet' fehlgeschlagen."

    • Lösung: Überprüfe, ob der Bereich richtig definiert ist. Der Code sollte die Syntax Range("A5:" & EndRow) verwenden, wobei EndRow die letzte Zeile ist.

Alternative Methoden

Eine Alternative zum UsedRange ist die Verwendung von Rows.Count. Du kannst den Code wie folgt anpassen:

Sub SelectRowsCount()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle1")
    ws.Range("A5:O" & ws.UsedRange.Rows.Count + 4).Select
End Sub

Hierbei wird die Anzahl der benutzten Zeilen ab Zeile 5 selektiert.


Praktische Beispiele

  1. Selektion ab Zeile 5 mit UsedRange:

    Sub SelectFromRow5()
       With ThisWorkbook.Sheets("Tabelle1")
           .Range("A5:" & .Cells.SpecialCells(xlCellTypeLastCell).Row).Select
       End With
    End Sub
  2. Benutzung von .UsedRange und .Rows.Count:

    Sub SelectUsedRangeRowsCount()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Tabelle1")
       ws.Range("A5:O" & ws.UsedRange.Rows.Count).Select
    End Sub

Diese Beispiele zeigen, wie du den UsedRange in Excel VBA effektiv nutzen kannst.


Tipps für Profis

  • Vermeide die Verwendung von .Select: In vielen Fällen ist es nicht notwendig, Zellen zu selektieren. Du kannst direkt mit den Zellen arbeiten, was den Code effizienter macht.

  • Verwende Error Handling: Füge On Error Resume Next hinzu, um Fehler abzufangen, insbesondere, wenn du mit SpecialCells** arbeitest, um Laufzeitfehler zu vermeiden.

  • Nutze .UsedRange.Rows.Count mit Bedacht: Achte darauf, dass die erste Zeile tatsächlich Daten enthält, um falsche Ergebnisse zu vermeiden.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen UsedRange und SpecialCells?
Der UsedRange umfasst alle Zellen, die Daten, Formate oder Formeln enthalten, während SpecialCells(xlCellTypeLastCell) die letzte benutzte Zelle im Arbeitsblatt zurückgibt.

2. Wie kann ich den UsedRange in einem anderen Arbeitsblatt verwenden?
Du kannst einfach den Arbeitsblattnamen in deinem Code anpassen, z.B. Worksheets("AnderesBlatt").UsedRange.

3. Warum zählt .UsedRange.Rows.Count nicht immer die erwartete Anzahl?
Wenn die erste Zeile leer ist, zählt UsedRange diese nicht, was zu unerwarteten Ergebnissen führen kann. Achte darauf, dass die ersten Zeilen Daten enthalten, um genaue Zählungen zu erhalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige