🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Zeilen gruppieren in Excel — Klappbare Gliederungen, Ebenen und die Summenzeilen-Falle

|

VBA Zeilen gruppieren in Excel — Klappbare Gliederungen, Ebenen und die Summenzeilen-Falle

KurzfassungRows("2:5").Group versteckt diese Zeilen nicht, und es löscht sie nicht. Es fügt einer klappbaren Gliederung ein Band hinzu — die Zeilen sind weiterhin da, nur einklappbar hinter einer +/-Schaltfläche am Rand. Gruppieren ist ein Falten, kein Verstecken. Zwei Dinge stolpern jeden: Die Einklapp-Schaltfläche landet standardmäßig auf der Zeile unterhalb der Gruppe (Outline.SummaryRow), und Sie sollten nach Ebene mit ShowLevels einklappen, niemals indem Sie .Hidden selbst setzen.

Sub GroupDetailRows()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Report")
    ws.Cells.ClearOutline                 ' alte Gliederung zuerst entfernen, damit ein erneuter Lauf flach bleibt
    ws.Outline.SummaryRow = xlSummaryAbove ' Schaltflaeche auf die Summenzeile OBERHALB der Details setzen
    ws.Rows("3:7").Group                   ' Zeilen 3-7 unter die Summe in Zeile 2 falten
    ws.Outline.ShowLevels RowLevels:=1     ' im Code auf die oberste Ebene einklappen, nicht ueber .Hidden
End Sub

Zeilen gruppieren, Spalten gruppieren und das Gliederungsobjekt selbst sind ein System in drei Gewändern: .Group fügt ein Band hinzu, die Gliederung klappt nach Ebene ein und aus, und eine einzige Blatteinstellung entscheidet, auf welcher Seite die Einklapp-Schaltfläche sitzt. Bringen Sie das Zeilen-Gruppieren richtig hin — das Falten, die Ebene, die Summenseite —, und Spalten gruppieren ist dieselbe Idee um neunzig Grad gedreht, angetrieben vom selben Gliederungsobjekt.

Was Sie lernen

  • Das Denkmodell — Gruppieren ist ein Falten, kein Verstecken und kein Löschen
  • Die Summenzeilen-Falle — warum die +/-Schaltfläche unterhalb Ihrer Gruppe landet, und wie Sie sie verschieben
  • Warum Sie nach Ebene mit ShowLevels einklappen, niemals indem Sie .Hidden selbst setzen
  • Wie verschachteltes .Group die Gliederungsebene vertieft, und warum ein erneuter Lauf Ihres Makros übergruppiert
  • Ungroup gegen ClearOutline — ein Band entfernen, oder die ganze Gliederung auslöschen

Das Denkmodell: Gruppieren ist ein Falten, kein Verstecken

Rows("2:5").Group heißt nicht „verstecke die Zeilen 2 bis 5". Es heißt „mache die Zeilen 2 bis 5 faltbar". Excel zeichnet eine Gliederungsleiste im linken Rand mit einer -Schaltfläche; klicken Sie sie an, und die Zeilen klappen aus dem Blickfeld; klicken Sie auf das +, und sie kommen zurück. Die Zeilen waren nie versteckt im Sinne von .Hidden = True — sie werden von einer Gliederung verwaltet, die weiß, wie man sie bei Bedarf ein- und ausklappt.

Dieser Unterschied ist der ganze Artikel. Ein Verstecken ist ein Einweg-Zustand, den Sie sich merken müssen, um ihn rückgängig zu machen. Ein Falten ist eine umkehrbare Ansicht, die Excel für Sie verfolgt, in Ebenen organisiert, mit Schaltflächen, die der Leser anklicken kann. Alles, was Leute am Gruppieren überrascht — wo die Schaltfläche erscheint, warum .Hidden und die Gliederung nicht übereinstimmen, warum ein erneuter Lauf des Makros die Daten drei Ebenen tief vergräbt — folgt daraus, dass Gruppieren ein Falten mit Struktur ist, kein plumpes Verstecken.

Die Summenzeilen-Falle: auf welcher Seite die Schaltfläche landet

Gruppieren Sie die Zeilen 2 bis 5, und die Einklapp-Schaltfläche erscheint nicht auf der Gruppe — sie erscheint auf Zeile 6, der Zeile direkt darunter. Das liegt daran, dass Worksheet.Outline.SummaryRow standardmäßig auf xlSummaryBelow steht: Excel nimmt an, dass Ihre Zwischensumme oder Summe unterhalb der Details sitzt, die sie zusammenfasst, und parkt die Schaltfläche dort.

