Mit VBA nach Datum filtern

Ziemlich banal ist eigentlich der heutige VBA Tipp. Allerdings ist das Internet voll von Fragen zu diesem Thema. Und die Lösungsvorschläge funktionieren mal besser, mal schlechter. Meistens sind es improvisierte Ideen, die das eigentliche Problem umgehen (z.B. Umformatieren in einen String etc.). Die Lösung dieses alltäglichen Problems bereit daher offensichtlich so manches Kopfzerbrechen. Gerade auch deshalb weil der Makro Rekorder das Problem nicht lösen kann. Gemeint ist das Ansteuern eines Autofilters über ein VBA Makro wenn eine Datumsspalte gefiltert werden soll. Nachfolgend stelle ich Ihnen jeweils einen passenden VBA Code vor um eine Datumsspalte nach den gängien Varianten:

  • Datum ist gleich
  • Datum ist größer als
  • Datum ist kleiner als
  • Datum liegt zwischen
  • Datum ist größer als das aktuelle Tagesdatum
VBA Makro Lösung

Grundsätzlich ist bei den nachfolgenden Beispielen zu beachten, dass die zu filternde Spalte im Datumsformat “TT.MM.JJJJ” vorliegen muss. Ggf. können Sie die Spalte umformatieren, wenn ein anderes Format vorliegt. Sofern eine andere Datums-Variante genutzt werden soll, sind die Makros entsprechend anzupassen. Für die jeweiligen Beispiele wurde das Datum in eine Variable (Datum, Datum1, Datum2) vom Datentyp “Date” gespeichert. Sie können natürlich auch eine Inputbox, einen Zellwert oder ähnliches als Grundlage für die Filterfunktion verwenden.

Datum ist gleich
Um ein exaktes Datum filtern zu können ist es wichtig, dass in der Spalte auch nur der Tag, nicht aber die Uhrzeit gespeichert ist. Dabei meine ich nicht die formatierte Ansicht der Zelle, sondern die tatsächlich in der Zelle gespeicherte Zeitinformation. Im Standardformat können Datumswerte mit zusätzlicher Stundeninformation an der Kommazahl erkannt werden. Ansonsten können Sie auch ein Datumsformat mit Uhrzeitanzeige wählen um die Inhalte zu prüfen.

Beispiel:
Zellwert im Zeitformat / Zellwert im Standardformat
06.10.2005 00:00:00 / 38631
06.10.2005 10:00:00 / 38631,41667

Sub Datum_Gleich()

Dim Datum As Date

Datum = "16.03.2005"

Rows("1:1").AutoFilter Field:=5, Criteria1:="<=" & CDbl(Datum), Operator:=xlAnd, Criteria2:=">=" & CDbl(Datum)

End Sub

Datum ist größer als
Mit dieser Variante filtern Sie alle Datumswerte, die größer als das eingegebene Datum sind.

Sub Datum_Groesser_Als()

Dim Datum As Date

Datum = "01.05.2006"

Rows("1:1").AutoFilter Field:=5, Criteria1:=">" & CDbl(Datum)

End Sub

Datum ist kleiner als
Entsprechend filtert diese Variante alle Datumswerte, die kleiner als das eingegebene Datum sind.

Sub Datum_Kleiner_Als()

Dim Datum As Date

Datum = "01.05.2006"

Rows("1:1").AutoFilter Field:=5, Criteria1:="<" & CDbl(Datum)

End Sub

Datum liegt zwischen
Sollen alle Datumswerte angezeigt werden, die größer oder gleich einem ersten Datum, aber kleiner oder gleich einem zweiten Datum sind, können Sie die nächste Variante nutzen.

Sub Datum_Zwischen()

Dim Datum1 As Date, Datum2 As Date

Datum1 = "01.05.2006"
Datum2 = "31.12.2009"
                            
Rows("1:1").AutoFilter Field:=5, Criteria1:=">=" & CDbl(Datum1), Operator:=xlAnd, Criteria2:="<=" & CDbl(Datum2)

End Sub

Datum ist größer als das aktuelle Tagesdatum
Möchten Sie nur Datumswerte anzeigen lassen die in der Zukunft liegen, nutzen Sie folgende Variante. Wichtig hierbei ist, die Datums-/Zeit-Information der Funktion Now() mit der Funktion Format(Datumswert, Formatierung) auf die Tagesinformation, ohne Zeitinformation zu beschränken.

Sub Datum_Groesser_Heute()

Dim Datum As Date

Datum = Format(Now(), "DD.MM.YYYY")

Rows("1:1").AutoFilter Field:=5, Criteria1:=">" & CDbl(Datum)

End Sub
VBA Makro Lösung

Weitere Anpassungsmöglichkeiten
Anpassungen sind an Rows("1:1") vorzunehmen, wenn der Filter nicht in Zeile 1 vorhanden ist und an Field:=5 falls nicht das fünfte Filterelement gefiltert werden soll.

Die obigen Beispiele sind auch in der angehängten Excel-Musterdatei enthalten.

Excel VBA filtern nach DatumDatum mit VBA Makro filtern

 

Schreibe einen Kommentar

*