TL;DR —
CurrentRegionist der zusammenhängende Block von Zellen um eine Zelle. Excel beginnt bei Ihrer Zelle und dehnt sich nach außen aus, bis es auf eine ganz leere Zeile und eine ganz leere Spalte trifft, und gibt das kleinste Rechteck zurück, das diese ununterbrochene Insel umschließt — dasselbe, wasStrg+Umschalt+*auswählt. Sie berechnen die Ränder nicht; Excel findet sie. Die Falle: eine einzelne ganz leere Zeile oder Spalte ist eine Wand, die den Block stillschweigend teilt, sodass Sie ohne Fehler die Hälfte Ihrer Daten bekommen können. Sie schließt auch die Kopfzeile ein — entfernen Sie sie mitOffsetundResize.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Data")
Dim block As Range
Set block = ws.Range("A1").CurrentRegion ' ganze Tabelle um A1, Kopfzeile inklusive
' Nur Daten - ueber die Kopfzeile hinaus, die Hoehe um eins verkleinern:
Dim body As Range
Set body = block.Offset(1, 0).Resize(block.Rows.Count - 1, block.Columns.Count)
CurrentRegion ist das Gegenmittel gegen das feste Verdrahten von "A1:D100". Statt zu berechnen, wo
die Daten enden, bitten Sie Excel, Ihnen den Block zu reichen, den es ohnehin schon sieht. Diese
Anleitung ruht auf der einen Idee, die es vertrauenswürdig macht: CurrentRegion wird durch leere
Ränder definiert, ist also nur so verlässlich, wie Ihre Daten sauber sind. Verinnerlichen Sie das,
und sowohl seine Stärke (eine Zeile greift die Tabelle) als auch sein Versagensmodus (eine leere Zeile
halbiert sie) kommen aus derselben Regel.
Was Sie lernen
- Das mentale Modell — Excel dehnt sich von Ihrer Zelle bis zu den leeren Rändern aus
- Die wichtigste Regel — eine ganz leere Zeile oder Spalte ist eine Wand
- Warum
CurrentRegiondie Kopfzeile einschließt und wie Sie sie entfernen - Wie es sich von
UsedRangeund vonEnd(xlUp)unterscheidet - Den Block einmal greifen, von jeder Zelle darin
- Wann Sie
CurrentRegionvertrauen — und wann Sie stattdessen eine echte Tabelle nehmen
Das mentale Modell: Excel dehnt sich bis zu den leeren Rändern aus
CurrentRegion beantwortet die Frage „was ist der Datenblock um diese Zelle?“. Excel beginnt bei der
Zelle, die Sie nennen, und lässt das Rechteck in jede Richtung nach außen wachsen und hört erst auf,
wenn eine ganze Zeile und eine ganze Spalte aus Leerem es abschließen:
' Ist A1:D101 eine geschlossene Tabelle, umgeben von leeren Zellen, ist dies A1:D101:
Set block = ws.Range("A1").CurrentRegion
Es ist die Code-Version davon, in eine Tabelle zu klicken und Strg+Umschalt+* (oder einmal
Strg+A) zu drücken — Excel wählt die Insel aus, auf der Sie stehen. Die entscheidende Folge ist, dass
die Grenzen entdeckt, nicht deklariert werden: Sie schreiben nie die letzte Zeile oder letzte
Spalte, der Bezug passt sich also automatisch an Daten an, die seit Ihrem letzten Blick gewachsen oder
geschrumpft sind. Das ist der ganze Reiz, und die nächste Regel ist der Preis dafür.
Die wichtigste Regel: eine leere Zeile oder Spalte ist eine Wand
Weil der Block von Leere begrenzt wird, stoppt ihn eine einzelne ganz leere Zeile oder Spalte auf
der Stelle. Eine leere Zeile mitten in Ihren Daten, und CurrentRegion gibt nur den Teil darüber
zurück — stillschweigend, ohne Fehler:
' Zeilen 1-50 gefuellt, Zeile 51 komplett leer, Zeilen 52-100 gefuellt:
Set block = ws.Range("A1").CurrentRegion ' gibt nur A1:D50 zurueck - die untere Haelfte ist verloren
Das Umgekehrte beißt ebenfalls: ein verirrter Wert eine Lücke entfernt wird mit hineingezogen und
bläht die Region über Ihre echten Daten hinaus auf. Was ihn nicht bricht, ist eine einzelne leere
Zelle innerhalb des Blocks — ein fehlender Wert in einer Zeile ist in Ordnung; nur eine komplett
leere Zeile oder Spalte wirkt als Wand. CurrentRegion ist also genau richtig für saubere,
geschlossene Tabellen und genau falsch für Blätter mit Zwischensummen-Lücken, Abstandszeilen oder
leeren Trennspalten. Wenn der Block in der falschen Größe zurückkommt, suchen Sie nach inneren
Leerstellen, bevor Sie irgendetwas anderes vermuten.
CurrentRegion schließt die Kopfzeile ein — sie entfernen
CurrentRegion gibt die Kopfzeile zusammen mit den Daten zurück, was der Hauptgrund ist, warum eine
Schleife „den Titel als Datensatz verarbeitet“. Um den Datenrumpf zu bekommen, gehen Sie über die
erste Zeile hinaus und verkürzen die Höhe um eins — genau das Offset-plus-Resize-Paar aus dem Rest
dieses Clusters:
Dim block As Range: Set block = ws.Range("A1").CurrentRegion
Dim body As Range
Set body = block.Offset(1, 0).Resize(block.Rows.Count - 1, block.Columns.Count)
' body schliesst die Kopfzeile jetzt aus; durchlaufen oder als Array lesen.
Offset(1, 0) schiebt den ganzen Bezug eine Zeile nach unten;
Resize kappt dann die Höhe um eins, damit er nicht über das untere Ende
hinausragt. Das ist der Lohn des Clusters: CurrentRegion erkennt den Block, Offset und Resize
schneiden den Teil heraus, den Sie tatsächlich wollen.
CurrentRegion gegen UsedRange gegen End(xlUp)
Drei Werkzeuge behaupten, „die Daten zu finden“, und die falsche Wahl ist eine häufige Quelle für zu große oder zu kleine Bereiche:
CurrentRegion— der zusammenhängende Block um eine Zelle. Meist das, was Sie wollen: es verfolgt die tatsächliche Dateninsel und ignoriert weit entfernte Ausreißer (solange es eine leere Lücke gibt).UsedRange— alles, was Excel glaubt, angefasst zu haben, einschließlich formatierter, aber leerer Zellen und Zellen, deren Werte Sie gelöscht haben, ohne zurückzusetzen. Es meldet regelmäßig zu viel und gibt einen Bereich zurück, der weit größer als Ihre Daten ist (siehe VBA UsedRange).End(xlUp)/ letzte Zeile — findet eine einzelne Kante, das untere Ende einer Spalte. Nehmen Sie es, wenn Sie nur die Zeilenanzahl brauchen (siehe VBA Letzte Zeile); nehmen SieCurrentRegion, wenn Sie das ganze Rechteck in einem Aufruf wollen.
Faustregel: greifen Sie zu CurrentRegion, um den Block zu holen, zu End(xlUp), um eine Dimension zu
messen, und stützen Sie sich nicht auf UsedRange für die Datenausdehnung, weil es nach Bearbeitungen
lügt.
Einmal greifen, von jeder Zelle im Block
CurrentRegion funktioniert von jeder Zelle innerhalb der Insel aus, nicht nur von der oberen
linken — weshalb ActiveCell.CurrentRegion genau die Tabelle greift, in der der Nutzer steht:
Set block = ActiveCell.CurrentRegion ' die Tabelle um die aktuelle Cursorposition
Es wird außerdem bei jedem Aufruf neu ausgewertet, speichern Sie es also einmal und verwenden Sie
die Variable wieder, statt .CurrentRegion wiederholt aufzurufen:
Dim block As Range: Set block = ws.Range("A1").CurrentRegion
Debug.Print block.Rows.Count, block.Columns.Count ' block wiederverwenden, nicht neu erkennen
Wenn sich das Blatt ändert, nachdem Sie es erfasst haben, lesen Sie es erneut — die Variable ist eine Momentaufnahme des Blocks, wie er beim Aufruf war, kein lebendiger Bezug, der von selbst wächst.
Wann Sie ihm vertrauen — und wann Sie eine Tabelle nehmen
CurrentRegion ist die richtige Voreinstellung für „wirke auf die Tabelle, die hier ist“, aber nur,
wenn Ihre Daten saubere Ränder haben: keine inneren leeren Zeilen oder Spalten, keine Ausreißer
eine Lücke entfernt. Auf Blättern, die für Menschen gebaut sind — Zwischensummen-Lücken,
Abstandszeilen zwischen Abschnitten, leere Spalten fürs Aussehen — gibt es stillschweigend das falsche
Rechteck zurück. Wenn Ihr Layout so etwas hat, übertünchen Sie es nicht mit Leerzellen-Erkennung;
geben Sie den Daten eine echte Form. Wandeln Sie den Block in eine Excel-Tabelle (ListObject)
um, deren .DataBodyRange durch Struktur definiert ist und nicht dadurch, wo die Leerstellen
zufällig liegen, und die automatisch wächst, wenn Zeilen hinzukommen. Wie bei
VBA Range sollte die Form in den Daten leben — CurrentRegion liest eine Form,
die saubere Daten bereits haben; eine Tabelle garantiert sie.
Wie ExcelMaster hilft
CurrentRegion packt mehrere leise Fehlschläge in einen einzigen bequemen Aufruf: eine leere Zeile,
die den Block halbiert, eine Kopfzeile, die in die Daten gespült wird, ein verirrter Wert, der den
Bereich aufbläht, und die Wahl zwischen ihm, UsedRange und End(xlUp), die entscheidet, ob Sie zu
viel oder zu wenig bekommen. Keiner davon löst einen Fehler aus — Sie verarbeiten einfach die falschen
Zellen.
ExcelMaster lässt Sie
stattdessen das Ergebnis beschreiben. Sagen Sie „lies die Datentabelle auf diesem Blatt, ohne die
Kopfzeile“, und es greift den Block, prüft auf innere Leerstellen, die ihn abschneiden würden,
entfernt die Kopfzeile mit Offset und Resize und reicht den Rumpf zurück — oder schlägt eine echte
Tabelle vor, wenn das Layout Lücken hat, die CurrentRegion nicht überlebt. Sie behalten die
Arbeitsmappe und den Code; Sie sparen sich den Durchlauf, in dem die Hälfte der Zeilen still
verschwand.
Häufig gestellte Fragen
Was ist CurrentRegion in Excel VBA?
CurrentRegion ist der zusammenhängende Zellblock um eine gegebene Zelle — das Rechteck, zu dem Excel
sich ausdehnt, bis es auf eine ganz leere Zeile und eine ganz leere Spalte trifft.
Range("A1").CurrentRegion gibt diesen ganzen Block zurück, Kopfzeile inklusive. Es ist das
Code-Äquivalent dazu, in einer Tabelle Strg+Umschalt+* zu drücken, und es lässt Sie auf Daten
verweisen, ohne die letzte Zeile oder Spalte zu berechnen.
Warum stoppt CurrentRegion an einer leeren Zeile?
Weil der Block von Leere begrenzt wird. Eine ganz leere Zeile oder Spalte wirkt als Wand, Excel
hört also dort auf, sich auszudehnen, und gibt nur den Teil auf Ihrer Seite der Lücke zurück —
stillschweigend, ohne Fehler. Eine einzelne leere Zelle innerhalb einer Zeile bricht es nicht; nur
eine ganze leere Zeile oder Spalte tut es. Entfernen Sie innere leere Zeilen und Spalten, wenn
CurrentRegion die ganze Tabelle erfassen soll.
Was ist der Unterschied zwischen CurrentRegion und UsedRange?
CurrentRegion ist der zusammenhängende Block um eine bestimmte Zelle und verfolgt Ihre tatsächlichen
Daten. UsedRange ist alles, was Excel für benutzt hält, einschließlich formatierter, aber leerer
Zellen und ohne Zurücksetzen geleerter Zellen — es meldet oft zu viel und gibt einen Bereich zurück,
der größer als die Daten ist. Nehmen Sie CurrentRegion (oder eine Tabelle), um den echten Datenblock
zu bekommen; behandeln Sie UsedRange als Obergrenze, nicht als genaue Ausdehnung.
Wie schließe ich die Kopfzeile aus CurrentRegion aus?
Versetzen Sie den Block um eine Zeile nach unten und verkleinern Sie seine Höhe um eins:
block.Offset(1, 0).Resize(block.Rows.Count - 1, block.Columns.Count). Offset(1, 0) bewegt den
Bezug über die Kopfzeile hinaus, und Resize kappt die letzte Zeile, damit das Ergebnis nicht unter
die Daten hinausragt. Sichern Sie den Fall ab, dass der Block nur eine Kopfzeile ist, was ein Resize
mit null Zeilen ergäbe.
Kann ich CurrentRegion von jeder Zelle in der Tabelle aus nutzen?
Ja. CurrentRegion funktioniert von jeder Zelle innerhalb des zusammenhängenden Blocks aus, nicht nur
von der oberen linken, ActiveCell.CurrentRegion gibt also die Tabelle zurück, in der der Cursor
steht. Es wird bei jedem Aufruf neu ausgewertet, speichern Sie das Ergebnis also in einer Variablen
und verwenden Sie es wieder, statt .CurrentRegion wiederholt aufzurufen, und lesen Sie es erneut,
wenn sich das Blatt ändert.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 15.08.2026.
Verwandte Anleitungen: VBA Resize · VBA Offset · VBA Cells · VBA UsedRange · VBA Letzte Zeile
