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 zum löschen bestimmter Spalten

Makro zum löschen bestimmter Spalten
Otto
GUten Morgen,
Ich brauche Eure Hilfe. Ich brauche ein Makro, das alle Spalten in einer Tabelle löscht, die in ihrer ersten Zelle bestimmte worte NICHT enthalten.
Also:
Ich habe viele verschieden Dateien jeder mit 15-25 Spalten. Ich brauche aber nur 3 von diesen Spalten von jeder Datei. D.h. ich muss in jeder Datei die Spalten löschen, die bestimmte Kriterien (name der ersten Zelle) nicht erfüllen. Das Problem ist die Spalten sind in jeder Datei unterscheidlich und in unterschiedlicher Rheienfolge.
Z.B. Ich habe in einer Datei die Spalten: Höhe, Tiefe, Breite, Alter und viele andere. Das Makro soll alle Spalten löschen bis auf die drei: Tiefe, Breite und Alter. Wie gesagt in den anderen Dateien sind diese Spalten an verschiedenen Positionen, so dass das Makro sie in jeder Datei neu "suchen" muss.
In dem Angang gibt es eine Beispiel-Datei.
https://www.herber.de/bbs/user/68550.xls
Könnt Ihr mir mit dem Makro helfen?
Vielen herzlichen Dank im Voraus
Otto
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Makro zum löschen bestimmter Spalten
14.03.2010 11:51:06
Tino
Hallo,
müsste so funktionieren.
Sub Test()
Dim KillSpalten As Range, rngTmp As Range
Dim ArBegriffe()

ArBegriffe = Array("Tiefe", "Breite", "Alter")

For Each rngTmp In Sheets("Sheet1").UsedRange.Rows(1).Cells
    If Not IsNumeric(Application.Match(rngTmp.Value, ArBegriffe, 0)) Then
        If Not KillSpalten Is Nothing Then
            Set KillSpalten = Union(rngTmp.EntireColumn, KillSpalten)
        Else
            Set KillSpalten = rngTmp
        End If
    End If
Next rngTmp

If Not KillSpalten Is Nothing Then
    KillSpalten.EntireColumn.Delete
End If

End Sub
Gruß Tino
Anzeige
AW: Makro zum löschen bestimmter Spalten
14.03.2010 20:12:10
Otto
Danke, Tino!!!
Funktioniert prima aber da gibt es noch 2 Fragen über die ich zunächst nicht nachgedacht habe.
In Deinem Beispiel gibt es die Zeile:
For Each rngTmp In Sheets("Sheet1").UsedRange.Rows(1).Cells
also das Makro sucht Sheet1 und gibt mir Fehlermeldung wenn die Tabelle anders heisst als Sheet1 und der Name ist immer unterschiedlich.
Kannst Du mir bitte helfen wie das Makro geändert soll um zu funktionieren egal wie der Name der Tabelle ist?
Und noch eine zweite Frage (sorry!):
Kann man in dem Makro eine Schleife integriren, so dass es automatisch nacheinander für alle Tabelle der jeweiligen Datei läuft?
Ich habe viele Dateien und jede hat 25+ Tabellen (Sheets). Es wäre geniall wenn das ginge.
Vielen Dank
Otto
Anzeige
AW: Makro zum löschen bestimmter Spalten
15.03.2010 07:44:27
Tino
Hallo,
müsste so funktionieren.
Sub Test()
Dim KillSpalten As Range, rngTmp As Range
Dim ArBegriffe(), ArWS_Ausnahme()
Dim oWSh As Worksheet

'Bergriffe die erhalten  bleiben sollen 
ArBegriffe = Array("Tiefe", "Breite", "Alter")

'Ausnahme Tabellen in denen nicht gelöscht werden soll 
ArWS_Ausnahme() = Array("Tabelle1", "Tabelle3")

For Each oWSh In ActiveWorkbook.Worksheets
    
    If Not IsNumeric(Application.Match(oWSh.Name, ArWS_Ausnahme, 0)) Then
        
        For Each rngTmp In oWSh.UsedRange.Rows(1).Cells
            If Not IsNumeric(Application.Match(rngTmp.Value, ArBegriffe, 0)) Then
                If Not KillSpalten Is Nothing Then
                    Set KillSpalten = Union(rngTmp.EntireColumn, KillSpalten)
                Else
                    Set KillSpalten = rngTmp
                End If
            End If
        Next rngTmp
        
        If Not KillSpalten Is Nothing Then
            KillSpalten.EntireColumn.Delete
            Set KillSpalten = Nothing
        End If
    
    End If

Next oWSh

End Sub
Gruß Tino
Anzeige
AW: DANKE!!!
15.03.2010 08:54:31
Otto
Guten Morgen Tino,
Vielen herzliche Dank! Es funktionirt prima und es ist super schnell auch!
Danke für die Hilfe und eine schöne Woche!
Otto
AW: Makro zum löschen bestimmter Spalten
14.03.2010 11:57:44
Reinhard
Hallo Otto,
Sub Loesch()
Dim Namen, N As Integer, Erh As Boolean, Spa As Long, S As Long
Namen = Array("Höhe", "Tiefe", "Alter")
With ActiveSheet
For S = .Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
Erh = False
For N = 0 To UBound(Namen)
If Namen(N) = .Cells(1, S).Value Then
Erh = True
Exit For
End If
Next N
If Erh = False Then Columns(S).Delete
Next S
End With
End Sub

Gruß
REinhard
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro zum Löschen bestimmter Spalten in Excel


Schritt-für-Schritt-Anleitung

Um ein Makro zu erstellen, das bestimmte Spalten in Excel löscht, folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Kopiere und füge den folgenden Code in das Modul ein:

    Sub Test()
       Dim KillSpalten As Range, rngTmp As Range
       Dim ArBegriffe() As Variant
    
       ArBegriffe = Array("Tiefe", "Breite", "Alter")
    
       For Each oWSh In ActiveWorkbook.Worksheets
           Set KillSpalten = Nothing
           For Each rngTmp In oWSh.UsedRange.Rows(1).Cells
               If Not IsNumeric(Application.Match(rngTmp.Value, ArBegriffe, 0)) Then
                   If Not KillSpalten Is Nothing Then
                       Set KillSpalten = Union(rngTmp.EntireColumn, KillSpalten)
                   Else
                       Set KillSpalten = rngTmp
                   End If
               End If
           Next rngTmp
    
           If Not KillSpalten Is Nothing Then
               KillSpalten.EntireColumn.Delete
           End If
       Next oWSh
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem Du auf Entwicklertools > Makros klickst und das Makro Test auswählst.

Dieses Makro löscht alle Spalten, die nicht die Begriffe „Tiefe“, „Breite“ oder „Alter“ enthalten. Es funktioniert unabhängig von den Tabellennamen und kann in allen Arbeitsblättern der geöffneten Datei angewendet werden.


Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range"

    • Lösung: Überprüfe, ob die Namen der Spalten, die Du beibehalten möchtest, korrekt sind. Achte darauf, dass sie exakt mit den Werten in der ersten Zeile übereinstimmen.
  • Fehler: "Method 'Delete' of object 'Range' failed"

    • Lösung: Stelle sicher, dass das KillSpalten-Objekt nicht Nothing ist, bevor Du versuchst, es zu löschen.

Alternative Methoden

Neben dem VBA-Makro kannst Du auch manuell Spalten in Excel löschen:

  1. Markiere die Spalten, die Du löschen möchtest.
  2. Klicke mit der rechten Maustaste und wähle „Löschen“ aus dem Kontextmenü.

Für eine größere Anzahl an Spalten kann das Makro jedoch deutlich schneller und effizienter sein.


Praktische Beispiele

Ein Beispiel für das Löschen von Spalten mit dem Makro ist, wenn Du eine Tabelle mit verschiedenen Messdaten hast und nur die relevanten Spalten wie „Tiefe“, „Breite“ und „Alter“ behalten möchtest. Das oben genannte Makro kann in diesem Fall sehr hilfreich sein.


Tipps für Profis

  • Verwende die Application.ScreenUpdating = False-Anweisung, um das Aktualisieren des Bildschirms während der Ausführung des Makros zu deaktivieren. Dies kann die Ausführungsgeschwindigkeit erhöhen.

    Application.ScreenUpdating = False
  • Setze die Application.ScreenUpdating = True-Anweisung am Ende des Makros, um die Anzeige wieder zu aktivieren.


FAQ: Häufige Fragen

1. Frage
Wie kann ich das Makro für mehrere Dateien gleichzeitig ausführen?
Um das Makro auf mehrere Dateien anzuwenden, kannst Du eine Schleife einfügen, die durch alle geöffneten Arbeitsmappen iteriert und das Makro auf jede einzelne anwendet.

2. Frage
Kann ich das Makro anpassen, um mehr oder andere Begriffe zu behalten?
Ja, Du kannst die Begriffe im Array ArBegriffe im Makro anpassen, um die gewünschten Spalten zu behalten.

3. Frage
Welches Excel-Version benötige ich, um das Makro auszuführen?
Das Makro sollte in Excel 2010 und späteren Versionen funktionieren, solange die VBA-Funktionalität verfügbar ist.

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