Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Автофильтр ссылка на ячейку в диапазоне между датами

Автор Sergeypd, 02.08.2013, 16:25:36

« назад - далее »

Sergeypd

Добрый день! Уважаемые пользователи, не могли бы вы помочь в следующем вопросе:
У меня есть обширная форма на 35 тыс строк, я создаю для нее автофильтр, имеется код
Private Sub CommandButton2_Click()
ActiveSheet.Range("$B$2:$F$35940").AutoFilter Field:=1, Criteria1:= _
      ">=02.01.2013", Operator:=xlAnd, Criteria2:="<=06.01.2013"
End Sub

Вопрос как оптимизировать его, что бы можно было выбирать или в ячейках на листе даты, или с помощью календаря 12.0,

Пробовал вариант:
Private Sub CommandButton1_Click()
ActiveSheet.Range("$A$1:$A$14").AutoFilter Field:=1, Criteria1:= _
      ">=" & CLng(Range("C1").Value), Operator:=xlAnd, Criteria2:="<=" & _
         CLng(Range("D1").Value)
End Sub
Но в моей больной таблице, он не сработал.
Прилагаю пример такой таблицы в уменьшенном виде

ambasad

У Вас в столбце B даты написаны как текст, поэтому и не работает. Они так и будут текстом?

Sergeypd

Ну из исходника они идут текстом, но я думаю можно их спокойно поменять на дату
При коде
Private Sub CommandButton2_Click()
ActiveSheet.Range("$B$2:$F$35940").AutoFilter Field:=1, Criteria1:= _
      ">=01.01.2013", Operator:=xlAnd, Criteria2:="<=06.01.2013"
End Sub
Фильтр работает даже при таком форматировании, значит, дело в чем то еще, а в чем не могу понять(((

ambasad

CLng преобразует число к типу Long. При этом фильтровать Вы должны даты. Смотрите в сторону CStr

Дмитрий Щербаков(The_Prist)

Дело не в чем-то еще, а именно в этом. Во-первых привыкайте данные вводить в том виде, в котором их привык видеть Excel.
В H3 и H4 у Вас самые что ни на есть даты. А в столбце В - текст. Поэтому совпадения по фильтру никогда не будет. Приведите даты к виду дат и тогда Ваше выражение CLng(Range("D1").Value) сработает.
Советую почитать: Как Excel воспринимает данные?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Sergeypd

Понял, спасибо, за дополнительный материал, буду тогда разбираться, а сложно ли в макросе заставить Excel переводить и сравнивать даты или это слишком сложно и громоздко будет?

Дмитрий Щербаков(The_Prist)

Что значит переводить и сравнивать? Если бы это только критериев касалось - один вопрос. А здесь весь массив переводить необходимо. По сути тогда не автофильтр нужен, а цикл по ячейкам(или по массиву с данными этих ячеек). И уже в цикле все проверять и преобразовывать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Sergeypd

Понял, тогда не буду лезть в дебри, сделаю так, как Вы посоветовали, получилась фильтрация массива дат, буду разбираться далее, спасибо за подсказку

Яндекс.Метрика Рейтинг@Mail.ru