Nach Zeit filtern mit VBA

Hallo zusammen,
ich habe ein Problem mit einer Autofilterfunktion in VBA. Ich möchte eine Spalte filtern, in der mehrere Datumsinformationen stehen und zwar so, daß nur die Zeilen angezeigt werden, deren Inhalte z.B. am 1.5.05 zwischen 16:00 und 18:00 Uhr liegen. Manuell funktioniert das auch prima, gebe ich das ganze aber als Autofilterkriterium ein mit

Selection.AutoFilter Field:=1, Criteria1:=">=01.05.2005 16:00", Operator:= xlAnd, Criteria2:="

Hallo Stefan,
das Problem ist wohl, dass bei den AutoFilter-Kriterien Datum/Uhrzeit nicht in diesem Format, sondern als Zahlenwerte vorgegeben werden müssen. (Dann kann Excel die Werte mit den Zellwerten, die intern ja auch nur Dezimalzahlen sind, vergleichen.)

Mit "\>=38473.66667" anstelle von "\>=01.05.2005 16:00"
und "(also mit Dezimalpunkt statt Komma) sollte es gehen.

Wenn deine Tabelle etwa so aussieht:

    \_|\_\_\_\_\_\_\_\_A\_\_\_\_\_\_\_\_|\_B\_\_|C|\_D\_\_|\_\_\_\_\_\_\_\_E\_\_\_\_\_\_\_\_|\_F\_\_|\_\_\_\_\_\_\_\_G\_\_\_\_\_\_\_\_|
    1| Zeit |Txt | |von | 01.05.2005 16:00|bis | 01.05.2005 18:00|
    2| 01.05.2005 14:00|tx1 | | | | | |
    3| 01.05.2005 15:00|tx2 | | | | | |
    4| 01.05.2005 16:00|tx3 | | | | | |
    5| 01.05.2005 17:00|tx4 | | | | | |
    6| 01.05.2005 18:00|tx5 | | | | | |
    7| 01.05.2005 19:00|tx6 | | | | | |
    8| 01.05.2005 20:00|tx7 | | | | | |

und "AutoFilter" eingeschaltet ist, liest das folgende Makro die beiden Vorgabedaten in E1 und G1 (als Zeichenketten), wandelt sie in Double um, ersetzt Komma durch Punkt und stellt den Autofilter ein. Dann sollte man nur noch die Zeilen 4 bis 6 sehen.

    Sub Filter\_DatumZeit()
     Dim kr1$, kr2$
     kr1 = "\>=" & Replace(CDbl([E1]), ",", ".")
     kr2 = "Kannst du damit dein Problem lösen?
    (Vermutlich gehts auch einfacher, aber so funzt es schon mal.)
    Grüße aus Kamp-Lintfort
    Erich

Hallo Erich,
geniale Lösung, ich schaffte es nicht auf eine Lösung zu kommen.
Logo kann mna deine Lösung auch ohne Hilfszellen benutzen:

Sub test()
 Range("a1").AutoFilter Field:=1, \_
 Criteria1:="\>=" & Replace(CDbl(CDate("1.5.2005 16:00")), ",", "."), \_
 Operator:=xlAnd, \_
 Criteria2:="
Gruß
Reinhard

Hallo Erich und Reinhard,

habe eure Lösungen in EXCEL 97 unter Win98 probiert.

Leider mit Fehlermeldung: Prozedur oder Subroutine Replace nicht vorhanden.

Bin dann dann doch noch fündig geworden, wie es klappt. Hier eure Lösungen modifiziert für EXCEL 97:

Sub Filter\_DatumZeit()
 Dim kr1$, kr2$
 kr1 = "\>=" & Excel.WorksheetFunction.Substitute(CDbl([F1]), ",", ".")
 kr2 = "=" & Excel.WorksheetFunction.Substitute(CDbl(CDate("1.05.2005 16:00")), ",", "."), \_
 Operator:=xlAnd, \_
 Criteria2:="Die Krux liegt hier mal wieder in dem Übergang von Deutscher nach Englischer Version und der Tatsache, das VBA nur in Englisch ist.
Unter EXCEL 97 gilt folgendes:

VBA-Methode Replace ist nur auf Range-Objekte anwendbar und entspricht der Menüfunktion Suchen und Ersetzen.

Die Tabellenfunktion ERSETZEN entspricht der WorkSheetFunction REPLACE
Die Tabellenfunktion WECHSELN entspricht der WorkSheetFunction SUBSTITUTE

Hat halt ein wenig gedauert, bis ich dieses Puzzle aufgelöst hatte.

Gruß
Franz