Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro: Spalten einfügen

Makro: Spalten einfügen
13.09.2016 11:16:01
Jan
Moin zusammen,
als unerfahrener VBA-Anwender bräuchte ich bitte einmal Hilfe bei folgendem Anliegen:
Ich möchte mithilfe eines Makros eine definierte Zeile nach dem Wort "Menge" durchsuchen. Jedes Mal, wenn eine Zelle mit diesem Inhalt entdeckt wurde, soll die zugehörige Spalte selektiert und links davon eine neue Spalte eingefügt werden.
Da ich ein Fan des "Learning by Doing" bin, habe ich es anhand einer vereinfachten Dummy- _ Tabelle, des Makro-Recorders und ein wenig Recherche selbst schon einmal probiert. Bisher leider ohne Erfolg. Nachfolgend einmal mein Code:

Sub Spalten_kopieren()
Dim i As Integer
Dim cell As Range
i = 1
For Each cell In Tabelle1.Range("A1:J1")
If cell.Value = "1" Then
cell.EntireColumn.Select
' Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next cell
End Sub

Es wird zumindest die letzte Spalte richtig markiert, allerdings auch nur diese. Wenn ich dann den mit dem Recorder aufgezeichneten Befehl zum Einfügen aktiviere, dann werden neue Spalten bis zu einem Laufzeitfehler eingefügt. Dementsprechend also noch nicht optimal ;)
Für ein bisschen Nachhilfe wäre ich Euch sehr dankbar!
Besten Gruß, Jan
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro: Spalten einfügen
13.09.2016 11:30:33
Matthias
Hallo Jan,
probiers mal so
Option Explicit
Sub Spalten_kopieren()
Dim i As Integer
Dim x&
i = 1
For x = 1 To 20 Step 2
If Cells(1, x).Value = "1" Then
Cells(1, x).EntireColumn.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
End If
Next x
End Sub
Gruß Matthias
Anzeige
AW: Makro: Spalten einfügen
13.09.2016 12:32:46
Jan
Hallo Matthias,
danke für Deine Antwort. Wenn ich den Code verwende, dann wird nur vor der allerersten Spalte eine Neue eingefügt. Ändere ich den "Value" von 1 auf 2, passiert überhaupt nichts...
Grüße, Jan
AW: Makro: Spalten einfügen
13.09.2016 18:59:30
Werner
Hallo Jan,
ich habe mir lange überlegt, ob ich dir überhaupt antworten soll. Warum? Weil du das gleiche Problem auch beim VBA-Forum eingestellt hast -Crossposting-.
Das ist nicht die feine englische Art. Dadurch beschäftigen sich in beiden Foren Leute mit deienm Problem, ohne voneinander zu wissen. Irgendwer arbeitet dann für die Tonne.
Trotzdem mal meine Antwort. Die Schleife muss von hinten nach vorne laufen, sonst werden sämtliche Leerspalten vor der Spalte mit dem ersten Treffer eingefügt.
Ich habe es jetzt mal so gelöst, dass im ersten Schleifendurchlauf die Leerspalten eingefügt werden und in einem zweiten Schleifendurchlauf die Formate kopiert werden.
Option Explicit
Sub Spalten_kopieren()
Dim i As Integer
Dim x&
i = 1
For x = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
If Cells(1, x).Value = "Menge" Then
Cells(1, x).EntireColumn.Insert Shift:=xlToRight
End If
Next x
For x = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
If Cells(1, x).Value = "Menge" Then
Cells(1, x).Copy
Cells(1, x - 1).PasteSpecial xlPasteFormats
End If
Next x
Application.CutCopyMode = False
End Sub
Für was die Variable i gut sein soll erschließt sich mir nicht. Die hattest du schon in deinem ersten Code drin, ohne sie zu benutzen.
Gruß Werner
Anzeige
Hast Recht, Werner ... rückwärts ...
14.09.2016 01:09:05
Matthias
Hallo,
Du hast Recht Werner. Schleife rückwärts starten.
Mach ich eigentlich selbst auch immer so.
Die Variable i hatte ich auch nur durch das Kopieren übernommen.
Aber das hast Du ja nun klargestellt.
Gruß Matthias
AW: Hast Recht, Werner ... rückwärts ...
14.09.2016 09:24:53
Jan
Hallo Werner,
bzgl. des Crosspostings: tut mir leid, darüber habe ich nicht nachgedacht. Wird nicht wieder vorkommen.
Vielen Dank aber, dass Du trotzdem geantwortet hast. Der Code läuft super und macht genau das, was ich mir vorgestellt habe. Vielen Dank dafür!
Grüße, Jan
Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
14.09.2016 10:08:16
Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
14.09.2016 10:46:11
Jan
Hallo,
hätte doch noch eine Frage: Mein ursprüngliches Anliegen war es ja, ein neue Spalte rechts neben der gefundenen Zelle einzufügen. Dies scheint nicht zu funktionieren, daher als Workaround die Idee, den Inhalt (Werte) der "alten" Spalte komplett in die neue Spalte zu übertragen und dann den Inhalt der alten Spalte zu löschen. Ist dies verständlich? Wie muss hierfür der Code angepasst werden?
Danke für Rückmeldung!
Grüße, Jan
Anzeige
AW: Rechts/Links Schwäche? ;-P
14.09.2016 13:54:48
Werner
Hallo Jan,
lies dir mal deinen Eingangsbeitrag durch.
Gruß Werner
AW: angepasst auf rechts
14.09.2016 15:23:34
Werner
Hallo Jan,
hab es mal auf rechts angepasst.
Option Explicit
Sub Spalten_kopieren()
Dim i As Integer
Dim x&
i = 1
For x = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
If Cells(1, x).Value = "Menge" Then
Cells(1, x + 1).EntireColumn.Insert Shift:=xlToRight, CopyOrigin:= _
xlFormatFromLeftOrAbove
End If
Next x
End Sub
Gruß Werner
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Spalten mit VBA einfügen und formatieren


Schritt-für-Schritt-Anleitung

Um mit Excel VBA eine neue Spalte einzufügen, kannst Du den folgenden Code verwenden. Hier wird nach dem Wort "Menge" gesucht und eine neue Spalte rechts daneben eingefügt:

Option Explicit
Sub Spalten_kopieren()
    Dim x As Integer
    For x = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
        If Cells(1, x).Value = "Menge" Then
            Cells(1, x + 1).EntireColumn.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
    Next x
End Sub

In diesem Code wird Cells(1, x + 1).EntireColumn.Insert verwendet, um eine neue Spalte rechts einzufügen. Achte darauf, dass Du die Bedingung anpasst, falls Du nach einem anderen Wert suchen möchtest.


Häufige Fehler und Lösungen

  1. Problem: Es wird nur vor der ersten Spalte eine neue Spalte eingefügt.

    • Lösung: Stelle sicher, dass die Schleife von der letzten zur ersten Spalte läuft. So verhinderst Du, dass beim Einfügen von Spalten die Indizes durcheinander geraten.
  2. Problem: Laufzeitfehler beim Einfügen der Spalten.

    • Lösung: Überprüfe, ob die Range, die Du bearbeitest, korrekt ist und keine leeren Spalten vorhanden sind, die das Einfügen behindern könnten.
  3. Problem: Die Formatierung der neuen Spalte stimmt nicht.

    • Lösung: Verwende den CopyOrigin Parameter, um die Formatierungen der angrenzenden Spalten zu übernehmen. Hierbei ist CopyOrigin:=xlFormatFromLeftOrAbove hilfreich.

Alternative Methoden

Wenn Du es vorziehst, Spalten manuell einzufügen, kannst Du auch die Excel-Oberfläche verwenden. Wähle die Spalte aus, rechtsklicke und wähle „Einfügen“. Für eine automatisierte Lösung ist jedoch VBA die bessere Wahl.

Ein weiterer Ansatz ist die Verwendung von Excel-Formeln, um die Werte zu kopieren, falls Du keine VBA-Makros verwenden möchtest.


Praktische Beispiele

  • Beispiel 1: Füge eine Spalte nach jeder zweiten Zelle ein, die den Wert "1" enthält.
Sub Spalten_kopieren()
    Dim x As Integer
    For x = 1 To 20 Step 2
        If Cells(1, x).Value = "1" Then
            Cells(1, x).EntireColumn.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
    Next x
End Sub
  • Beispiel 2: Füge eine neue Spalte links neben der gefundenen Zelle ein und kopiere die Werte.
Sub Spalten_kopieren()
    Dim x As Integer
    For x = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
        If Cells(1, x).Value = "Menge" Then
            Cells(1, x).EntireColumn.Insert Shift:=xlToRight
            Cells(1, x + 1).Value = Cells(1, x).Value
            Cells(1, x).ClearContents
        End If
    Next x
End Sub

Tipps für Profis

  • Verwende immer Option Explicit am Anfang Deines Codes, um sicherzustellen, dass alle Variablen deklariert sind.
  • Nutze die Debug.Print-Funktion, um Werte während der Laufzeit zu überprüfen und Probleme zu identifizieren.
  • Halte Deinen Code modular, indem Du Funktionen für wiederkehrende Aufgaben erstellst.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten auf einmal einfügen?
Du kannst die Schleife so anpassen, dass sie nicht nur eine Spalte, sondern mehrere Spalten gleichzeitig einfügt. Achte darauf, dass Du die Schleifenbedingungen entsprechend anpasst.

2. Warum funktioniert der Code nicht in meiner Excel-Version?
Stelle sicher, dass Du eine kompatible Version von Excel verwendest. Einige VBA-Befehle können in älteren Versionen nicht verfügbar sein.

3. Wie kann ich die eingefügten Spalten formatieren?
Du kannst die Formatierung nach dem Einfügen der Spalten mit Cells(x, y).EntireColumn.Style = "DeinStil" anpassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige