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
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
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)
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
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
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!
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!