Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Alle Spalten löschen ausser...

Alle Spalten löschen ausser...
02.05.2014 18:09:27
Dip
Hallo Allerseits,
Folgende Problemstellung würde ich gerne in das Forum einbringen.
Und zwar würde ich gerne, dass in einer Tabelle alle Spalten ausser die Spalte "B", "E" "H-L" und "X" gelöscht werden.
Weiss jemand wie man dies in einem Marko umsetzt?
Bin für jede Hilfe sehr dankbar!
Beste Grüsse
Patrick

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Spalten löschen ausser...
02.05.2014 18:16:39
Spenski
Hi
Versuch das mal mit dem makrorecorder aufzunehmen
Alle Spalten die du löschen willst markieren und dann Inhalte löschen
Gruss

AW: Alle Spalten löschen ausser...
02.05.2014 20:12:15
Uwe
Hallo Patrick,
habe mit meinen bescheidenen Mitteln mal folgenden Vorschlag. Sub Dip() Dim rng1 As Range, rng2 As Range, rng3 As Range, rng4 As Range, rng5 As Range With Sheets("Tabelle1") Set rng1 = .Range("A:A") Set rng2 = .Range("C:D") Set rng3 = .Range("F:G") Set rng4 = .Range("M:W") Set rng5 = .Range("Y:XFD") Application.ScreenUpdating = False rng5.Delete rng4.Delete rng3.Delete rng2.Delete rng1.Delete End With Application.ScreenUpdating = True End Sub
Nachteil: Das Löschen ist an keinerlei Bedingungen geknüpft. Es wird also bei jeder Ausführung des Makros gnadenlos gelöscht.
Vorteil: Das Makro tut 1:1 das was du beschrieben hast.
Grüße aus Dresden
Uwe

Anzeige
AW: Alle Spalten löschen ausser...
02.05.2014 23:11:26
Dip
Guten Abend Spenski und Uwe,
Danke für Euer Feedback!
@Spenski: Das habe ich bereits gemacht, nur möchte ich nicht die Spalten verwalten die zu löschen sind sondern nur die die nicht zu löschen sind, da die nicht zu löschenden Spalten sich verschieben können, und diese anzugeben leichter ist...
@Uwe: sieht gut aus :-) wie bereits beschrieben wäre es ideal, wenn ich die nicht zu löschenden Spalten angeben könnte, statt die zu löschenden...
Gäbe es eine Möglichkeit dies umzusetzen?
Beste Grüsse
Patrick

Anzeige
AW: Alle Spalten löschen ausser...
03.05.2014 01:14:51
Uwe
Hallo Patrick
hier noch ein Vorschlag, wie du das lösen könntest.
Sub Dip2()
Dim rngBereich1 As Range, rngbereich2 As Range
Application.ScreenUpdating = False
With Sheets("Tabelle1") 'Tabelle anpassen
Set rngBereich1 = Union(.Range("B:B"), .Range("B:B"), _
.Range("E:E"), .Range("H:L"), .Range("X:X"))
rngBereich1.Copy Destination:=ThisWorkbook.Sheets("Tabelle2").Range("A1") 'Tabelle  _
anpassen
.Range("A:XFD").ClearContents
End With
With Sheets("Tabelle2") 'Tabelle anpassen
Set rngbereich2 = .Range("A:H")
rngbereich2.Copy Destination:=ThisWorkbook.Sheets("Tabelle1").Range("A1") 'Tabelle  _
anpassen
.Range("A:XFD").ClearContents
End With
Application.ScreenUpdating = True
End Sub
Grüße aus Dresden
Uwe

Anzeige
AW: Alle Spalten löschen ausser...
03.05.2014 01:24:29
Uwe
sorry... .Range("B:B") ist doppelt. Kann einmal weg.

nicht markierte Spalten löschen ...
03.05.2014 08:54:46
Matthias
Hallo
Soll nur als Ansatz dienen!
ScreenUpdating habe ich bewusst nicht abgeschalten, damit Du siehst was passiert
Hier also mal ne kleine Datei zum Spielen
Im Bsp für die Spalten A-Z
 ABCDEFGHIJKLMNOPQRSTUVWXYZ
11234567891011121314151617181920212223242526
2 ü ü ü ü ü ü ü ü ü ü ü ü ü
3                          


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Das ü ist in der Datei ein Häkchen(Wingdings-Schriftart) zum Markieren
und wird von Excel Jeanie HTML 4 nicht dargestellt.
https://www.herber.de/bbs/user/90449.xlsm
Viel Spaß ;-)
Gruß Matthias

Anzeige
@Uwe Hinweis ...
03.05.2014 12:36:01
Matthias
Hi Uwe
... wäre es ideal, wenn ich die nicht zu löschenden Spalten angeben könnte, statt die zu löschenden...
Da solltest Du noch mal nachlegen ;-)


Aber das ist wichtig!
Wenn ich in Zelle("X1") z.B händisch den Inhalt lösche, dann wars das schon für den Code
Er will doch Spalten löschen, egal ob was drinsteht oder nicht
Das ist also nicht sicher, Uwe.
Hier ist übrigens Spalte B doppelt referenziert

Set rngBereich1 = Union(.Range("B:B"), .Range("B:B"), _
.Range("E:E"), .Range("H:L"), .Range("X:X"))
If .Cells(1, 24) = "" Then

Gruß Matthias

Anzeige
AW: @Uwe Hinweis ...
03.05.2014 14:38:15
Dip
Hallo Allerseits,
Ich habe in der Zwischenzeit mal versucht etwas zusammen zu bauen...
Dim introw As Long
With ActiveSheet
introw = .Range("A" & .Columns.Count).End(xlToRigt).Column
Do Until introw = 0
Select Case .Cells(introw, 1)
Case "D", "F", "G", "H", "E"
Case Else
.Columns(introw).EntireColumn.Delete
End Select
introw = introw - 1
Loop
End With
aber irgendwo hackt es noch...
wüsste jemand woran es liegt?
Danke und Grüsse
Patrick

Anzeige
xlToRigt ?
03.05.2014 15:23:09
Matthias
Hallo
Zitat

Ich habe in der Zwischenzeit mal versucht etwas zusammen zu bauen
Ist ja schön das Du auch versuchst eine Lösung zu finden,
aber wie wäre es denn mal mit einer Reaktion auf unsere Vorschläge ?
Das ist nicht besonders nett von Dir.
Gruß Matthias

Anzeige
AW: @Uwe Hinweis ...
03.05.2014 15:10:34
Uwe
Hi Matthias,
das mit der doppelten Referenzierung hatte ich schon bemerkt. Siehe einen Beitrag darunter.
Ansonsten ist hier das Problem, das wir den Hintergrund dieser Löschaktion nicht kennen und wie es dann nach dem Löschen weitergeht mit diesen Restspalten. Wenn es stört, kann die Prüfung von X1 ja rausgenommen werden. Wenn unser Dip das Ganze mal etwas näher erläutert oder eine BspMappe zeigt, würde am Ende vllt etwas völlig anderes rauskommen... aber das weiß eben nur unser Dip.
Grüße aus Dresden
Uwe

Anzeige
AW: @Uwe Hinweis ...
03.05.2014 15:43:51
Dip
Hallo Zusammen,
@Matthias: Entschuldige dass ich mich nicht explizit auf Dein Input reagiert habe. Auf jedenfall Danke für Dein Feedback! Das Bsp ist gut, jedoch nicht was ich für mein Problem brauche, und meine VBA Kenntnisse sind zu gering um das BSp irgendwie umzubauen damit es passt... Aber danke trotzdem Matthias!
@Uwe: Der Hintergrund ist, dass nicht alle Spalten (die Werte enthalten) benötigt werden und nur die erwähnte Spalten benötigt werden. Nachdem die überflüssen Spalten gelöscht sind, wir die Datei gespeichert, fertig. Eigentlich ganz einfach, in der Theorie :-) aber schwieriger zum umsetzen...
Grüsse
Patrick

Anzeige
@Patrick Nachtrag ...
03.05.2014 16:03:10
Matthias
Hallo
Da Du mich in Deiner Antwort an Uwe auch ansprichst, möchte ich noch ein letztes Feedback geben
Dann bin ich raus aus der Nummer.
Was ist daran schwierig in den Zellen der Zeile(2) einen Doppelklick zu machen?
Damit wird das Häkchen gesetzt für die Spalte, wenn Du sie nicht löschen willst.
Userbild
Übrigens löscht Dein Code auch bei richtiger Schreibweise von (Rechts) alle Spalten
Da kannst Du gleich schreiben:
Cells.Delete

Das geht dann auch schneller als Dein Konstrukt
Gruß Matthias

Anzeige
AW: @Uwe Hinweis ...
03.05.2014 16:49:49
Uwe
Hallo,
Zitat: "aber irgendwo hackt es noch... wüsste jemand woran es liegt?"
Da geb ich Matthias Recht. Es hakt wohl daran das du unsere Vorschläge ignorierst. Nachdem du nun sagtest, das nach dem löschen einfach nur gespeichert wird, weiß ich nicht warum du die Bsp'le nicht verwendest. Sowohl die Lösung von Matthias als auch meine führen zum Ziel, wenn auch auf unterschiedliche Weise. Das Ganze haben wir dir sogar in Bsp-Mappen präsentiert. Eine Steigerung wäre, du lässt ein Taxi nach Dresden kommen und wir passen dir das dann an deine Mappe an, natürlich Rückfahrt, Abendbrot und 'ne Kiste Bier inclusive.
Viel Spaß noch
Uwe

Anzeige
AW: @Uwe Hinweis ...
04.05.2014 23:59:30
Ewald
Hallo,
hier mal mit Eingabe der Spalten die du behalten willst in einer Inputbox
zB 1,3,5,7
diese Spalten bleiben erhalten, die anderen werden gelöscht.
Sub Spalten_löschen()
Dim x As String
Dim varr As Variant
Dim i As Long
Dim k As Long
Dim z As Long
x = Application.InputBox("Bitte die Spalten kommagetrennt eingeben die sie behalten wollen", " _
Spalteneingabe")
varr = Split(x, ",")
For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
For k = 0 To UBound(varr)
If Columns(i).Column = CDbl(varr(k)) Then z = z + 1
Next
If z = 0 Then Columns(i).EntireColumn.Delete
z = 0
Next i
End Sub
Gruß Ewald

Anzeige
AW: @Uwe Hinweis ...
05.05.2014 14:40:54
Dip
Guten Tag Allerseits,
@Matthias: Deine Lösung ist super und einfach handzuhaben. Jedoch muss die Angabe der nicht zu löschenden Spalten im Code angegeben werden. Da meine VBA Kenntnisse gering sind, wüsste ich nicht wie ich die Spalten im Code selbst einzutragen habe. Dies habe ich mit meinem Beispiel versucht umzusetzen, leider ohne Erfolg. Ich danke Dir trotzdem für Deine Aufmerksamkeit und dein Beispiel kann ich bestimmt irgendwann gut gebrauchen!
@Uwe: Auch dir danke für Deine Unterstützung. Deine Lösung tut genau dies was zu tun wäre. Jedoch liegt das Problem beim Namen der Tabellen, die explizit angegeben werden. Da das Dokument wird an verschiedene Pesonen verteilt, die verschiedene Sprachversionen besitzen, kann dies zu Fehlern in der Ausführung führen.
@Ewald: Dies ist genau was ich gesucht habe! Ich habe die nicht zu löschenden Spalten direkt im Code als "x" variable definiert, was einfach war dank deines einfachen Codes. Vielen Dank für Deine Hilfe!
Einen sonnigen Tag für Alle!
Grüsse
Patrick
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Spalten in Excel löschen, außer bestimmten Spalten


Schritt-für-Schritt-Anleitung

Um in Excel alle Spalten zu löschen, außer bestimmten, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf einen der Einträge im Projekt-Explorer > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub Spalten_löschen()
       Dim x As String
       Dim varr As Variant
       Dim i As Long
       Dim k As Long
       Dim z As Long
       x = Application.InputBox("Bitte die Spalten kommagetrennt eingeben, die Du behalten möchtest (z.B. 1,3,5,7):", "Spalteneingabe")
       varr = Split(x, ",")
       For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
           For k = 0 To UBound(varr)
               If Columns(i).Column = CDbl(varr(k)) Then z = z + 1
           Next
           If z = 0 Then Columns(i).EntireColumn.Delete
           z = 0
       Next i
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Starte das Makro: Drücke ALT + F8, wähle Spalten_löschen aus und klicke auf „Ausführen“.

Durch dieses Makro kannst Du alle nicht gewünschten Spalten in Excel einfach löschen, während die angegebenen Spalten erhalten bleiben.


Häufige Fehler und Lösungen

  • Fehler: "Excel Spalte lässt sich nicht löschen"

    • Lösung: Überprüfe, ob die Spalten, die Du löschen möchtest, geschützt sind. Du musst möglicherweise den Blattschutz aufheben.
  • Fehler: "Das Makro löscht alle Spalten"

    • Lösung: Achte darauf, dass Du die Spaltennummern korrekt angibst. Wenn Du 1,3,5,7 eingibst, werden nur diese Spalten behalten.

Alternative Methoden

  1. Manuelles Löschen:

    • Markiere die Spalten, die Du löschen möchtest, mit der STRG-Taste, und klicke dann mit der rechten Maustaste und wähle „Löschen“.
  2. Excel Funktionen:

    • Du kannst auch Formeln verwenden, um Inhalte zu filtern und anschließend die überflüssigen Spalten manuell zu löschen.
  3. Excel alles löschen außer:

    • Eine weitere Möglichkeit ist, die Daten in eine neue Tabelle zu kopieren und nur die gewünschten Spalten zu behalten.

Praktische Beispiele

Angenommen, Du möchtest in einer Tabelle die Spalten A, C, E und G behalten:

  • Beispiel: Wenn Du das oben angegebene Makro verwendest und 1,3,5,7 eingibst, werden die Spalten B, D, F, H, ... gelöscht.

Tipps für Profis

  • Verwende die ScreenUpdating-Eigenschaft: Setze Application.ScreenUpdating = False am Anfang Deines Makros, um die Ausführung zu beschleunigen und Flicker-Effekte zu vermeiden.

  • VBA zur Automatisierung: Automatisiere Deine Datenbereinigung mit VBA, um regelmäßig unbenötigte Spalten zu löschen, ohne manuell eingreifen zu müssen.

  • Sichere Deine Daten: Erstelle immer eine Sicherheitskopie Deiner Datei, bevor Du Massenlöschungen durchführst.


FAQ: Häufige Fragen

1. Wie kann ich alle Spalten rechts von einer bestimmten Spalte löschen? Du kannst die Spalten markieren, die Du löschen möchtest, und dann das Kontextmenü verwenden, um sie zu entfernen.

2. Gibt es eine Möglichkeit, nur die Spalten auszublenden, anstatt sie zu löschen? Ja, Du kannst die Spalten markieren und mit der rechten Maustaste „Ausblenden“ wählen, um sie vorübergehend auszublenden.

3. Wie kann ich alle Zellen löschen, die Inhalte enthalten? Verwende den Befehl Cells.ClearContents in VBA, um alle Inhalte zu entfernen, ohne die Struktur der Tabelle zu beeinflussen.

4. Kann ich ein Makro verwenden, um nur bestimmte Daten zu löschen? Ja, Du kannst eine If-Bedingung in Dein Makro einfügen, um nur bestimmte Werte oder Datentypen zu löschen, wie z.B. If Cells(i, j).Value <> "" Then.

5. Wie kann ich sicherstellen, dass das Makro für verschiedene Excel-Versionen funktioniert? Vermeide spezifische Funktionen oder Eigenschaften, die nur in bestimmten Versionen verfügbar sind, und teste Dein Makro in verschiedenen Versionen.

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