Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CurrentRange vs. CurrentRegion

Forumthread: CurrentRange vs. CurrentRegion

CurrentRange vs. CurrentRegion
Werner
VBA-Kenntnisse: mittelgut
Hallo!
Laut der Microsoft-Hilfe zu EXCEL 2007 kann man einen benutzten Zellbereich auch etwa so markieren:

Private Sub InGebrauch()
Dim tbl As Range
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
tbl.Columns.Count).Select
End Sub


Ist das eine Alternative zum UsedRange, der manchmal größer ausfällt als der tatsächliche benutzte
Bereich, weil der UsedRange oft auch Leerzellen ausserhalb des tatsächlich benutzten Bereichs mitenthält?
Ich bin durch obigen Code etwas verwirrt. Kann mir jemand den Unterschied zwischen dem UsedRange und dem durch obigen Code markierten Bereich erklären?
Werner

Anzeige
Erklärungsversuch ...
07.05.2008 10:40:56
Matthias
Hallo Werner
Ich glaub das hat eher mit einem kleinen Denkfehler zu tun.
Dein Code verursacht bei mir übrigens einen Fehler. (XL2000)
Nimm mal eine leere Mappe
Markiere B4:F16 und schreibe ein X dann STRG+Enter jetzt ist der gesamte Bereich B4:F16 mit "X" gefüllt.
Wenn Du nun mal in z.B in E22 eine Zahl einträgst und dannach wieder löschst,
so gehört E22 mit zur UsedRange!
UsedRange ist der benutzte Bereich - richtig ! Auch E22 gehört nun dazu, denn die Zelle war in Benutzung!!
CurrentRegion ist nur der Bereich, der durch Leerzellen umschlossen ist
Setzt Du den Cursor in ein Feld im Bereich B4:F16 und startest das Makro

Sub InGebrauch()
Dim tbl As Range
Set tbl = ActiveCell.CurrentRegion
tbl.Select
Set tbl = Nothing
End Sub


wird der durch die Leerzellen umschlossene Bereich selektiert.
Ganz anders bei UsedRange. Dort gehört jetzt die Zelle E22 dazu! Und bis dahin wird auch markiert.
wie in diesem Code:


Sub usdRange()
ActiveSheet.UsedRange.Select
End Sub


Fazit: Man sollte den UsedRange vor dem Speichern der Datei aufräumen ;o)
Userbild

Anzeige
CurrentRegion ist nicht so ohne
Werner
Hallo Matthias,
so ungefähr hatte ich mir das auch vorgestellt. Danke für den Hinweis! Der UsedRange ist also der Range, der schon einmel benutzt war, also nicht der aktuelle benutzte Bereich. Will man umgebende Leerzellen aus dem Bereich "weg-trimmen", scheint CurrentRegion und ein Code wie der von mir angegebene vielleicht geeigneter als UsedRange zu sein.
Du schlägst vor, den UsedRange aufzuräumen. Das würde ich auch gern tun, aber wie? In einem anderen Thread (schon aus dem sichtbaren Bereich verschwunden) wurde mir vorgeschlagen, die Daten in eine andere Tabelle umzukopieren. Bei großen Datenbeständen ist diese Methode des Aufräumens aber immer mit einem Datenverlusrisiko verbunden. Werner

Anzeige
AW: CurrentRegion ist nicht so ohne
07.05.2008 10:56:00
Bertram
Hallo Werner,
wenn du alle Spalten hinter deiner zuletzt gefüllten Spalte und alle Zeilen unter der letzen gefüllten Zeile löscht, die Mappe speicherst, schließt und wieder öffnest, ist der UsedRange bei der letzten befüllten Zelle zu Ende.
Gruß
Bertram

praktisch ganz annehmbar
Werner
Hallo Bertram,
sicherlich irgendwie machbar, nur sehen die leeren und die scheinleeren Zeilen und Spalten alle gleich aus. Und in einer Excel-Datei gibt es meistens weit mehr leere und scheinleere und Zeilen und Spalten als mit dem bloßen Auge erkennbare gefüllte.
Und bei Excel 2007 hat eine Datei eine Million Zeilen. Da kann man natürlich eine Schleife programmieren, die alle Zeilen und Spalten nach der jeweils belegten leert, doch das ist etwas zeit-aufwendig.
Aus praktischer Sicht ist dein Vorschlag aber ganz gut: Ich lasse per VBA z.B. immer die 20 Zeilen nach der letzten gefüllten Zeile leeren und vertraue darauf, dass die weißen Zeilen dahinter schon vorher leer waren... Dann schließe und lade ich die Datei von neuem. Werner

Anzeige
AW: praktisch ganz annehmbar
07.05.2008 11:18:00
Bertram
Hallo Werner,
du weißt doch in deiner Datei, in welcher Zelle der letze Wert, Formel oder was auch immer steht. Ich hab zwar kein Excel 2007, aber es sollte da doch auch funktionieren, dass du einen Zeilenkopf anklickst (ganze Zeile markieren) und mit Ende+Pfeil nach unten (mit gedrückter Shift-Taste) alle darunterliegenden Zeilen markierst und die dann gesamt löschst (nicht nur den Inhalt, sondern die ganzen Zeilen). Und selbiges dann für die Spalten mit Ende+Pfeil nach rechts. Ist eigentlich ne Sache von 30 Sekunden.
Gruß
Bertram

Anzeige
Ich probiere es mal aus
Werner
Hallo Bertram,
Dank für den Hinweis. Ich habe Excel auf einem anderen Computer, werde es aber m. höchstens 1 Tag Zeitverzögerung mal ausprobieren. Unter "Ende" verstehst du sicherlich die "End"-Taste. Werner

AW: Ich probiere es mal aus
07.05.2008 23:10:00
Matthias
Hallo
Heute mittag hat leider mein Rechner mehrfach gestreikt. Immer , wenn ich auf "Vorschau" geklickt habe.
Keine Ahnung, ob es am Netzwerk oder am Browser lag. Aber hast ja weitere Hilfe bekommen ;o)
Zitat:
Unter "Ende" verstehst du sicherlich die "End"-Taste
Auf meiner Tastatur steht z.B. wirklich Ende unter der Pos1 - Taste
zum Thema Zelle wirklich leer oder nicht:
Drücke F5-Inhalte-Leerzellen
Gruß Matthias

Anzeige
funktioniert bei mir nicht
Werner
Hallo Matthias L.,
die Taste über der Taste "End" heisst bei mir "Home". Doch über die Tasten Shift + End + Pfeil nach unten nach Markierung einer ganzen Zeile bekomme ich nur eine einzige Zeile, nämlich die darauffolgende, markiert.
Werner

dann machst Du sicher was falsch
08.05.2008 08:15:00
Matthias
Hallo
Klicke auf den Zeilenkopf z.B. 4
Jetzt wird die komplette Zeile 4 markiert. Nun...
... mit gedrückter Shift-Taste einmal auf die END-Taste drücken also End wieder loslassen
Shift aber nicht loslassen, nun den CurorPfeil nach unten einmal drücken.
Funktionierts ?
Hast Du probiert F5-Inhalte-Leerzellen?
Gruß Matthias

Anzeige
AW: dann machst Du sicher was falsch
Werner
Hallo Matthias,
OK, ich hatte "End" nicht losgelassen, als ich die Pfeiltaste gedrückt habe. Daran wird es liegen. Da Excel bei mir auf einem anderen Computer ist, muss ich wieder Bedenkzeit erbitten. Werner

Jetzt funktioniert es!
Werner
Hallo Matthias L.,
stimmt, wenn ich die "End"-Taste loslasse und erst dann die Pfeil-nach-unten drücke, funktioniert es!!
Bedanke mich! Werner
Anzeige
;
Anzeige

Infobox / Tutorial

CurrentRange vs. CurrentRegion in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Definiere den Bereich: Um den aktuellen Bereich, der durch Leerzellen umschlossen ist, auszuwählen, verwende den folgenden VBA-Code:

    Private Sub InGebrauch()
       Dim tbl As Range
       Set tbl = ActiveCell.CurrentRegion
       tbl.Select
    End Sub
  2. Alternative zur UsedRange: Dieser Code markiert nur den tatsächlich benutzten Bereich, im Unterschied zum UsedRange, welcher auch Leerzellen umfasst, die einmal verwendet wurden.

  3. Anpassung des Bereichs: Um den markierten Bereich zu ändern, kannst du Offset und Resize verwenden:

    Private Sub InGebrauch()
       Dim tbl As Range
       Set tbl = ActiveCell.CurrentRegion
       tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).Select
    End Sub

Häufige Fehler und Lösungen

  • Fehler bei der Auswahl: Wenn Du versuchst, den CurrentRegion auszuwählen und es nicht funktioniert, stelle sicher, dass Du die ActiveCell korrekt gesetzt hast. Der CurrentRegion bezieht sich immer auf die aktive Zelle, die im gewünschten Bereich liegen muss.

  • UsedRange ist zu groß: Wenn der UsedRange mehr Zellen umfasst, als erwartet, liegt das daran, dass auch leere Zellen, die einmal verwendet wurden, einbezogen werden. Verwende CurrentRegion, um diese Leerzellen zu ignorieren.


Alternative Methoden

  • Manuelles Aufräumen des UsedRange: Um den UsedRange zu reduzieren, kannst Du alle leeren Zeilen und Spalten nach dem letzten gefüllten Bereich manuell löschen und die Datei speichern, um die Änderungen zu übernehmen.

  • Verwendung von F5 zur Auswahl leerer Zellen: Du kannst auch die F5-Taste verwenden und "Inhalte" auswählen, um nur die leeren Zellen im Arbeitsblatt zu finden und diese dann zu löschen.


Praktische Beispiele

  • VBA zur Auswahl des aktuellen Bereichs: Wenn Du in einer Excel-Tabelle arbeitest und nur den benutzten Bereich ohne Leerzeilen oder -spalten auswählen möchtest, kannst Du Folgendes verwenden:

    Sub AuswahlAktuellerBereich()
       Dim tbl As Range
       Set tbl = ActiveCell.CurrentRegion
       tbl.Select
    End Sub
  • Bereichsgröße anpassen: Um beispielsweise die letzten 20 Zeilen nach der letzten gefüllten Zeile zu leeren, kannst Du diesen Code verwenden:

    Sub LeereNachFolgen()
       Dim tbl As Range
       Set tbl = ActiveCell.CurrentRegion
       tbl.Offset(tbl.Rows.Count, 0).Resize(20, tbl.Columns.Count).ClearContents
    End Sub

Tipps für Profis

  • Verwendung von .CurrentRegion: Nutze .CurrentRegion in Kombination mit anderen VBA-Funktionen, um komplexe Datenanalysen durchzuführen. Dies ist besonders nützlich, wenn Du mit großen Datenmengen in Excel arbeitest.

  • Optimierung des Codes: Wenn Du oft mit CurrentRegion arbeitest, überlege, Makros zu erstellen, die diese Funktionalität in benutzerdefinierte Funktionen integrieren, um die Effizienz zu steigern.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen CurrentRegion und UsedRange?
CurrentRegion bezieht sich auf den Bereich um die aktive Zelle, der durch Leerzellen begrenzt ist, während UsedRange alle Zellen umfasst, die jemals in der Datei verwendet wurden, auch wenn sie jetzt leer sind.

2. Wie kann ich sicherstellen, dass mein Code mit verschiedenen Excel-Versionen funktioniert?
Teste Deinen VBA-Code in der Excel-Version, mit der Du arbeiten möchtest, und passe Deine Befehle gegebenenfalls an, um sicherzustellen, dass sie überall funktionieren.

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