Dieser Standard ist richtig für einen klassischen Block „Detail dann Summe". Er ist falsch — und das ist die häufigste Gruppierungs-Beschwerde —, wenn Ihre Summe oberhalb der Details sitzt, wie es bei den meisten Dashboards der Fall ist:

ws.Outline.SummaryRow = xlSummaryAbove    ' Schaltflaeche haengt sich an die Summe OBERHALB der Gruppe
ws.Rows("3:7").Group                       ' Summe ist Zeile 2, Detail sind die Zeilen 3-7

Stellen Sie es andersherum ein, löst sich die Schaltfläche von der Zahl, die jeder tatsächlich liest: Ihre Summe steht in Zeile 2, aber das + sitzt unten auf Zeile 8 und schwebt unter der letzten Detailzeile. SummaryRow ist eine Einstellung auf Blattebene — legen Sie sie einmal fest, bevor Sie die Gliederung aufbauen, passend dazu, wo Ihre Summen liegen. Sie im Nachhinein zu setzen, ordnet die Schaltflächen für das Blatt neu an, aber es als bewussten ersten Schritt zu machen ist sauberer, als überrascht zu werden.

Nach Ebene einklappen, nicht über .Hidden

Der verlockende Weg, eine Gruppe im Code einzuklappen, ist, die Zeilen zu verstecken:

ws.Rows("3:7").Hidden = True               ' FALSCH - ein manuelles Verstecken, das die Gliederung nicht verfolgt

Tun Sie das nicht. Das setzt ein Verstecken, von dem die Gliederung nichts weiß, sodass die +/-Schaltflächen und der tatsächliche Zeilenzustand auseinanderdriften — die Schaltfläche sagt „ausgeklappt", während die Zeilen versteckt sind, oder umgekehrt. Klappen Sie stattdessen über die Gliederung ein, und Excel hält alles konsistent:

ws.Outline.ShowLevels RowLevels:=1         ' nur die oberste Ebene zeigen - alles darunter klappt weg
ws.Outline.ShowLevels RowLevels:=2         ' zwei Ebenen tief zeigen - eine Schicht zurueck ausklappen

ShowLevels steuert das ganze Blatt auf eine Gliederungsebene in einem Aufruf, und die Schaltflächen bleiben wahrheitsgemäß. Brauchen Sie statt einer ganzen Ebene einen einzelnen Knoten zum Aus- oder Einklappen, nutzen Sie ShowDetail auf dessen Summenzeile — behandelt mit dem Rest des Gliederungsobjekts.

Ebenen: Gruppen verschachteln, und warum ein erneuter Lauf übergruppiert

Gruppieren Sie einen Bereich, dann einen Teilbereich darin, und Sie haben nicht zwei flache Gruppen gemacht — Sie haben eine verschachtelte Gliederung gemacht, eine Ebene tiefer:

ws.Rows("2:20").Group                       ' Ebene 1 - der ganze Abschnitt
ws.Rows("5:9").Group                        ' Ebene 2 - ein Teilblock darin

Eine Gliederung reicht bis zu 8 Ebenen tief, was für eine echte Hierarchie mächtig und eine Falle ist, wenn es aus Versehen passiert. Der Unfall ist ein erneuter Lauf Ihres Makros: .Group auf bereits gruppierten Zeilen fügt ein weiteres Band obendrauf hinzu, der zweite Lauf lässt Sie also bei Ebene 2 landen, der dritte bei Ebene 3, und die Daten werden bei jedem Mal tiefer vergraben. Gruppieren ist nicht idempotent.

Die Lösung ist dieselbe Disziplin wie bei jeder Routine nach dem Motto „erstelle es, wenn es nicht da ist" — zurücksetzen, bevor Sie neu aufbauen:

ws.Cells.ClearOutline                       ' die gesamte Gliederung entfernen, dann frisch aufbauen
ws.Rows("3:7").Group

Erst leeren, dann gruppieren, und das Makro erzeugt dieselbe Gliederung, egal ob es einmal oder zehnmal läuft.

Ungroup gegen ClearOutline

Es gibt zwei Wege, das Gruppieren rückgängig zu machen, und sie sind nicht gleich groß:

ws.Rows("3:7").Ungroup                       ' entfernt EIN Band / eine Ebene von diesem Bereich
ws.Cells.ClearOutline                        ' entfernt die GESAMTE Gliederung auf dem Blatt, in einem Aufruf

Ungroup ist das präzise Werkzeug — eine Ebene von einem Bereich abschälen. ClearOutline ist der Vorschlaghammer — die ganze Gliederung auslöschen und sauber neu anfangen. Der Fehler ist, Ungroup in einer Schleife laufen zu lassen, um alles zu leeren: Das ist langsamer, es ist fummelig, die Bereiche richtig hinzubekommen, und es ist genau das, was ClearOutline in einer einzigen Anweisung tut. Keines von beiden löscht auch nur eine einzige Datenzeile — sie entfernen das Falten, nicht die Zeilen.

Wie ExcelMaster hilft

Zeilen zu gruppieren sieht nach einer Zeile aus und verbirgt drei Entscheidungen — auf welcher Seite die Einklapp-Schaltfläche für Ihr Layout gehört, ob Sie nach Ebene einklappen oder in .Hidden abrutschen, und ob ein erneuter Lauf Ihre Daten still um eine Ebene tiefer vergräbt —, und jede davon falsch zu treffen scheitert ohne Fehler: eine Schaltfläche, die von ihrer Summe wegdriftet, Gliederungs-Schaltflächen, die über den Zeilenzustand lügen, oder ein Bericht, der drei Ebenen zu tief gefaltet ist.

ExcelMaster lässt Sie sagen, was Sie wollen — „gruppiere die Detailzeilen unter jeder Summe, eingeklappt auf die oberste Ebene, Schaltfläche auf der Summenzeile" — und setzt SummaryRow passend zu Ihrem Layout, leert die alte Gliederung, damit ein erneuter Lauf flach bleibt, gruppiert die richtigen Zeilen und klappt mit ShowLevels statt .Hidden ein. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Wie gruppiere ich in VBA Zeilen?

Rufen Sie .Group auf ganzen Zeilen auf: Rows("3:7").Group faltet die Zeilen 3 bis 7 zu einem Gliederungsband mit einer Einklapp-Schaltfläche im linken Rand. Qualifizieren Sie das Blatt — ThisWorkbook.Worksheets("Report").Rows("3:7").Group —, damit es nicht davon abhängt, welches Blatt gerade aktiv ist. Die Zeilen werden nicht versteckt oder gelöscht; sie werden faltbar.

Warum ist die Einklapp-Schaltfläche meiner Gruppe unterhalb statt oberhalb meiner Zeilen?

Weil Worksheet.Outline.SummaryRow standardmäßig auf xlSummaryBelow steht, was annimmt, dass Ihre Summe unter den Details sitzt. Steht Ihre Summe oberhalb der Detailzeilen, setzen Sie ws.Outline.SummaryRow = xlSummaryAbove, bevor Sie gruppieren, damit sich die +/-Schaltfläche an die Summenzeile heftet, die jeder liest.

Wie klappe ich gruppierte Zeilen in VBA ein oder aus?

Nutzen Sie die Gliederungsebenen: ws.Outline.ShowLevels RowLevels:=1 klappt auf die oberste Ebene ein, und höhere Zahlen klappen mehr Schichten aus. Setzen Sie .Hidden = True nicht selbst auf den Zeilen — das ist ein manuelles Verstecken, das die Gliederung nicht verfolgt, sodass die Schaltflächen und der tatsächliche Zeilenzustand auseinanderdriften.

Warum fügt mein Makro bei jedem Lauf weitere Gruppen hinzu?

Weil .Group auf bereits gruppierten Zeilen eine weitere Ebene obendrauf hinzufügt — Gruppieren ist nicht idempotent. Rufen Sie ws.Cells.ClearOutline am Anfang auf, um eine vorhandene Gliederung zu löschen, und gruppieren Sie dann frisch, sodass das Ergebnis gleich ist, egal ob das Makro einmal oder zehnmal läuft.

Was ist der Unterschied zwischen Ungroup und ClearOutline?

Ungroup entfernt ein Band oder eine Ebene von einem bestimmten Bereich; ClearOutline entfernt die gesamte Gliederung auf dem Blatt in einem einzigen Aufruf. Um eine Gruppe rückgängig zu machen, nutzen Sie Rows("3:7").Ungroup; um alles zu leeren, nutzen Sie ws.Cells.ClearOutline statt Ungroup in einer Schleife laufen zu lassen. Keines von beiden löscht Daten — sie entfernen das Falten.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 16.09.2026.

Verwandte Anleitungen: VBA Spalten gruppieren · VBA Gliederung · VBA Spalten ausblenden · VBA Zeilen einfügen · VBA Zeilen löschen