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:=1klappt 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:AutoOutlineliest Ihre Summenformeln, undSubtotalfü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 AufrufAutoOutline— Excel die Gliederung aus Ihren Formeln aufbauen lassen, und warum es ohne sie scheitertSubtotal— Summen, Gruppen und Gliederung zusammen erzeugen, und die Falle beim erneuten Lauf, die sie stapeltShowDetail— einen einzelnen Knoten statt einer ganzen Ebene aus- oder einklappenClearOutlinegegenRemoveSubtotal— 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:
ClearOutlineentfernt nur das Falten und sonst nichts. Die Zeilen, die Zwischensummenzeilen, die Formeln — alles bleibt; nur die Gruppierungsstruktur verschwindet.ws.Cells.ClearOutlinelöscht sie blattweit.RemoveSubtotalentfernt 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
