Kurzfassung — Eine Spalte zu verschieben ist eine Zeile zu verschieben auf der anderen Achse: Schneiden Sie die ganze Spalte aus und fügen Sie sie mit Insert ein, legen Sie sie nicht mit Paste ab.
Columns("C").Cut Destination:=Columns("F")legt mit Paste auf Spalte F und löscht sie aus.Columns("C").Cutund dannColumns("F").Insertöffnet eine Lücke vor F, lässt die Spalte hineinfallen und schließt das Loch bei C — nichts geht verloren. Zwei Regeln halten es sauber: Schneiden Sie dieEntireColumnaus (nie einen Teilbereich), und denken Sie daran, dass das Verschieben eine Verschiebung ist, sodass das Ausschneiden einer Spalte links von Ihrem Ziel das Ziel um eine Spalte nach links zieht.
Sub MoveColumn()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Report")
ws.Columns("C").Cut ' die ganze Spalte aufheben
ws.Columns("F").Insert Shift:=xlToRight ' Insert: vor Spalte F einfuegen, Rest schiebt nach rechts
Application.CutCopyMode = False
End Sub
Eine Spalte zu verschieben ist der horizontale Zwilling des Zeilen-Verschiebens, angetrieben vom selben Range.Cut. Alles, was Sie aus dem Zeilenfall kennen, trägt herüber — mit Insert einfügen statt mit Paste überschreiben, die Verschiebung im Blick, einen Block in einem Aufruf verschieben — Sie schneiden nur Spalten aus, und sie rücken seitwärts statt nach unten.
Was Sie lernen
- Warum Sie die EntireColumn ausschneiden, und was passiert, wenn Sie versehentlich einen Teilbereich ausschneiden
- Der Fehler Nummer eins —
Cut Destination:=legt mit Paste über die Zielspalte und verliert ihre Daten - Warum ein Verschieben nach rechts Ihre Zielspalte um eins nach links rückt (dieselbe Verschiebungs-Falle, seitwärts)
- Wie Sie mehrere Spalten in ein festes Layout neu anordnen, ohne dass sie in der falschen Reihenfolge landen
- Warum Verweise einer verschobenen Spalte folgen, statt in
#REF!zu brechen
Das Denkmodell: die ganze Spalte ausschneiden, dann mit Insert einfügen
Ein Spalten-Verschieben sind zwei Bewegungen, genau wie ein Zeilen-Verschieben. Sie heben die Spalte
auf mit Columns("C").Cut, dann legen Sie sie ab — und die Wahl zwischen Paste und Insert ist
das ganze Spiel:
- Paste (
Cut Destination:=Columns("F")) legt die Zellen von Spalte C auf Spalte F und überschreibt alles, was F enthielt. - Insert (
Columns("C").Cutund dannColumns("F").Insert) öffnet eine Lücke vor Spalte F, schiebt die ausgeschnittene Spalte hinein und schließt das Loch bei C. Die anderen Spalten rücken nach rechts, um Platz zu machen.
Um eine Spalte in ein Layout zu verschieben, fügen Sie immer mit Insert ein. Paste ist zum Überschreiben einer leeren Spalte da, nicht zum Umordnen. Das ist Zeilen verschieben um neunzig Grad gedreht: Das Raster öffnet und schließt sich horizontal, und die Spalten rechts werden neu nummeriert.
Die EntireColumn ausschneiden, nicht einen Teilbereich
Ein Spalten-Verschieben ergibt nur bei ganzen Spalten Sinn. Schneiden Sie einen Teilbereich aus und versuchen Sie, ihn als Spalte einzufügen, zerreißen Sie entweder das Raster oder bekommen nichts Brauchbares:
ws.Range("C1:C50").Cut ' FALSCH - ein Teilbereich, nicht die Spalte
ws.Range("F1:F50").Insert Shift:=xlToRight ' schiebt nur 50 Zeilen; ab Zeile 51 ist jetzt alles verrutscht
Das schiebt fünfzig Zellen seitwärts und lässt den Rest von Spalte F, wo er war — die Daten unterhalb von Zeile 50 stimmen nicht mehr mit den Zeilen überein, zu denen sie gehören. Verschieben Sie die ganze Spalte, damit jede Zeile mitwandert:
ws.Columns("C").Cut ' RICHTIG - die ganze Spalte, alle Zeilen im Gleichschritt
ws.Columns("F").Insert Shift:=xlToRight
Wenn Sie die Spalte über ihre Überschrift statt über einen Buchstaben finden, weiten Sie sie trotzdem mit
.EntireColumn auf die ganze Spalte:
Dim col As Range
Set col = ws.Rows(1).Find("Region", LookAt:=xlWhole) ' die Ueberschriftenzelle finden
col.EntireColumn.Cut ' die GANZE Spalte ausschneiden, in der sie sitzt
ws.Columns("B").Insert Shift:=xlToRight
Das spiegelt die Regel beim Spalte einfügen: Strukturelle Spaltenoperationen
wirken auf Columns / .EntireColumn, nie auf einen Teilbereich.
Die Verschiebungs-Falle, seitwärts: nach rechts verschieben rückt Ihr Ziel nach links
Dieselbe Verschiebung, die Zeilen neu nummeriert, nummeriert Spalten neu. Schneiden Sie Spalte C aus und fügen Sie sie bei Spalte F ein, schließt sich die Lücke bei C als Teil des Zugs, sodass die Spalten D bis F jeweils um eins nach links rücken — die Spalte, die F war, ist jetzt bei E, und Ihre ausgeschnittene Spalte landet relativ zum verschobenen Raster.
Verschieben Sie über die Überschriftensuche, nicht über Spaltenbuchstaben, und die Verschiebung kann Sie
nicht beißen, denn Find findet, wo die Spalte ist, nachdem sich alles gesetzt hat:
ws.Columns("C").Cut
ws.Rows(1).Find("Total", LookAt:=xlWhole).EntireColumn.Insert Shift:=xlToRight
Application.CutCopyMode = False
Bestehen Sie auf Buchstaben, lässt ein Verschieben nach links (Quelle rechts vom Ziel) den Zielbuchstaben unverändert; ein Verschieben nach rechts (Quelle links) rückt das Ziel um eine Spalte nach vorn.
Mehrere Spalten in ein festes Layout neu anordnen
Spalten eine Cut/Insert-Operation nach der anderen umzuordnen ist der Punkt, an dem Layouts
durcheinandergeraten: Jeder Zug mischt die Buchstaben der Spalten, die Sie noch nicht platziert haben. Das
verlässliche Muster ist, den wandernden Buchstaben nicht mehr hinterherzujagen und jede Spalte über ihren
Überschriftennamen gegen die gewünschte Reihenfolge zu platzieren, von links nach rechts, sodass jede
platzierte Spalte zum stabilen Anker für die nächste wird:
Dim wanted As Variant, k As Long
wanted = Array("Date", "Region", "Product", "Amount") ' die gewuenschte Reihenfolge, von links nach rechts
For k = LBound(wanted) To UBound(wanted)
Dim src As Range
Set src = ws.Rows(1).Find(wanted(k), LookAt:=xlWhole)
If Not src Is Nothing Then
src.EntireColumn.Cut
ws.Columns(k + 1).Insert Shift:=xlToRight ' in Platz k+1 setzen, dann weiter
End If
Next k
Application.CutCopyMode = False
Weil jeder Schritt eine feste Platznummer anzielt und die Quelle über den Namen findet, werfen die wandernden Buchstaben das Layout nie aus der Bahn.
Cut verschiebt Verweise; Löschen bricht sie
Wie bei Zeilen ist Cut + Insert sicher, weil Excel folgt. Eine Formel, die =Report!C2 liest, wird
umgeschrieben, sodass sie Spalte C an ihre neue Position verfolgt, und liest nach dem Verschieben weiterhin
dieselben Daten. Das ist das Gegenteil vom Löschen einer Spalte, wo eine
Formel, die in die entfernte Spalte zeigt, zu =#REF! zusammenfällt. Verschieben verlagert die Daten und
trägt ihre Verweise mit; Löschen zerstört die Daten und lässt die Verweise verwaist zurück.
Wie ExcelMaster hilft
Spalten umzuordnen verbirgt dieselben drei Fallen wie bei Zeilen, seitwärts — mit Insert einfügen oder mit Paste überschreiben (Daten erhalten oder zerstört), die Verschiebung, die die noch nicht platzierten Spalten neu nummeriert, und die ganze Spalte ausschneiden statt eines Teilbereichs —, und jede davon scheitert ohne Fehler: eine still überschriebene Zielspalte, ein um einen Buchstaben verschobenes Layout oder eine halbe Spalte, die unterhalb von Zeile 50 verrutscht zurückbleibt.
ExcelMaster lässt Sie das gewünschte Layout sagen — „bring die Spalten in die Reihenfolge Date, Region, Product, Amount" — und schneidet jede ganze Spalte aus, findet sie über die Überschrift, damit die wandernden Buchstaben nicht verwirren, und fügt sie mit Insert an ihren Platz ein, statt über das Vorhandene mit Paste zu legen. Sie behalten die Arbeitsmappe und den Code.
Häufig gestellte Fragen
Wie verschiebe ich in VBA eine Spalte, ohne Daten zu verlieren?
Schneiden Sie die ganze Spalte aus und fügen Sie sie mit Insert ein: ws.Columns("C").Cut und dann
ws.Columns("F").Insert Shift:=xlToRight. Das Insert öffnet eine Lücke und schiebt die anderen Spalten
nach rechts, sodass nichts überschrieben wird. Columns("C").Cut Destination:=Columns("F") legt mit Paste
auf Spalte F und zerstört sie — nutzen Sie es nur, wenn F leer ist.
Warum verschieben sich meine Spalten, wenn ich eine verschiebe?
Weil ein Verschieben eine Verschiebung ist. Das Ausschneiden von Spalte C entfernt sie und schließt die
Lücke, sodass die Spalten rechts davon um eins nach links rücken, bevor Ihre ausgeschnittene Spalte
eingefügt wird — das Ziel, das Sie über den Buchstaben benannt haben, ist jetzt eine Spalte früher. Fügen
Sie relativ zu einer Überschrift ein, die Sie mit Find finden, nicht zu einem fest verdrahteten
Buchstaben, und die Verschiebung spielt keine Rolle mehr.
Wie ordne ich Spalten in VBA in eine bestimmte Reihenfolge?
Finden Sie jede Spalte über ihren Überschriftennamen und fügen Sie sie in einen festen Platz ein, von links
nach rechts: Rows(1).Find("Region").EntireColumn.Cut und dann Columns(2).Insert, und so weiter. Eine
stabile Platznummer anzuzielen und die Quelle über den Namen zu finden, bedeutet, dass die wandernden
Buchstaben das Layout nie durcheinanderbringen.
Kann ich einen Teilbereich einer Spalte statt der ganzen Spalte verschieben?
Sie können, aber es bringt Ihre Daten aus der Ausrichtung: Range("C1:C50") auszuschneiden und einzufügen
schiebt nur diese fünfzig Zellen seitwärts und lässt den Rest des Rasters zurück, sodass die Zeilen
unterhalb von 50 nicht mehr fluchten. Für ein echtes Spalten-Verschieben schneiden Sie Columns("C") oder
.EntireColumn aus, damit jede Zeile mitwandert.
Sollte ich zum Verschieben einer Spalte Cut oder Copy verwenden?
Nutzen Sie Cut. Es leert die Quellspalte, sobald die Spalte landet, sodass Sie mit einer einzigen Kopie
an der neuen Position enden. Copy lässt die Quelle stehen, und Sie müssten sie selbst löschen — ein
zusätzlicher Schritt, der leicht schiefgeht. Die vollständige Mechanik von Verschieben gegenüber
Duplizieren finden Sie unter VBA Ausschneiden.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 17.09.2026.
Verwandte Anleitungen: VBA Zeilen verschieben · VBA Ausschneiden · VBA Spalte einfügen · VBA Spalte löschen · VBA Kopieren und Einfügen
