Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mehrere Spalten löschen

Mehrere Spalten löschen
29.08.2017 08:49:48
Armin
Hallo,
ich habe folgende Frage.
Ich habe eine Tabelle mit mehreren hundert Spalten. Nun möchte ich bestimmte Spalten löschen, die in Zeile 1 ein bestimmtes Kennzeichen haben, z. B. das Kennzeichen "x".
Dies mache ich derzeit mir folgendem Code:
For i = 1000 To 1 Step -1
If ActiveSheet.Cells(1, i).Value = "x" Then
ActiveSheet.Columns(i).Delete Shift:=xlToLeft
End If
Next i

Dies funktioniert soweit gut, allerdings dauert dies relativ lange.
Gibt es nicht eine schnellere Methode zum Löschen der Spalten. Könnte man die betroffenen Spalten evtl. zu einem Array zusammenfassen und dann alle Spalten auf einmal löschen?
Ich freue mich auf eure Tipps.
LG Armin
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Spalten löschen
29.08.2017 08:54:39
ChrisL
Hi Armin
Probiere mal so...
Sub t()
Dim i As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
If ActiveSheet.Cells(1, i).Value = "x" Then Columns(i).Delete Shift:=xlToLeft
Next i
Application.Calculation = xlCalculationAutomatic
End Sub

cu
Chris
Anzeige
AW: Mehrere Spalten löschen
29.08.2017 08:59:46
Armin
Hallo Chris,
danke für den Tipp.
Die Berechnung und den Bildschirmanzeige habe ich bereits deaktiviert.
Dein Beispielcode hat die gleiche lange Laufzeit wie mein Code.
Gibt es evtl. einen Ansatz, dass alle Spalten selektiert werden und der Löschbefehl dann nur 1x für alle Spalten ausgeführt wird.
Lieben Dank
Armin
Anzeige
AW: Mehrere Spalten löschen
29.08.2017 09:08:35
ChrisL
Hi Armin
Ja im Prinzip schon, aber ich kann mir eigentlich nicht vorstellen, warum ein paar hundert Spalten so lange dauern sollen. Ist da evtl. noch etwas anderes los, wovon wir nichts wissen? Vielleicht ein Change-Ereignis?
cu
Chris
AW: Mehrere Spalten löschen
29.08.2017 09:32:37
ChrisL
Hi Armin
Hier mal eine Variante:
Sub t()
Rows(1).Insert
With Range(Range("A1"), Cells(1, Cells(2, Columns.Count).End(xlToLeft).Column))
.Formula = "=IF(A2=""x"",""x"","""")"
.Value = .Value
.SpecialCells(xlCellTypeConstants).EntireColumn.Delete
End With
Rows(1).Delete
End Sub
cu
Chris
Anzeige
AW: Mehrere Spalten löschen
29.08.2017 10:22:48
Daniel
Hi
beim Löschen von Zeilen oder Spalten ist es immer sinnvoll, diese vor dem Löschen so zu sortieren, dass die zu löschenden Zellbereiche einen lückenlos zusammenhängenden Zellblock bilden.
Dann geht das Löschen am schnellsten.
hier mal die Idee von Chris diesbezüglich erweitert.

Sub SpaltenLöschen()
With ActiveSheet.UsedRange
With .Rows(.Rows.Count + 1)
.FormulaR1C1 = "=IF(R1C=""x"",1,"""")"
.Formula = .Value
If WorksheetFunction.Sum(.Cells) = 0 Then Exit Sub
End With
End With
With ActiveSheet.UsedRange
.Sort key1:=.Cells(.Rows.Count, 1), Header:=xlNo, Orientation:=2
.Cells.SpecialCells(xlCellTypeConstants, 1).EntireColumn.Delete
.Rows(1).Sort key1:=.Cells(1, 1), Orientation:=1
End With
End Sub
Gruß Daniel
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Spalten in Excel effizient löschen


Schritt-für-Schritt-Anleitung

Um in Excel VBA mehrere Spalten zu löschen, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf dein Projekt und wähle „Einfügen“ > „Modul“.
  3. Füge den VBA-Code ein: Kopiere einen der folgenden Codes und füge ihn in das neue Modul ein.

Ein einfaches Beispiel könnte so aussehen:

Sub SpaltenLoeschen()
    Dim i As Integer
    Application.ScreenUpdating = False
    For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
        If ActiveSheet.Cells(1, i).Value = "x" Then
            Columns(i).Delete Shift:=xlToLeft
        End If
    Next i
    Application.ScreenUpdating = True
End Sub
  1. Führe das Makro aus: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle das Makro aus und klicke auf „Ausführen“.

Häufige Fehler und Lösungen

  • Fehler: Makro läuft sehr lange
    Lösung: Stelle sicher, dass Application.ScreenUpdating und Application.Calculation deaktiviert sind, um die Ausführung zu beschleunigen.

  • Fehler: Spalten werden nicht gelöscht
    Lösung: Überprüfe, ob die Zellwerte in Zeile 1 wirklich mit "x" übereinstimmen. Eine falsche Schreibweise oder zusätzliche Leerzeichen können zu Problemen führen.


Alternative Methoden

Eine alternative Methode zum Löschen mehrerer Spalten in Excel ist die Verwendung von Arrays. Hier ein Beispiel:

Sub SpaltenLoeschenMitArray()
    Dim SpaltenArray As Range
    Dim i As Integer

    For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
        If ActiveSheet.Cells(1, i).Value = "x" Then
            If SpaltenArray Is Nothing Then
                Set SpaltenArray = Columns(i)
            Else
                Set SpaltenArray = Union(SpaltenArray, Columns(i))
            End If
        End If
    Next i

    If Not SpaltenArray Is Nothing Then SpaltenArray.Delete Shift:=xlToLeft
End Sub

Mit dieser Methode werden alle zu löschenden Spalten zuerst in einem Array gesammelt und dann auf einmal gelöscht.


Praktische Beispiele

Wenn du bestimmte Spalten löschen möchtest, die ein bestimmtes Kennzeichen haben, kannst du den folgenden VBA-Code verwenden:

Sub BestimmteSpaltenLoeschen()
    Dim SpaltenBereich As Range
    Dim i As Integer

    For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
        If ActiveSheet.Cells(1, i).Value = "x" Then
            If SpaltenBereich Is Nothing Then
                Set SpaltenBereich = Columns(i)
            Else
                Set SpaltenBereich = Union(SpaltenBereich, Columns(i))
            End If
        End If
    Next i

    If Not SpaltenBereich Is Nothing Then SpaltenBereich.Delete Shift:=xlToLeft
End Sub

Dieser Ansatz ist besonders nützlich, wenn du mehrere Spalten auf einmal löschen möchtest.


Tipps für Profis

  • Sortiere die Spalten: Wenn du die zu löschenden Spalten vorab sortierst, kannst du die Löschoperation effizienter gestalten.
  • Nutze Application.Calculation: Deaktiviere die automatische Berechnung während des Löschvorgangs, um die Geschwindigkeit zu erhöhen.
  • Verwende Union: Bei Bedarf kannst du die Union-Methode verwenden, um die Löschung von Spalten zu optimieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten in Excel schnell löschen?
Verwende VBA, um alle Spalten, die ein bestimmtes Kennzeichen haben, in einem Durchgang zu löschen, anstatt jede Spalte einzeln zu bearbeiten.

2. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten modernen Excel-Versionen verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige