Автофильтр Excel не работает в столбце с датой и временем с кодом VBA

У меня возникают проблемы при одновременной фильтрации значений даты и времени с помощью VBA в MS Excel. Когда мне нужно отфильтровать только даты, я без проблем использую код ниже:

myRange.AutoFilter Field:=3, Criteria1:= _
    ">=" & CDbl(CDate((Date - 2))), Operator:=xlAnd, Criteria2:="<=" & CDbl(CDate((Date)))

Вопрос: как указать время при фильтрации? Пример: я хочу отфильтровать результаты со вчерашнего 19:00 до сегодняшнего 8:00.


person Bira    schedule 25.06.2014    source источник
comment
Вы можете добавить функцию TimeSerial() или TimeValue() к Date.   -  person Rory    schedule 25.06.2014


Ответы (2)


Рассмотреть возможность:

Sub DateTimeMaker()
    Dim d1 As Date, d2 As Date, MyRange As Range
    Dim crt1 As Double, crt2 As Double
    d1 = DateValue("6/24/2014") + TimeValue("19:00")
    d2 = DateValue("6/25/2014") + TimeValue("8:00")
    crt1 = CDbl(d1)
    crt2 = CDbl(d2)
    Set MyRange = Range("A1:C10")
    MyRange.AutoFilter Field:=3, Criteria1:=">=" & crt1, Operator:=xlAnd, Criteria2:="<=" & crt2
End Sub

РЕДАКТИРОВАНИЕ №1:

Чтобы даты «плавали», используйте:

Sub DateTimeMaker()
    Dim d1 As Date, d2 As Date, MyRange As Range
    Dim crt1 As Double, crt2 As Double
    d1 = Date - 1 + TimeValue("19:00")
    d2 = Date + TimeValue("8:00")
    crt1 = CDbl(d1)
    crt2 = CDbl(d2)
    Set MyRange = Range("A1:C10")
    MyRange.AutoFilter Field:=3, Criteria1:=">=" & crt1, Operator:=xlAnd, Criteria2:="<=" & crt2
End Sub
person Gary's Student    schedule 25.06.2014
comment
Спасибо за подсказку, @Gary, но я не работаю со статическими датами. Мне всегда нужно работать с диапазоном дат от 19:00 вчерашнего дня до 8:00 сегодняшнего дня. Какой синтаксис будет работать в этом случае? - person Bira; 25.06.2014
comment
это все еще не работает. Я не знаю, меняется ли он от версии Excel к версии, но я использую MS Excel 2010. - person Bira; 25.06.2014
comment
Какие у Вас симптомы?? - person Gary's Student; 25.06.2014
comment
Мои данные находятся в столбцах с A по C с реальной датой/временем в столбце C ...... ............убедитесь, что столбец C содержит реальные значения, а не текст. - person Gary's Student; 25.06.2014
comment
Ячейки должны были быть отформатированы как дд/мм/гггг чч:мм. Но даже изменение формата на реальную дату/время не сработало. Я не знаю, поможет ли эта информация, но настройки даты и времени на моем рабочем столе соответствуют бразильскому стандарту, поэтому я использую дд/мм/гггг чч:мм вместо мм/дд/гггг чч:мм. - person Bira; 25.06.2014
comment
Как выглядят типичные значения, если они отформатированы как Общие? - person Gary's Student; 25.06.2014
comment
Они показаны в виде числа. Пример: 25.06.2014 02:39 равно 41815,11042. - person Bira; 25.06.2014

Я нашел способ:

Sub DateTimeFilter()

    Dim d1, d2, m1, m2, y1, y2 As Integer

    Dim dt1, dt2 As String

    d1 = Day(Date - 1)
    d2 = Day(Date)
    m1 = Month(Date - 1)
    m2 = Month(Date)
    y1 = Year(Date - 1)
    y2 = Year(Date)

    dt1 = m1 & "/" & d1 & "/" & y1
    dt2 = m2 & "/" & d2 & "/" & y2

    ActiveSheet.Range("$A$3:$L$2012").AutoFilter Field:=3, Criteria1:= _
        ">=" & dt1 & " 19:00", Operator:=xlAnd, Criteria2:="<=" & dt2 & " 08:00"

End Sub
person Bira    schedule 26.06.2014