Excel VBA: Dynamische Datumsfilter unter Ignorierung der Jahreszahl

Melden

Hier ist ein ausführliches Tutorial, wie du mit Excel VBA Datumsfilter anwendest, die die Jahreszahl ignorieren (z. B. um alle Geburtstage oder Jahrestage in einem bestimmten Monat über alle Jahre hinweg anzuzeigen).

In Excel ist das Filtern von Daten normalerweise chronologisch (Tag.Monat.Jahr). Oft möchte man jedoch nur nach dem Monat oder dem Tag filtern, um beispielsweise alle Ereignisse eines bestimmten Monats aus verschiedenen Jahren aufzulisten.

In diesem Tutorial nutzen wir die AutoFilter-Methode mit dem Operator xlFilterDynamic.


1. Die Vorbereitung

Stelle sicher, dass deine Daten als Tabelle (ListObject) formatiert sind.

  1. Markiere deinen Datenbereich.
  2. Drücke Strg + T.
  3. Gib der Tabelle oben links im Reiter "Tabellenentwurf" einen Namen, z. B. "MeineDaten".
  4. Die Datumswerte sollten sich in einer Spalte befinden (in unserem Beispiel Spalte 1).

2. Der VBA-Code: Filtern nach dem aktuellen Monat (Jahresunabhängig)

Dieser Code filtert die Tabelle so, dass nur die Einträge des aktuellen Monats angezeigt werden, egal aus welchem Jahr sie stammen.

Sub FilterAktuellerMonatAlleJahre()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim SpalteDatum As Integer

    ' Arbeitsblatt und Tabelle definieren
    Set ws = ThisWorkbook.Sheets("Tabelle1") ' Name deines Blattes anpassen
    Set tbl = ws.ListObjects("MeineDaten")   ' Name deiner Tabelle anpassen
    SpalteDatum = 1 ' Die Spalte in der Tabelle, die das Datum enthält

    ' Bestehende Filter löschen
    If tbl.ShowAutoFilter Then
        tbl.AutoFilter.ShowAllData
    End If

    ' Dynamischen Filter anwenden (Filtert nur nach dem aktuellen Monat)
    ' xlFilterAllDatesInPeriodMonthCurrent ignoriert das Jahr automatisch
    tbl.Range.AutoFilter Field:=SpalteDatum, _
        Criteria1:=xlFilterAllDatesInPeriodMonthCurrent, _
        Operator:=xlFilterDynamic

End Sub

3. Der VBA-Code: Filtern nach einem spezifischen Monat

Wenn du nicht den aktuellen Monat, sondern einen festen Monat (z. B. alle Januare) filtern möchtest, nutzt du die entsprechende Konstante.

Sub FilterSpezifischerMonat()
    Dim tbl As ListObject
    Set tbl = ActiveSheet.ListObjects("MeineDaten")

    ' Beispiel: Alle Einträge für MAI (Jahreszahl wird ignoriert)
    tbl.Range.AutoFilter Field:=1, _
        Criteria1:=xlFilterAllDatesInPeriodMay, _
        Operator:=xlFilterDynamic
End Sub

Liste der wichtigsten Konstanten:

  • xlFilterAllDatesInPeriodJanuary (Januar)
  • xlFilterAllDatesInPeriodFebruary (Februar)
  • ... usw. bis ...
  • xlFilterAllDatesInPeriodDecember (Dezember)

4. Fortgeschritten: Filtern nach exaktem Tag & Monat (z.B. heute)

Wenn du Einträge filtern willst, die genau auf den heutigen Tag und Monat fallen (typisch für Geburtstagslisten), ist VBA mit Standard-Filtern etwas eingeschränkt, da es keine direkte Konstante für "Heute ohne Jahr" gibt.

Lösung: Wir nutzen ein Hilfskriterium.

Sub FilterHeuteOhneJahr()
    Dim tbl As ListObject
    Dim heuteTag As Integer
    Dim heuteMonat As Integer

    Set tbl = ActiveSheet.ListObjects("MeineDaten")

    heuteTag = Day(Date)
    heuteMonat = Month(Date)

    ' Wir nutzen einen Textfilter, um Tag und Monat zu vergleichen
    ' Hinweis: Das funktioniert am besten, wenn man eine Hilfsspalte nutzt.
    ' Falls keine Hilfsspalte gewünscht ist, nutzt man folgenden Trick:

    tbl.Range.AutoFilter Field:=1, _
        Criteria1:=">=" & DateSerial(2000, heuteMonat, heuteTag), _
        Operator:=xlAnd, _
        Criteria2:="<=" & DateSerial(2000, heuteMonat, heuteTag)

    ' WICHTIG: Das obige funktioniert nur stabil mit Hilfsspalten.
    ' Empfehlung für "Tag & Monat": Erstelle eine Spalte "=TEXT([@Datum];""MMTT"")"
    ' Und filtere dann einfach nach dem String "MMTT".
End Sub

5. So baust du das Tutorial nach

  1. Öffne Excel und drücke Alt + F11, um den VBA-Editor zu öffnen.
  2. Gehe auf Einfügen -> Modul.
  3. Kopiere den Code aus Schritt 2 oder 3 hinein.
  4. Passe den Tabellennamen (MeineDaten) und den Blattnamen (Tabelle1) an.
  5. Drücke F5 zum Ausführen oder verknüpfe das Makro mit einer Schaltfläche in deiner Excel-Tabelle.

Zusammenfassung

Der Schlüssel zum Ignorieren der Jahreszahl in Excel VBA liegt im Operator xlFilterDynamic. In Kombination mit den xlFilterAllDatesInPeriod...-Konstanten erkennt Excel automatisch, dass nur der Monatsteil des Datums verglichen werden soll.

0