Makro: Spalten löschen in Excel

Hallo! Hab da ein kleines Vorhaben in einem Excel-Sheet mit sehr sehr vielen Spalten (und Zeilen):
Ich brauche ein Makro das automatisch alle Spalten löscht, die in einer bestimmten Zeile nicht einen bestimmten Wert aufweisen…z.B.

A B C D

1 EURUSD GBPUSD AUDUSD EURUSD
2
3
4

Hier sollte z.B. jede Spalte gelöscht werden, bei der in der ersten Zeile „EURUSD“ steht, alle anderen sollten unverändert gelassen werden…!
Vielen Dank schonmal vorab!!
Wolfgang

Hallo Wolfgang,
probier es doch mal damit:

Sub Spalten_Loeschen()
Dim i As Long 'Zähler für die Spalten
On Error GoTo Errhandler
For i = 1 To ActiveSheet.Columns.Count
DoEvents
'Alle Spalten durchgehen
'zu beachten: wenn gelöscht wird, dann ändert sich
'der Spaltenindex der nächsten Spalte nicht, da
'alle Folgespalten 1 nach vorn rutschen
'deswegen eine While-Schleife
While Cells(1, i).Value = „EURUSD“
DoEvents
Columns(i).EntireColumn.Delete
Wend
Next i
Exit Sub
Errhandler:
'Fehlerbehandlung falls etwas schief geht -> ausgeben
MsgBox Err.Description
End Sub

Gruß
Marcus

Hallo Wolfgang,

eine Lösung könnte so aussehen:

Sub Spaltenlöschen
Dim sh As Worksheet
Set sh = ActiveSheet

Dim xC As Integer
Dim cellValue As String
For xC = 1 To sh.Columns.Count
Columns(xC).Select 'Spalte markieren

cellValue = UCase(sh.Cells(1, xC).Value) 'Zelleninhalt / Überschrift lesen

If cellValue = „“ Then Exit For

If cellValue „EURUSD“ Then 'Inhalt von Überschrift vergleichen
Selection.Delete Shift:=xlToLeft 'Spalte löschen

'Wenn eine Spalte gelöscht ist, den Spaltenzähler um eins runter, da sonst eine Spalte ubersprungen wird.
xC = xC - 1
End If
Next
End Sub

Ich hoffe, das das Dir weiter hilft.

Viele Grüße
Ali

Also Du könntest die Zellen selectieren und dann mit
activecell.adress die Adresse der Zelle zurückgeben oder in eine Variable schreiben.
!
Dann nur noch ein Split der Variable und das richtige Element (den Spaltenbuchstaben) aus dem Split Array holen. Die Spalten kannst Du dann natürlich ausblenden wie es Dir Spaß macht ;O)

Oder noch besser direkt den Wert der Zelle abfragen und dann die entsprechende Spalte löschen!

For i = 1 to 1000
if Sheets(„Dein Sheet“).Cells(i,2).Value = „EURUSD“
Sheets(„DeinSheet“).Columns(i).EntireColumn.Delete
End if
Next i

Tut mir leid; - kann leider nicht helfen.

Hallo Wolfgang,

hier ein Vorschlag:

Zunächst wird die letzte Spalte ermittelt, diese kannst Du aber auch fest vorgeben. Voraussetzung ist, dass die Daten in der ersten Zeile anfangen, ansonsten anpassen.
Jetzt die große Frage: Soll wirklich die komplette Spalte gelöscht werden, wenn eine Zeile das Schlüsselwort enthält? Oder nur die Zellen nach links verschoben werden? Im letzteren Fall musst Du Cells(Zeile, Spalte).Delete verwenden, evtl. mit dem Parameter Shift:=xlToLeft dahinter.

Dim Spalte as Byte
Dim Zeile as Long
Dim i as Byte

Zeile = 1

Do While Range("A" & Zeile).Value "" AND Zeile 

Hallo Wolfgang,

ich würde das so machen:

Sub SpaltenLoeschen()

 Dim Spalte, SpalteLetzt As Integer
 Const LetzteSpalte As Integer = 50 ' bitte ggf. anpassen
 Const SuchUeberschrift As String = "EURUSD" ' bitte ggf. anpassen

 Spalte = 1
 SpalteLetzt = LetzteSpalte

 Do
 If ActiveSheet.Cells(1, Spalte) = SuchUeberschrift Then
 ActiveSheet.Columns(Spalte).Delete Shift:=xlToLeft ' Spalte löschen
 SpalteLetzt = SpalteLetzt - 1 ' Letzte Spalte anpassen
 Else
 Spalte = Spalte + 1
 End If

 Loop Until Spalte = SpalteLetzt

End Sub

Gruß, BellHouse

Hallo lomfy,

oje, hoffentlich hast Du schon eine Lösung für Dein Problem gefunden. Sorry, habe eben erst diese Anfrage gesehen.

Also, Zellen lassen sich aktivieren über Cells(Zeile, Spalte).Activate. Dann prüfst Du den Inhalt. Wenn der Inhalt „EURUSD“ ist, wir die Spalte mit Colum(Nummer).Activate aktiviert und glöscht.

Hast Du schon mal ein Makro aufgenommen. Unbedingt ausprobieren!

Wenn das Problem weiter besteht, bitte melden.

LG MwieMichel

Sorry, ich war der Meinung, ich hätte schon geantwortet. Jetzt zur Frage: Soll das ein Entwicklungsauftrag sein, oder hast du Kenntnisse in VBA? Dann vielleicht die Frage etwas genauzer spezifizieren, an welcher Stzelle es hakt!

Gruß Wolfram