Kurzfassung —
Columns("B:D").Groupfaltet die Spalten B bis D hinter eine horizontale Gliederung quer über die Blattoberkante — dasselbe Falten wie beim Zeilen gruppieren, nur um neunzig Grad gedreht. Zwei spaltenspezifische Dinge stolpern jeden: Die Einklapp-Schaltfläche landet standardmäßig rechts von der Gruppe (Outline.SummaryColumn), und Gruppieren funktioniert nur bei ganzen Spalten — ein Teilbereich gruppiert die Spalten nicht.
Sub GroupMonthColumns()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Report")
ws.Cells.ClearOutline ' flach starten, damit ein erneuter Lauf keine Ebenen stapelt
ws.Outline.SummaryColumn = xlSummaryOnLeft ' Schaltflaeche haengt sich an die Summenspalte LINKS
ws.Columns("C:N").Group ' die 12 Monatsspalten hinter die Summe in B falten
ws.Outline.ShowLevels ColumnLevels:=1 ' nur Spalten einklappen, Zeilengruppen bleiben unberuehrt
End Sub
Spalten gruppieren ist Zeilen gruppieren auf der anderen Achse: dasselbe Verb .Group, dasselbe
Gliederungsobjekt darunter, dieselbe Regel, nach Ebene einzuklappen. Was sich bei
Spalten ändert, ist die Seite, auf die die Schaltfläche standardmäßig fällt, und die Tatsache, dass „eine
Spalte" die ganze Spalte meint — das genaue Echo der Regel „fügen Sie die
EntireColumn ein, nie einen Teilbereich" aus den strukturellen
Bearbeitungen.
Was Sie lernen
- Das Denkmodell — ein horizontales Falten, die Zeilen-Gliederung um neunzig Grad gedreht
- Die Summenspalten-Falle — warum die Schaltfläche rechts landet, und wie Sie sie nach links verschieben
- Warum Gruppieren ganze Spalten braucht, und was ein Teilbereich stattdessen tut
- Wie
ShowLevelsSpalten auf ihrer eigenen Achse einklappt, unabhängig von Zeilengruppen - Warum eine Spalte zu gruppieren nicht dasselbe ist wie sie zu verstecken oder ihre Breite zu setzen
Das Denkmodell: ein horizontales Falten
Columns("B:D").Group baut eine Gliederungsleiste quer über die Oberkante des Blatts, mit einer
−-Schaltfläche, die die Spalten B bis D aus dem Blickfeld faltet, und einem +, das sie zurückbringt.
Es ist die Zeilen-Gliederung um neunzig Grad gedreht — statt Blöcke von Zeilen in einen Rand links zu
falten, falten Sie Blöcke von Spalten in eine Leiste oben.
Alles, was für das Gruppieren von Zeilen gilt, gilt auch hier: Die Spalten sind
gefaltet, nicht versteckt im Sinne von .Hidden und nicht gelöscht; die Gliederung organisiert sie in
Ebenen bis zu acht tief; und Sie klappen nach Ebene ein, statt .Hidden anzufassen. Dieser Artikel
behandelt die beiden Dinge, die speziell anders sind, wenn die Achse die Spalten sind.
Die Summenspalten-Falle: die Schaltfläche landet rechts
Gruppieren Sie die Spalten B bis D, und die Einklapp-Schaltfläche erscheint nicht auf der Gruppe, sondern
rechts davon, über Spalte E. Das liegt daran, dass Worksheet.Outline.SummaryColumn standardmäßig
auf xlSummaryOnRight steht: Excel nimmt an, dass Ihre Summen- oder Zusammenfassungsspalte rechts von
den Details sitzt, die sie zusammenfasst.
Das ist das Spiegelbild des Summenzeilen-Standards, und es ist aus demselben Grund falsch bei einem gängigen Layout — einer Summenspalte, die links platziert ist, vor einer Reihe von Monatsdetails:
ws.Outline.SummaryColumn = xlSummaryOnLeft ' Schaltflaeche haengt sich an die Summenspalte LINKS
ws.Columns("C:N").Group ' Summe ist Spalte B, Detail sind die Spalten C-N
Belassen Sie es beim Standard, treibt das + rechts von Ihrem letzten Monat weg, abgelöst von der Summe
in Spalte B, die der Leser tatsächlich ansieht. SummaryColumn ist eine Einstellung auf Blattebene —
setzen Sie sie einmal, bevor Sie die Gliederung aufbauen, passend dazu, auf welcher Seite Ihre Summen
liegen. Beachten Sie, dass sich die Schreibweise der Konstante von der Zeilen-Version unterscheidet:
Spalten nutzen xlSummaryOnLeft / xlSummaryOnRight, Zeilen nutzen xlSummaryAbove / xlSummaryBelow.
Ganze Spalten gruppieren, nie einen Teilbereich
Spalten gruppieren bedeutet nur etwas, wenn Sie ganze Spalten benennen:
ws.Columns("B:D").Group ' faltet drei ganze Spalten
ws.Range("B:D").EntireColumn.Group ' identisch, ausgeschrieben
Geben Sie .Group einen Teilbereich, faltet es die Spalten nicht:
ws.Range("B2:D2").Group ' gruppiert die Spalten B-D NICHT
Ein Bereich, der keine ganzen Spalten sind, kann keine Spaltengruppe werden — je nach Blatt bekommen Sie
einen Laufzeitfehler oder eine Gruppierung, die Sie nicht meinten. Das ist dieselbe Regel, die für
Einfügen und Löschen gilt: Um auf eine Spalte zu wirken, benennen Sie eine Spalte (Columns(...)
oder .EntireColumn) — dieselbe Disziplin wie beim
Einfügen der EntireColumn. Haben Sie eine Überschriftenzelle und brauchen
deren Spalte, weiten Sie zuerst auf die ganze Spalte:
ws.Rows(1).Find("Q1", LookAt:=xlWhole).EntireColumn.Group ' die Ueberschrift finden, ihre ganze Spalte gruppieren
ShowLevels klappt Spalten auf ihrer eigenen Achse ein
Die Gliederung verfolgt Zeilen und Spalten als zwei unabhängige Achsen, weshalb ShowLevels zwei
Argumente annimmt:
ws.Outline.ShowLevels ColumnLevels:=1 ' die SPALTEN-Gliederung auf Ebene 1 einklappen
ws.Outline.ShowLevels RowLevels:=2, ColumnLevels:=1 ' beide Achsen in einem Aufruf setzen
Nur ColumnLevels zu übergeben faltet die Spalten, während jede Zeilengruppierung genau dort bleibt, wo
sie war — die beiden Gliederungen stören sich nicht gegenseitig. Das ist der Lohn dafür, das
Gliederungsobjekt zu steuern, statt Dinge von Hand zu verstecken: Sie sprechen
eine Achse an, ohne die andere zu stören, und die Schaltflächen bleiben wahrheitsgemäß.
Gruppieren ist nicht Verstecken, und nicht Breite
Weil eine eingeklappte Spaltengruppe aussieht wie eine versteckte Spalte, ist es leicht, drei verschiedene Werkzeuge zu verwechseln. Sie sind nicht austauschbar:
- Group baut eine umkehrbare, ebenenbewusste Gliederung mit Schaltflächen, die der Leser anklicken kann — richtig, wenn die Spalten Details sind, die Sie weg- und wieder aufklappen.
- Hide (
.Hidden = True) ist ein flacher Ein/Aus-Zustand ohne Gliederung und ohne Schaltfläche — richtig, wenn Sie eine Spalte einfach aus der Ansicht haben wollen. - Width (
.ColumnWidth = 0) ist eine Größe, kein Sichtbarkeitszustand — wieder eine andere Absicht.
Greifen Sie zu Gruppieren, wenn Sie einen faltbaren Abschnitt wollen, den der Leser steuert; greifen Sie zu Verstecken, wenn Sie eine Spalte schlicht aus dem Weg haben wollen. Eines statt des anderen zu nutzen ist der Fehler — eine gruppierte Spalte, die der Leser wieder öffnen kann, obwohl Sie sie fest versteckt haben wollten, oder eine versteckte Spalte ohne die Gliederungsstruktur, die Sie eigentlich wollten.
Wie ExcelMaster hilft
Spalten 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 ganze Spalten oder einen Teilbereich übergeben
haben, der still nichts tut, und ob Sie überhaupt eine faltbare Gruppe meinten statt eines einfachen
Versteckens —, und jede davon falsch zu treffen scheitert ohne Fehler: eine Schaltfläche, die rechts von
einer linksstehenden Summe schwebt, ein .Group-Aufruf, der nichts gruppiert hat, oder ein Leser, der
eine Spalte wieder öffnet, die Sie versteckt haben wollten.
ExcelMaster lässt Sie sagen,
was Sie wollen — „falte die zwölf Monatsspalten hinter die Summenspalte, Schaltfläche links, eingeklappt"
— und setzt SummaryColumn passend, gruppiert die ganzen Spalten (nie einen Teilbereich), klappt mit
ColumnLevels ein, sodass Zeilengruppen unberührt bleiben, und greift stattdessen zum Verstecken, wenn
das eigentlich gemeint war. Sie behalten die Arbeitsmappe und den Code.
Häufig gestellte Fragen
Wie gruppiere ich in VBA Spalten?
Rufen Sie .Group auf ganzen Spalten auf: Columns("B:D").Group faltet die Spalten B bis D hinter eine
horizontale Gliederungsleiste mit einer Einklapp-Schaltfläche entlang der Oberkante. Qualifizieren Sie das
Blatt — ThisWorkbook.Worksheets("Report").Columns("B:D").Group —, damit es nicht vom aktiven Blatt
abhängt. Die Spalten werden gefaltet, nicht versteckt oder gelöscht.
Warum ist die Einklapp-Schaltfläche rechts von meinen gruppierten Spalten?
Weil Worksheet.Outline.SummaryColumn standardmäßig auf xlSummaryOnRight steht, was annimmt, dass Ihre
Summenspalte rechts von den Details liegt. Liegt Ihre Summenspalte links, setzen Sie
ws.Outline.SummaryColumn = xlSummaryOnLeft, bevor Sie gruppieren, damit sich die Schaltfläche daran
heftet.
Warum tut Gruppieren nichts, wenn ich einen Bereich wie B2:D2 übergebe?
Weil ein Teilbereich keine ganzen Spalten sind, und nur ganze Spalten eine Spaltengruppe bilden können.
Nutzen Sie Columns("B:D").Group oder Range("B:D").EntireColumn.Group. Um die Spalte zu gruppieren, in
der eine Überschrift sitzt, finden Sie sie und weiten Sie auf die ganze Spalte:
Rows(1).Find("Q1", LookAt:=xlWhole).EntireColumn.Group.
Wie klappe ich gruppierte Spalten ein, ohne gruppierte Zeilen zu beeinflussen?
Übergeben Sie nur die Spaltenachse an ShowLevels: ws.Outline.ShowLevels ColumnLevels:=1 klappt die
Spalten-Gliederung ein und lässt jede Zeilengruppierung unberührt. Die Gliederung verfolgt Zeilen und
Spalten als unabhängige Achsen, sodass das Setzen der einen die andere nicht stört.
Ist eine Spalte zu gruppieren dasselbe wie sie zu verstecken?
Nein. Gruppieren baut eine umkehrbare Gliederung mit einer Schaltfläche, die der Leser anklicken kann, um
die Spalten zu falten und zu entfalten; Verstecken (.Hidden = True) ist ein flacher Ein/Aus-Zustand ohne
Gliederung oder Schaltfläche. Nutzen Sie Gruppieren für einen faltbaren Abschnitt, den der Leser steuert,
und Verstecken, wenn Sie die Spalte einfach aus der Ansicht haben wollen.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 16.09.2026.
Verwandte Anleitungen: VBA Zeilen gruppieren · VBA Gliederung · VBA Spalten ausblenden · VBA Spaltenbreite · VBA Spalte einfügen
