Kurz gesagt — Die Größe ist eine Eigenschaft der ganzen Spalte oder Zeile, und die zwei Dimensionen nutzen unterschiedliche Einheiten:
ColumnWidthist in Zeichen der Normal-Schrift,RowHeightist in Punkt.ColumnWidth = 10undRowHeight = 10sind also in keinem Sinne dieselbe Größe.AutoFitist die Falle — es läuft nur auf einer ganzen Spalte oder Zeile (Columns("A:C").AutoFitoderrng.EntireColumn.AutoFit) und misst den angezeigten Text, also übergeht es verbundene Zellen still.
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Report")
ws.Columns("A:C").AutoFit ' A:C auf ihren breitesten Inhalt anpassen
ws.Columns("D").ColumnWidth = 18 ' 18 Zeichen der Normal-Schrift
ws.Rows(1).RowHeight = 28 ' 28 Punkt
Größe zu ändern wirkt wie das Einfachste in der Formatierungs-Familie, und meist ist es das auch — bis
ein AutoFit nichts tut oder eine Breite, die Sie setzen, nicht zu der Breite passt, die Sie erwartet
haben. Beides kommt aus derselben Wurzel, der Idee, auf der diese Anleitung ruht: Sie dimensionieren
die ganze Spalte oder Zeile, und Breite und Höhe sprechen in unterschiedlichen Einheiten. Halten Sie
das fest, und die schreibgeschützte .Width-Eigenschaft, die AutoFit-Regeln und die Verwirrung
„warum blendet sich das nicht aus“ lösen sich alle.
Was Sie lernen
- Das mentale Modell — Sie dimensionieren die ganze Spalte oder Zeile, in zwei unterschiedlichen Einheiten
- Die wichtigste Regel —
AutoFitbraucht eine ganze Spalte oder Zeile und misst die Anzeige ColumnWidth(Zeichen) gegenüber dem schreibgeschützten.Width(Punkt)RowHeight, Textumbruch und wann eine Zeile von selbst wächst- Der blinde Fleck von AutoFit — verbundene Zellen
- Eine Spalte richtig ausblenden, und warum Breite null eine Falle ist
Das mentale Modell: Sie dimensionieren die ganze Spalte oder Zeile, in zwei Einheiten
Breite und Höhe gehören nicht zu einer Zelle — sie gehören zu der Spalte und der Zeile, in der sie sitzt. Sie können sie von einer Zelle aus erreichen, aber der Wert gilt für die ganze Linie:
ws.Range("D5").EntireColumn.ColumnWidth = 18 ' verbreitert die GANZE Spalte D, nicht nur D5
ws.Range("D5").EntireRow.RowHeight = 28 ' erhoeht die GANZE Zeile 5
Die zweite Hälfte des Modells sind die Einheiten, und das ist der Teil, der die Leute stolpern lässt.
ColumnWidth wird in Zeichen gemessen — genauer, wie viele 0-Ziffern der Schrift im
Normal-Stil in die Spalte passen (der Standard 8.43 bedeutet etwa acht Nullen). RowHeight wird in
Punkt gemessen, derselben 1/72-Zoll-Einheit wie die Schriftgröße. Die zwei Zahlen sind nicht
vergleichbar, und es gibt keine saubere Umrechnung zwischen ihnen, weil die eine von der Schrift
abhängt und die andere nicht. Wenn ein Layout schief aussieht, ist es sehr oft ein Breitenwert, über
den man nachgedacht hat, als wäre er Punkt.
Die wichtigste Regel: AutoFit braucht eine ganze Spalte oder Zeile
AutoFit ist der schnellste Weg, auf den Inhalt zu dimensionieren, und es hat eine feste Bedingung:
es muss auf einer ganzen Spalte oder einer ganzen Zeile aufgerufen werden, nie auf einem
beliebigen Zellbereich.
ws.Columns("A:C").AutoFit ' OK - ganze Spalten
ws.Rows("1:5").AutoFit ' OK - ganze Zeilen
ws.Range("A1:C5").EntireColumn.AutoFit ' OK - zuerst zu ganzen Spalten hochgestuft
ws.Range("A1:C5").AutoFit ' FALSCH - ein Zellblock ist keine Zeile oder Spalte -> error 1004
Die Lösung ist immer dieselbe: Stufen Sie den Bereich zuerst mit .EntireColumn oder .EntireRow zu
ganzen Linien hoch. Die zweite Hälfte der Regel ist subtiler — AutoFit misst, was angezeigt wird,
nicht, was gespeichert ist. Es dimensioniert auf den breitesten gezeichneten Text, eine Spalte von
Zahlen, die als "0" gezeigt wird, passt sich also auf 5 an, nicht auf das zugrunde liegende
5.4999; und eine Spalte, deren Inhalt hinter einem schmalen
NumberFormat verborgen ist, passt sich auf das Format an, nicht auf den
Wert.
ColumnWidth gegenüber dem schreibgeschützten Width
Es gibt zwei Breiten-Eigenschaften, und nur eine davon ist setzbar — eine häufige Quelle der Verwirrung „warum kompiliert das nicht“:
ColumnWidthist setzbar, gemessen in Zeichen. Das ist die, der Sie zuweisen..Widthist schreibgeschützt, gemessen in Punkt. Es sagt Ihnen die gezeichnete Breite eines Bereichs auf dem Bildschirm, aber Sie können ihm nichts zuweisen —Columns("A").Width = 100scheitert.
ws.Columns("A").ColumnWidth = 20 ' setzen - Zeichen
Debug.Print ws.Columns("A").Width ' lesen - Punkt (eine andere Zahl)
Wenn Sie eine Spalte auf eine bestimmte Zahl von Punkt oder Pixel dimensionieren müssen, gibt es
keinen direkten Setter; Sie setzen ColumnWidth in Zeichen, lesen dann .Width zurück und justieren
in einer kurzen Schleife, bis die Punkte passen. Es ist bewusst fummelig — Excels Spaltenbreite war
immer ein Zeichenmaß, und .Width wurde nachträglich als schreibgeschützte Bequemlichkeit angebaut.
RowHeight und Textumbruch
RowHeight in Punkt ist unkompliziert, mit einem Verhalten, das zu wissen sich lohnt: Wenn eine Zelle
Textumbruch an hat, wächst Excel die Zeilenhöhe automatisch, um die umbrochenen Zeilen zu fassen —
außer Sie haben eine ausdrückliche RowHeight gesetzt, die sie fixiert und den Text abschneiden
kann:
ws.Range("B2").WrapText = True ' langen Text auf mehrere Zeilen umbrechen lassen
ws.Rows(2).EntireRow.AutoFit ' die Zeile wachsen lassen, um den umbrochenen Text zu fassen
' Setzen Sie danach NICHT Rows(2).RowHeight = 15 - das fixiert sie und schneidet den Umbruch ab
Die Faustregel: Wenn eine Zeile umbrochenen Inhalt fassen soll, schalten Sie WrapText ein und lassen
AutoFit (oder Excels automatisches Wachsen) sie dimensionieren. Danach eine feste RowHeight zu
setzen überschreibt das und ist der Weg, auf dem umbrochener Text abgeschnitten endet.
Der blinde Fleck von AutoFit: verbundene Zellen
Hier ist der, der die meiste Zeit verschwendet, und er führt direkt zurück zu
VBA Merge Cells: AutoFit ignoriert verbundene Zellen. Eine Zeile,
deren einziger hoher Inhalt eine verbundene, umbrochene Zelle ist, wächst nicht, um sie zu fassen —
AutoFit misst unverbundene Zellen und sieht nichts, was die zusätzliche Höhe braucht, also bleibt
der Text abgeschnitten. Das ist ein weiterer Grund, warum verbundene Zellen im Code Ärger machen: Sie
vereiteln genau den Befehl, nach dem Sie greifen würden, um sie lesbar zu machen. Wenn Sie einen
verbundenen, umbrochenen Block behalten müssen, setzen Sie seine RowHeight ausdrücklich (messen Sie
den Text und berechnen Sie die Höhe selbst); besser, meiden Sie die Verbindung und nehmen Sie Center
Across Selection, das AutoFit sehen kann.
Eine Spalte ausblenden: nicht Breite null
Eine verlockende Abkürzung, um eine Spalte auszublenden, ist, ihre Breite auf null zu setzen.
Widerstehen Sie — nehmen Sie die .Hidden-Eigenschaft, behandelt in
VBA Hide Columns:
ws.Columns("B").Hidden = True ' der richtige Weg - umkehrbar, offensichtlich, stellt die alte Breite wieder her
ws.Columns("B").ColumnWidth = 0 ' die Falle - "versteckt", aber die urspruengliche Breite ist verloren
Hidden = True merkt sich die echte Breite der Spalte und stellt sie wieder her, wenn Sie sie
einblenden. ColumnWidth = 0 wirft diese Breite weg — sie später einzublenden heißt raten, wie sie
einmal war — und eine Spalte ohne Breite ist leicht zu übersehen, wenn sich später jemand fragt, warum
Daten zu fehlen scheinen. Breite ist zum Dimensionieren; nehmen Sie Hidden für die Sichtbarkeit.
Wie ExcelMaster hilft
Größe ändern verbirgt mehr Kanten, als es scheint: zwei unterschiedliche Einheiten für Breite und
Höhe, ein AutoFit, das auf einem Zellbereich einen Fehler wirft und verbundene Zellen still
überspringt, ein .Width, das Sie lesen, aber nicht setzen können, und ein „Ausblenden“ über Breite
null, das die ursprüngliche Größe verliert. Jede scheitert leise — abgeschnittener Text, eine
unerwartete Zahl oder eine Spalte, die nicht zurückkommt.
ExcelMaster lässt Sie sagen,
was das Layout tun soll. Bitten Sie es, „die Spalten A bis C automatisch anzupassen und Zeile 1 etwas
Luft zu geben“, und es stuft den Bereich zu EntireColumn hoch, bevor es AutoFit aufruft, setzt
RowHeight in Punkt, schaltet WrapText ein, wo Text fließen muss, und blendet Spalten mit .Hidden
aus statt über eine Breite von null. Sie behalten die Arbeitsmappe und den Code; Sie sparen sich das
Layout, das abgeschnitten herauskam, weil AutoFit die verbundene Zelle nie sah.
Häufig gestellte Fragen
Wie setze ich Spaltenbreite und Zeilenhöhe in Excel VBA?
Weisen Sie ColumnWidth und RowHeight auf ganzen Spalten und Zeilen zu: Columns("A").ColumnWidth = 20 und Rows(1).RowHeight = 28. Denken Sie daran, dass die Einheiten sich unterscheiden —
ColumnWidth ist in Zeichen der Normal-Schrift, RowHeight ist in Punkt —, dieselbe Zahl bedeutet
also für jede unterschiedliche Größen. Von einer Zelle aus nehmen Sie
Range("A1").EntireColumn.ColumnWidth, um die ganze Spalte zu dimensionieren.
Wie führe ich AutoFit für Spalten in VBA aus?
Rufen Sie AutoFit auf einer ganzen Spalte oder Zeile auf: Columns("A:C").AutoFit oder
Range("A1:C5").EntireColumn.AutoFit. AutoFit auf einem schlichten Zellbereich wie
Range("A1:C5").AutoFit aufzurufen wirft error 1004, weil AutoFit nur auf ganzen Spalten oder Zeilen
funktioniert. Stufen Sie den Bereich zuerst mit .EntireColumn oder .EntireRow hoch.
Warum funktioniert AutoFit bei meinen verbundenen Zellen nicht?
AutoFit ignoriert verbundene Zellen — es misst nur unverbundenen Inhalt, eine Zeile, deren hoher
Inhalt in einer verbundenen, umbrochenen Zelle sitzt, wächst also nicht, um ihn zu fassen, und der
Text bleibt abgeschnitten. Setzen Sie die RowHeight für diese Zeile ausdrücklich, oder meiden Sie
die Verbindung und nehmen Sie Center Across Selection, das AutoFit messen kann.
Was ist der Unterschied zwischen ColumnWidth und Width in VBA?
ColumnWidth ist setzbar und wird in Zeichen der Normal-Schrift gemessen — das ist die Eigenschaft,
der Sie zuweisen. .Width ist schreibgeschützt und wird in Punkt gemessen; es meldet die gezeichnete
Breite, aber Sie können es nicht setzen. Um auf eine bestimmte Zahl von Punkt zu dimensionieren,
setzen Sie ColumnWidth in Zeichen, lesen dann .Width zurück und justieren, bis es passt.
Sollte ich die Spaltenbreite auf null setzen, um eine Spalte in VBA auszublenden?
Nein. Nehmen Sie Columns("B").Hidden = True, das die Spalte umkehrbar ausblendet und ihre
ursprüngliche Breite wiederherstellt, wenn Sie sie einblenden. ColumnWidth = 0 zu setzen verwirft
die ursprüngliche Breite, macht die Spalte leicht übersehbar und zwingt Sie, ihre Größe später zu
raten. Behalten Sie die Breite zum Dimensionieren und nehmen Sie Hidden für die Sichtbarkeit.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 14.08.2026.
Verwandte Anleitungen: VBA Hide Columns · VBA Merge Cells · VBA Borders · VBA Range · VBA With
