Spalten löschen wenn nach Spaltenüberschrift kein Inhalt vorhanden ist!
Hallo liebe Leute,
ich sitze hier seit stunden und komme einfach nicht weiter. Ich habe eine Excel Datei, dort soll wenn kein Inhalt in dieser Spalte vorhanden ist die Spalte gelöscht werden. Die Spalte ab wann die Prüfung stattfinden soll ist I und beginnt in der Zeile 3,weil dort die Spaltenüberschrift steht. Die Spalten davor sollen erhalten bleiben also A-H. Wenn ein Wert /text in der Spalte I vorhanden ist soll die Spalte erhalten bleiben. Dies soll für die Spalten I bis Z erfolgen. Ich hoffe das mir jemand helfen kann.
6 Antworten
Sub spaltenLoeschen()
'mit with kann man ein Objekt (Hier das Sheet) direkt ansprechen:
With ThisWorkbook.Worksheets("Sheet1")
'eine Schleife von 4te Spalte (da D = 4er Buchstabe im Alphabet) bis Spaltenanzahl (Für Zeile 200 anstatt .Columns.Count einfach 200 einsetzen ;) )
For i = 4 To .Columns.Count
'Prüft ob es in der Zelle mit Adresse - Zeile 3, Spalte D bis Ende einen Eintrag gibt:
If .Cells(3, i) = ""
'Wenn nicht löschen:
Then.Columns(i).Delete
'Und alles wieder schließen
End If
Next i
End With
End Sub
Hier nochmal kommentiert, damit man auch als VBA Neuling alles vesteht.
Hallo kaka85,
kannst du den Code nicht in der anderen Datei eintippen und ausführen?
Ansonsten kannst du auch ActiveWorkbook.worksheets("Sheet1") benutzen, das führt den Code in dem Excel aus der im Moment selektiert ist.
Das würde ich aber nicht empfehlen, da man leicht aus versehen ein anderes Excel Sheet anklickt, oder man öfters 2 oder mehr Excels offen hat, und dann kann VBA durcheinanderkommen.. Aber wenn du das nur einmalig gebrauchst und du es nicht fest in einem Programm einbauen willst sollte es reichen.
Beste Grüße, TheGrandmaster
Guten Morgen Grandmaster,
recht herzlichen dank fuer deine ausfuehrliche Beschreibung. Probiere es gleich auf der Arbeit aus und melde mich danach wieder.
Sub spaltenLoeschen()
With ThisWorkbook.Worksheets("Sheet1")
For i = 1 To .Columns.Count
If .Cells(3, i) = "" Then
.Columns(i).Delete
End If
Next i
End With
End Sub
:D:D Sorry komme mit dem Code Editor hier irgendwie nicht klar, hoffentlich kannst du es lesen. Einfach anstatt "Sheet1" deinen Sheetnamen einfügen und ausprobieren ;)
hi grandmaster,
ich habe noch zwei fragen und zwar kannst du mir vielleicht sagen, wie ich den Code ändern müsste wenn ich möchte dass der Code erst ab Spalte D prüft ob die Bedingungen zutreffen und ich möchte gerne das er jede Spalte(ab D) bis Zeile 200 prüft ob Werte vorkommen. Sorry bin ein Neuling und habe echt keine Ahnung von VBA. Werde aber Kurse besuchen. Danke für deine Mühe
Hallo kaka85,
probier's mal hiermit:
> Sub spaltenLoeschen()
> With ThisWorkbook.Worksheets("Sheet1")
> For i = 1 To .Columns.Count
> If .Cells(3, i) = "" Then
> .Columns(i).Delete
> End If
> Next i
> End With
> End Sub
beachte jedoch, dass hiermit nur die dritte Zeile jeder Spalte geprüft wird! Wenn andere oder mehr Zellen geprüft werden sollen kannst du ja rumexperimentieren und den Code umändern :)
Beste Grüße, TheGrandmasta
Wenn Du eine vollkommen leere Spalte weg haben willst, den Buchstaben der Spalte anklicken, damit ist die Spalte markiert, dann auf Bearbeiten und dort "Spalte löschen" anklicken, dann speichern.
Danke für die schnelle antwort, aber ich brauche ein VBA-Code, da es eine sehr große Datei ist und die Aufgabe wiederkehrend ist, möchte ich es nicht immer wieder per Hand machen.
Wichtig hierbei ist es halt, dass die Prüfung erst ab der Spalte I Zeile 3 erfolgen soll. Hoffe dass Sie mir weiterhelfen können und danke schon mal für ihre Mühe :-)
Probiere es mit dem Filter und blende leere Zellen aus.
So mir ist nun aufgefallen das ich noch was wichtiges vergessen habe und zwar ist das eine andere Datei wo die Spalten gelöscht werden sollen. Ich denke mal das nur eine Änderung bei With ThisWorkbook.Worksheets("Sheet1")nötig ist, aber könntest du mir vielleicht auf die Sprünge helfen.