Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1144to1148
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige