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

VBA Gliederung in Excel — Einklapp-Ebenen, AutoOutline und Teilergebnisse per Code steuern

|

VBA Gliederung in Excel — Einklapp-Ebenen, AutoOutline und Teilergebnisse per Code steuern

Kurzfassung — Die Gliederung ist das Objekt, auf dem jede Gruppe aufbaut. Sobald sie existiert, steuern Sie das ganze Blatt über sie: ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1 klappt jede Gruppe in einem Aufruf auf eine Ebene ein oder aus — weit besser als eine Schleife über .Hidden. Excel kann die Gliederung auch für Sie aufbauen: AutoOutline liest Ihre Summenformeln, und Subtotal fügt die Summen, die Gruppen und die Gliederung alle auf einmal ein.

Sub CollapseToTotals()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Report")
    ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1   ' beide Achsen in einem Aufruf auf eine Ebene setzen
End Sub

Zeilen gruppieren und Spalten gruppieren fügen beide Bänder zu diesem Objekt hinzu. Zu lernen, die Gliederung direkt zu steuern — nach Ebene einklappen, sie von Excel aus Formeln automatisch aufbauen lassen, sie mit Teilergebnissen erzeugen und sie sauber zurücksetzen —, ist es, was aus einem Haufen .Group-Aufrufen einen Bericht macht, den Sie nach Bedarf falten, entfalten und neu aufbauen können.

Was Sie lernen

  • ShowLevels — das ganze Blatt auf eine Ebene ein- oder ausklappen, beide Achsen in einem Aufruf
  • AutoOutline — Excel die Gliederung aus Ihren Formeln aufbauen lassen, und warum es ohne sie scheitert
  • Subtotal — Summen, Gruppen und Gliederung zusammen erzeugen, und die Falle beim erneuten Lauf, die sie stapelt
  • ShowDetail — einen einzelnen Knoten statt einer ganzen Ebene aus- oder einklappen
  • ClearOutline gegen RemoveSubtotal — das Falten entfernen, oder das Falten und die eingefügten Zeilen

ShowLevels: das ganze Blatt nach Ebene einklappen

Die Gliederung organisiert Gruppen in Ebenen — Ebene 1 ist am stärksten eingeklappt (nur Summen), höhere Zahlen zeigen mehr Detail. ShowLevels setzt das Blatt direkt auf eine Ebene, ohne ein einziges .Hidden anzufassen:

ws.Outline.ShowLevels RowLevels:=1                    ' Zeilen: nur die oberste Ebene zeigen (Summen)
ws.Outline.ShowLevels RowLevels:=3                    ' Zeilen: auf drei Ebenen tief ausklappen
ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1  ' beide Achsen auf einmal setzen

Zeilen und Spalten sind unabhängige Achsen, Sie können also eine übergeben und die andere in Ruhe lassen. Zwei Dinge, die sich zu wissen lohnen: ShowLevels ohne Argumente tut nichts — Sie müssen mindestens eine Achse übergeben —, und eine Ebene höher als die tiefste Gruppe klappt diese Achse einfach vollständig aus, es gibt keinen Fehler. Das ist das Werkzeug, das jede handgestrickte Schleife aus .Hidden = True/False ersetzt, und es hält die Gliederungs-Schaltflächen ehrlich.

AutoOutline: Excel bauen lassen — wenn Ihre Formeln es hergeben

AutoOutline baut eine Gliederung automatisch auf, indem es Ihre Formeln liest. Summiert Spalte N die Spalten B bis M mit =SUM(B2:M2), und addiert eine Zwischensummenzeile die Zeilen darüber, leitet Excel die Struktur ab und zeichnet die Gruppen für Sie:

ws.UsedRange.AutoOutline                     ' Gruppen aus den Summenformeln ableiten

Der Haken — und der Grund, warum Leute es als kaputt abheften — ist, dass es keine Magie ist. AutoOutline braucht durchgängige Summenformeln zum Lesen. Richten Sie es auf einen reinen Block aus Werten ohne SUM/SUBTOTAL-Struktur, scheitert es mit Laufzeitfehler 1004, „Cannot create an outline":

On Error Resume Next
ws.UsedRange.AutoOutline
If Err.Number <> 0 Then MsgBox "No summary formulas to outline"   ' erwartet bei unstrukturierten Daten
On Error GoTo 0

AutoOutline ist also die richtige Wahl bei einem formelstrukturierten Bericht und die falsche bei einem flachen Datendump. Hat die Daten noch keine Summen, ist Subtotal das Werkzeug, das sie hinzufügt.

Subtotal: Summen, Gruppen und Gliederung in einem Aufruf

Range.Subtotal ist das Feature, das die ganze Arbeit auf einmal erledigt — es fügt Zwischensummenzeilen mit SUBTOTAL(9, ...)-Formeln bei jedem Wechsel einer Schlüsselspalte ein, gruppiert die Details darunter und baut die Gliederung über das Ganze:

ws.Range("A1:D200").Subtotal _
    GroupBy:=1, _                            ' Zwischensumme bei jedem Wechsel in Spalte 1
    Function:=xlSum, _
    TotalList:=Array(4)                      ' Spalte 4 summieren

Der Bug Nummer eins bei Subtotal ist, es erneut laufen zu lassen. Ein zweiter Aufruf ersetzt den ersten nicht — er stapelt einen neuen Satz Zwischensummen innerhalb der vorhandenen, verschachtelt die Gliederung bei jedem Mal eine Ebene tiefer, genau wie ein erneuter Lauf von .Group. Entfernen Sie, bevor Sie neu aufbauen:

ws.Range("A1:D200").RemoveSubtotal           ' zuerst die eingefuegten Zeilen UND die Gliederung entfernen
ws.Range("A1:D200").Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(4)
' - oder - Replace:=True uebergeben, um einen vorhandenen Satz in einem Aufruf zu ueberschreiben

ShowDetail: einen einzelnen Knoten aus- oder einklappen

ShowLevels bewegt das ganze Blatt; ShowDetail bewegt eine Gruppe. Setzen Sie es auf einer Summenzeile oder -spalte, um genau diesen Knoten aus- oder einzuklappen:

ws.Rows(6).ShowDetail = True                 ' die Gruppe ausklappen, deren Summe Zeile 6 ist
ws.Rows(6).ShowDetail = False                ' genau diese eine Gruppe einklappen

Nutzen Sie ShowLevels, wenn Sie eine einheitliche Ansicht des ganzen Berichts wollen, und ShowDetail, wenn Sie einen Abschnitt öffnen wollen — einen Monatsblock, eine Abteilung —, während der Rest gefaltet bleibt.

ClearOutline gegen RemoveSubtotal

Es gibt zwei Resets, und der Unterschied ist, was sie mitnehmen:

  • ClearOutline entfernt nur das Falten und sonst nichts. Die Zeilen, die Zwischensummenzeilen, die Formeln — alles bleibt; nur die Gruppierungsstruktur verschwindet. ws.Cells.ClearOutline löscht sie blattweit.
  • RemoveSubtotal entfernt das Falten und die eingefügten Zwischensummenzeilen und bringt den Bereich zurück zu den Rohdaten, mit denen Sie begonnen haben.

Wählen Sie nach Absicht. Wollen Sie die Summen behalten, aber die Einklappbarkeit loswerden, ClearOutline. Wollen Sie die Daten genau so zurück, wie sie vor dem Zwischensummieren waren, RemoveSubtotal. Zu ClearOutline zu greifen, wenn Sie eigentlich eine Zwischensumme rückgängig machen wollten, lässt die eingefügten Summenzeilen ohne Gliederung, die sie organisiert, in Ihren Daten stranden.

Wie ExcelMaster hilft

Die Gliederung ist ein kleines Objekt mit vier Verben, die man leicht verwechselt — ShowLevels bewegt das ganze Blatt, ShowDetail bewegt einen Knoten, AutoOutline funktioniert nur, wenn Formeln es stützen, und Subtotal stapelt still bei einem erneuten Lauf, sofern Sie nicht zuerst entfernen —, und das falsche zu wählen scheitert ohne Fehler: ein AutoOutline, das bei flachen Daten 1004 wirft, verdoppelte Zwischensummen, eine Ebene zu tief verschachtelt, oder ein ClearOutline, das das Falten entfernt, aber die Summenzeilen stranden lässt.

ExcelMaster lässt Sie sagen, was Sie wollen — „summiere den Umsatz nach Region, klappe auf die Summen ein, und verdopple sie nicht, wenn ich es erneut laufen lasse" — und entfernt die vorherigen Zwischensummen, bevor es neu aufbaut, klappt mit ShowLevels ein, nutzt AutoOutline nur, wo Formeln es tragen, und wählt ClearOutline oder RemoveSubtotal passend dazu, ob Sie die Summen behalten wollen. Sie behalten die Arbeitsmappe und den Code.

Häufig gestellte Fragen

Wie klappe ich in VBA eine Gliederung ein oder aus?

Nutzen Sie ShowLevels: ws.Outline.ShowLevels RowLevels:=1 klappt Zeilen auf die oberste Ebene ein (nur Summen), und höhere Zahlen klappen mehr Detail aus. Fügen Sie ColumnLevels hinzu, um die Spaltenachse im selben Aufruf zu steuern. Es setzt das ganze Blatt auf einmal und hält die Gliederungs-Schaltflächen synchron, anders als .Hidden von Hand zu setzen.

Warum gibt AutoOutline den Fehler 1004, „Cannot create an outline", zurück?

Weil AutoOutline die Gliederung aufbaut, indem es Ihre Summenformeln liest, und es keine zu lesen gibt — der Bereich besteht aus flachen Werten ohne SUM/SUBTOTAL-Struktur. Fügen Sie zuerst Summenformeln oder Zwischensummen hinzu, oder nutzen Sie Range.Subtotal, um sie einzufügen. AutoOutline ist für formelstrukturierte Berichte gedacht, nicht für rohe Datendumps.

Warum verdoppeln sich meine Zwischensummen, wenn ich das Makro zweimal ausführe?

Weil Subtotal einen neuen Satz innerhalb des vorhandenen stapelt, statt ihn zu ersetzen. Rufen Sie Range.RemoveSubtotal auf, bevor Sie erneut Zwischensummen bilden, oder übergeben Sie Replace:=True beim Subtotal-Aufruf, sodass jeder Lauf einen sauberen Satz erzeugt, statt sie eine Ebene tiefer zu verschachteln.

Was ist der Unterschied zwischen ClearOutline und RemoveSubtotal?

ClearOutline entfernt nur die Gruppierungsstruktur und lässt jede Zeile — einschließlich der Zwischensummenzeilen — an Ort und Stelle. RemoveSubtotal entfernt die Gliederung und die eingefügten Zwischensummenzeilen und bringt den Bereich zurück zu den Originaldaten. Nutzen Sie ClearOutline, um nur die Einklappbarkeit loszuwerden, RemoveSubtotal, um eine Zwischensumme vollständig rückgängig zu machen.

Wie klappe ich nur eine Gruppe aus, statt der ganzen Gliederung?

Setzen Sie ShowDetail auf der Summenzeile oder -spalte dieser Gruppe: ws.Rows(6).ShowDetail = True klappt die Gruppe aus, deren Summe Zeile 6 ist, und = False klappt sie ein, während jede andere Gruppe bleibt, wie sie war. Nutzen Sie ShowLevels für eine einheitliche Ansicht des ganzen Blatts und ShowDetail für einen Abschnitt nach dem anderen.

Getestet in

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

Verwandte Anleitungen: VBA Zeilen gruppieren · VBA Spalten gruppieren · VBA Pivot Table · VBA WorksheetFunction · VBA UsedRange