Страницы: 1
RSS
Фильтр по значению в ячейке (по дате)
 
Добрый день.
На форуме подсмотрел макрос, который по идее должен фильтровать значения по данным из ячейки Q1 (в этой ячейке дата), но почему-то не фильтрует (выдает пустой отфильтрованный список).

Код
Sub Фильтр_по_дате()

Dim d As Date
 d = ActiveSheet.Range("Q1" ;) .Value
 ActiveSheet.Range("$B$14:$N$200" ;) .AutoFilter Field:=2, _
 Criteria1:=d, Operator:=xlAnd
 
End Sub

Подскажите, в чем ошибка?
 
lis2109, а у меня отлично фильтрует.
Я сам - дурнее всякого примера! ...
 
Как же такое возможно?
Посмотрите, пожалуйста файл. Может там ошибка, которую я не вижу?
 
Так и возможно. Сразу надо было файл прикладывать. У Вас сообщений уже под сотню, пора освоиться с местными обычаями. За Вас примеры рисовать желающих мало.
Код
Sub Фильтр_по_дате2()
    ActiveSheet.Range("$A$1:$A$12").AutoFilter 1, CDate([Q1])
End Sub
Обратите внимание на формат ячеек.
Изменено: KuklP - 22.06.2013 16:39:25
Я сам - дурнее всякого примера! ...
 
может, Вы и в справке ничего не видите?
Цитата
When using AutoFilter with dates, the format should be consistent with English date separators ("/") instead of local settings ("."). A valid date would be "2/2/2007", whereas "2.2.2007" is invalid.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Ну или так:
Код
Sub Фильтр_по_дате2()
    Dim d As Date
    [$A$1:$A$12].AutoFilter
    d = [Q1]: [$A$1:$A$12].AutoFilter 1, d
End Sub
Я сам - дурнее всякого примера! ...
 
у меня (Excel 2010) на Вашем файле работает такой код (чуть подчищенный после макрорекодера):
Код
Sub Фильтр_по_дате2()
  Dim d As Date
  d = ActiveSheet.Range("Q1").Value
  ActiveSheet.Range("$A$1:$A$12").AutoFilter Field:=1, _
      Operator:=xlFilterValues, Criteria2:=Array(2, Format(d, "m\/d\/yyyy"))
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
KuklP, у меня видимо руки совсем кривые. Не первый ни второй вариант у меня не работают.
ikki, ваш макрос работает. Спасибо. И за справочную информацию также благодарю.
 
Да, я в 07 делал. В 10(для моего файла 1:
Код
Sub Фильтр_по_дате2()
    ActiveSheet.Range("$A$1:$A$12").AutoFilter
    ActiveSheet.Range("$A$1:$A$12").AutoFilter 1, CStr([Q1])
End Sub

и 2:
Код
Sub Фильтр_по_дате2()
    Dim d$
    [$A$1:$A$12].AutoFilter
    d = [Q1]: [$A$1:$A$12].AutoFilter 1, d
End Sub
Я сам - дурнее всякого примера! ...
 
Сашин вариант работает и в 7 и в 10. Ток там лишнего много :)
Код
Sub Фильтр_по_дате21()
    [$A$1:$A$12].AutoFilter
    [$A$1:$A$12].AutoFilter 1, Format([Q1], "m\/d\/yyyy")
End Sub
Я сам - дурнее всякого примера! ...
 
Цитата
KuklP пишет:  Ток там лишнего много
я бы согласился.
во-первых, записано макрорекодером.
во-вторых, используются параметры, применимые только в 2007/2010-м
в-третьих, как-то вообще странно фильтровать по одному значению, используя массив.

но.
ни один вариант кода Сергея у меня не работает. то есть, работает, конечно, только скрывает все строки.  :(  
я в растерянности.
то ли у меня Excel такой неправильный, то ли WinXP, то ли настройки языковых параметров, то ли всеобщий заговор тайных правителей мира таки действует...
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Саш, давай я у себя проверю - только что?
 
Юр, да стандартно всё вроде бы...
В виндовой панели управления, "региональные параметры" - стандартный вариант из списка - "Русский", без вских шаловливых ручек и доп.настроек, т.е. десятичный разделитель - запятая, краткий формат даты - dd.MM.yyyy, разделитель компонентов даты - точка.

В интерфейсе 2010-го Excel я пока ещё блуждаю, ибо на работе всё осталось по-прежнему, а до домашнего добраться удаётся нечасто.
Короче, я пока не нашёл, где там что меняется в параметрах в части разделителей, но по факту то же самое - запятая для чисел и точка для дат.

пс. Что-то мне смутно припоминается - обсуждали тему фильтра по дате. И, кажется, пришли к выводу, что единственный надёжный способ - накладывать пару условий - "больше или равно" и "меньше или равно". А одно условие "равно" работает ненадёжно. Но вот с причинами таких следствий - не помню, разобрались или нет...
Изменено: ikki - 22.06.2013 20:05:57
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Проверил файл Сергея (пост #6) - всё работает корректно. (ХР-32, 2007, кругом все паки). Региональные настройки умолчанием: Русский, разделители дата - точки, числа - запятая.
А по поводу дат я помню, что обсуждались проблемы не с фильтрами, а с Find. А может и с фильтрами было, но я не запомнил...
 
Саш, в этом файле тоже не работает?
Изменено: KuklP - 22.06.2013 20:52:18
Я сам - дурнее всякого примера! ...
 
в этом работает.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Всем доброй ночи.
Приходится возвращаться к этой теме.
В итоге получился такой макрос:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C13")) Is Nothing And Range("C13").Value <> "" Then
Dim d As Date
  d = ActiveSheet.Range("C13").Value
   ActiveSheet.Range("$A$14:$N$465").AutoFilter Field:=3, _
    Operator:=xlFilterValues, Criteria2:=Array(2, Format(d, "m\/d\/yyyy"))
End If
End Sub

Т.е. фильтр срабатывает при изменении ячейки C13.
Вопрос:
Как изменить код, чтобы при очистке ячейки С13 с помощью клавиши "Del" срабатывал макрос отмены фильтра?
Код
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
 
Код
 d = ActiveSheet.Range("C13").Value
if d="" then
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
exit sub
end if
Дальше все как и было.
Я сам - дурнее всякого примера! ...
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C13")) Is Nothing And Range("C13").Value <> "" Then
Dim d As Date
   d = ActiveSheet.Range("C13").Value
    If d = "" Then
      If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
       Exit Sub
    End If
   ActiveSheet.Range("$A$14:$N$465").AutoFilter Field:=3, _
    Operator:=xlFilterValues, Criteria2:=Array(2, Format(d, "m\/d\/yyyy"))
End If
End Sub


Я правильно соединил?
А то он мне желтым выделяет
   If d = "" Then
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("C13")) Is Nothing Then Exit Sub
    Dim d As Date
    d = ActiveSheet.Range("C13").Value
    If CLng(d) = 0 Then
        If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
        Exit Sub
    End If
    ActiveSheet.Range("$A$14:$N$465").AutoFilter Field:=3, _
    Operator:=xlFilterValues, Criteria2:=Array(2, Format(d, "m\/d\/yyyy"))
End Sub
Изменено: KuklP - 06.07.2013 12:26:50
Я сам - дурнее всякого примера! ...
 
Все заработало.
KuklP, спасибо.
 
Помогите.
записал макрорекордером
Код
'ActiveSheet.Range("$A$4:$M$38").AutoFilter Field:=1, Criteria1:=">=4 ноя", _
'        Operator:=xlAnd, Criteria2:="<=6 ноя"
пытаюсь внедрить

Код
iDate = ">=" & Format(Range("периодС"), "d mmm" )
iDate2 = "<=" & Format(Range("периодПО") , "d mmm" )

ActiveSheet.Range("$A$4:$M$38") .AutoFilter Field:=1, Criteria1:=iDate, _
        Operator:=xlAnd, Criteria2:=iDate2


все равно сворачивает весь фильтр
 
Попробуйте так
Criteria1:=">=" & CDbl( Format(Range("периодС"), "d mmm" ) )
Criteria2:="<=" & CDbl( Format(Range("периодПО") , "d mmm" ))
 
Kuzmich, не работает. пытался и так. Уточнение у меня 2010 excel/
Вот пример. Макрос в теле листа, реагирует на изменение периода
 
Приложите файл .xls
 
Исправил расширение
 
ActiveSheet.Range("$A$4:$M$38").AutoFilter Field:=1, Criteria1:=">=" & CDbl(Range("периодС")), _
Operator:=xlAnd, Criteria2:="<=" & CDbl(Range("периодПО"))
 
Люди Подскажите, мне нужно автофильтр по времени..
Например файл раз в час изменяется  и появляются ( из за условий формул пустые ячейки) моги ли я как то макросом применить фильтрацию по времени.
То есть  например в 12.30 у меня меняются цифры и что б с этим сбытием у меня фильтровало данные на пример пустых ячеек
 
Kuzmich, огромное спасибо!
Страницы: 1
Читают тему
Наверх