Für Excel-Profis: Mit welcher Funktion kann man automatisch Inhalte von Spalten löschen, in deren Kopfzeile ein zurückliegendes Datum eingetragen ist?

... komplette Frage anzeigen

3 Antworten

reserviere B1 für das heutige Datum (=heute() wird vorsichtshalber automatisch jedesmal neu gesetzt) (B1 ggf einfärben)

öffne mit Alt F11 den VBA-Editor

(ddf.Doppel)klick auf Diese Arbeitsmappe

dahinein dieses Sub kopieren:

  • Sub workbook_open()
  • Dim i
  • Worksheets("Tabelle1").Activate
  • Worksheets("Tabelle1").Cells(1, 2).FormulaLocal = "=heute()"
  • For i = 7 To 1 Step -1
  • If Cells(1, 2).Value > Cells(1, i+1).Value Then Cells(1, i+1).EntireColumn.Delete
  • Next i
  • End Sub

Das prüft, ob in B1:B8 ein altes Datum steht (das +1 hab ich vorsichtshalber eingefügt, weil ich nicht sicher bin, ob ein ggf. leeres A1 evtl die Namensliste löscht)

Ändere ggf den Blattnamen "Tabelle1" in "Deinen" um.

Bei Rückfragen melde Dich hier. Oder wenn Variante 2 doch unbedingt erforderlich wäre, würde (auch nur ein klein wenig) komplizierter.

Oder wenn die Datei nicht automatisch bei Tabelle1 geöffnet werden soll, ginge auch mit einer kleinen Ergänzung. Wenn bekannt, welches Blatt, kann man das auch einstellen.

Antwort bewerten Vielen Dank für Deine Bewertung

Wie sieht die Tabelle denn aus?

Welche Zellen hieraus sollen geleert werden?

Antwort bewerten Vielen Dank für Deine Bewertung

Da wirst du um ein Makro nicht herumkommen.

Quick und Dirty:

In meinem Beispielmakro wird beim öffnen der Mappe geprüft ob die Zahl in der ersten Zeile kleiner ist als der Tag des aktuellen Datums. Wenn ja  werden die Zeilen der jeweiligen Spalte geleert.

Private Sub Workbook_Open()


'Dim letztespalte As Integer
'Dim letztezeile As Integer


letztespalte = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Column
letztezeile = Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row

For iCounterS = 2 To letztespalte
Dim a As Integer
Dim b As Integer

a = Cells(1, iCounterS).Value
b = Format(Date, "d")

If a < b Then
For iCounterZ = 2 To letztezeile
Cells(iCounterZ, iCounterS).Value = ""
Next iCounterZ
End If
Next iCounterS

End Sub

Das alles muss natürlich noch angepasst werden je nachdem wie deine Arbeitsmappe aussieht. Aktuell wird einfach das aktuell sichtbare Tabellenblatt geleert. Da du aber natürlich mehrere Sheets hast muss das auch noch betrachtet werden. 

Den Code bekommst du in den VBA-Editor indem du  ALT + F11 drückst.

siehe hierzu die Beispieldatei: https://drive.google.com/open?id=0B7RClrQFWfzhNk1GdlhKYWFkem8



Falls du weitere Hilfe benötigst, kannst du gerne eine PN schreiben.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?