Frage von blueballGSH, 24

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

Guten Tag,

ich benötige eine Excel-Tabelle für die Personaleinsatzplanung. Ganz grob: In Spalte A sollen die Namen der Mitarbeiter/-innen stehen, in Zeile 1 (Kopfzeile) die Tage des jeweiligen Monats. Die Beschäftigten können dann ihre geplanten Abwesenheiten (Urlaubszeiten, Lehrgänge, Dienstreisen etc.) mit festgelegten Kürzeln in die Tabelle eintragen. Ungeplante Abwesenheiten (z.B. wegen Krankheit) werden durch das Geschäftszimmer eingetragen. Für jeden Monat soll es ein eigenes Tabellenblatt geben.

Nun gebietet es der Datenschutz, dass Abwesenheiten in automatisierten Dateien (zumindest außerhalb der Personalverwaltung) für die Vergangenheit nicht nachgehalten werden dürfen, damit die Informationen zu einem späteren Zeitpunkt, z.B. im Rahmen von Beurteilungen, nicht gegen die/den jeweiligen Beschäftigte/-n verwendet werden können.

Die Excel-Tabelle soll also - Variante A - bei jedem Öffnen die Spalten, die ein zurückliegendes Datum tragen, automatisch und unwideruflich löschen. Noch besser wäre es wenn - Variante B - die Spalten erhalten blieben und beim Öffnen lediglich deren Inhalte (mit Ausnahme des in der Kopfzeile eingetragenen Datums) automatisch gelöscht würden.

Kann jemand eine Lösung austüfteln und umfassend beschreiben? Ich selbst bin Excel-Novize ohne Erfahrung wie man ein Makro einrichtet und daher auf eine "Von-A-bis-Z-Lösung" angewiesen.

Vielen Dank, Jens

Expertenantwort
von Iamiam, Community-Experte für Excel, 8

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
von ShitzOvran, 11

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
von PWolff, 8

Wie sieht die Tabelle denn aus?

Welche Zellen hieraus sollen geleert werden?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten