Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос многоуровневого фильтра - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Макрос многоуровневого фильтра
ReeZon Дата: Среда, 09.04.2014, 09:20 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Уважаемые эксперты Excel! Необходима Ваша помощь в написании макроса, который бы позволял накладывать фильтр по критерию на отфильтрованные данные по другим критериям.
Есть база данных с множеством критериев, которые приведены в БД. Фильтрация БД ведется из таблицы с 4-мя параметрами, которые выбираются посредством выпадающего списка (таблица "Поиск по параметрам")
Под каждый критерий прописан макрос с фильтром и элементом управления. При фильтрации данных по какому либо из критериев БД фильтруется заново.

Прошу Вашей помощи в написании макроса, который бы позволил фильтровать данные с учетом всех 4-х фильтров, приведенных в таблице "Поиск по параметрам", т. е. выбран 1-й параметр - фильтр, выбран 2-й параметр - фильтрация с учетом предыдущего фильтра, выбран 3-й параметр - фильтрация с учетом предыдущих двух фильтров и т.д.
 
Ответить
СообщениеУважаемые эксперты Excel! Необходима Ваша помощь в написании макроса, который бы позволял накладывать фильтр по критерию на отфильтрованные данные по другим критериям.
Есть база данных с множеством критериев, которые приведены в БД. Фильтрация БД ведется из таблицы с 4-мя параметрами, которые выбираются посредством выпадающего списка (таблица "Поиск по параметрам")
Под каждый критерий прописан макрос с фильтром и элементом управления. При фильтрации данных по какому либо из критериев БД фильтруется заново.

Прошу Вашей помощи в написании макроса, который бы позволил фильтровать данные с учетом всех 4-х фильтров, приведенных в таблице "Поиск по параметрам", т. е. выбран 1-й параметр - фильтр, выбран 2-й параметр - фильтрация с учетом предыдущего фильтра, выбран 3-й параметр - фильтрация с учетом предыдущих двух фильтров и т.д.

Автор - ReeZon
Дата добавления - 09.04.2014 в 09:20
ReeZon Дата: Среда, 09.04.2014, 09:21 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вот пример, в котором не могу заставить фильтры работать одновременно
К сообщению приложен файл: 6095678.xlsm (42.3 Kb)
 
Ответить
СообщениеВот пример, в котором не могу заставить фильтры работать одновременно

Автор - ReeZon
Дата добавления - 09.04.2014 в 09:21
Мурад Дата: Среда, 09.04.2014, 09:47 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
ReeZon, а настраиваемая сортировка никак не подойдет? ;)
Может надо пойти в данном случае простым путем?
 
Ответить
СообщениеReeZon, а настраиваемая сортировка никак не подойдет? ;)
Может надо пойти в данном случае простым путем?

Автор - Мурад
Дата добавления - 09.04.2014 в 09:47
ReeZon Дата: Среда, 09.04.2014, 09:53 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Дело в том, что я хочу полностью автоматизировать отбор данных и вывести элементы управления в верхнюю левую таблицу. Поэтому так усложнил себе задачу) Все фильтры работают по отдельности, но вместе я заставить их работать никак не могу) Прошу помощи!!!
 
Ответить
СообщениеДело в том, что я хочу полностью автоматизировать отбор данных и вывести элементы управления в верхнюю левую таблицу. Поэтому так усложнил себе задачу) Все фильтры работают по отдельности, но вместе я заставить их работать никак не могу) Прошу помощи!!!

Автор - ReeZon
Дата добавления - 09.04.2014 в 09:53
_Boroda_ Дата: Среда, 09.04.2014, 10:09 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16957
Репутация: 6631 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Для всех 4-х фильтров так:
[vba]
Код
Sub tt()
     Range("A15:K15").AutoFilter
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=7, Criteria1:=Range("H8")
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=9, Criteria1:=Range("H9")
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=8, Criteria1:=Range("H10")
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=6, Criteria1:=Range("H11")
End Sub
[/vba]
Для 2-х и 3-х самостоятельно разберетесь?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДля всех 4-х фильтров так:
[vba]
Код
Sub tt()
     Range("A15:K15").AutoFilter
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=7, Criteria1:=Range("H8")
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=9, Criteria1:=Range("H9")
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=8, Criteria1:=Range("H10")
     ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=6, Criteria1:=Range("H11")
End Sub
[/vba]
Для 2-х и 3-х самостоятельно разберетесь?

Автор - _Boroda_
Дата добавления - 09.04.2014 в 10:09
ReeZon Дата: Среда, 09.04.2014, 10:21 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Уважаемый Boroda! Попробовал вставить Ваш код в файл - ничего не поменялось... Не могли бы Вы в приложенном файле прописать данный код в нужном месте?

Самостоятельно пытался разобраться - не выходит. В любом случае спасибо Вам большое за помощь и оперативность в данном вопросе
 
Ответить
СообщениеУважаемый Boroda! Попробовал вставить Ваш код в файл - ничего не поменялось... Не могли бы Вы в приложенном файле прописать данный код в нужном месте?

Самостоятельно пытался разобраться - не выходит. В любом случае спасибо Вам большое за помощь и оперативность в данном вопросе

Автор - ReeZon
Дата добавления - 09.04.2014 в 10:21
ReeZon Дата: Среда, 09.04.2014, 10:27 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
На сколько я понимаю, что данный код работает на все 4 фильтра одновременно? А сделать так, чтобы постепенно вводить фильтрацию в БД как то можно?
 
Ответить
СообщениеНа сколько я понимаю, что данный код работает на все 4 фильтра одновременно? А сделать так, чтобы постепенно вводить фильтрацию в БД как то можно?

Автор - ReeZon
Дата добавления - 09.04.2014 в 10:27
ReeZon Дата: Среда, 09.04.2014, 10:40 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
С кодом разобрался - спасибо огромное!!! Но получается, что допустим если я хочу отфильтровать БД только по 3-му критерию и 1-му, то нужно прописывать отдельный элемент управления - т. е. фильтр на фильтр не накладывается, а просто БД фильтруется заново и зависит от последовательности действий. Получается чтобы учесть все возможные варианты фильтрации - нужно прописать 16 команд и дать им элементы управления...

Можно ли как то проще накладывать каждый новый фильтр на предыдущий фильтр? Без зависимости последовательности действий пользователя. Т. е. задан 1-й критерий - фильтр, затем задан 3-й критерий - фильтр данных, уже отфильтрованных по 1-му критерию и т. д.?
 
Ответить
СообщениеС кодом разобрался - спасибо огромное!!! Но получается, что допустим если я хочу отфильтровать БД только по 3-му критерию и 1-му, то нужно прописывать отдельный элемент управления - т. е. фильтр на фильтр не накладывается, а просто БД фильтруется заново и зависит от последовательности действий. Получается чтобы учесть все возможные варианты фильтрации - нужно прописать 16 команд и дать им элементы управления...

Можно ли как то проще накладывать каждый новый фильтр на предыдущий фильтр? Без зависимости последовательности действий пользователя. Т. е. задан 1-й критерий - фильтр, затем задан 3-й критерий - фильтр данных, уже отфильтрованных по 1-му критерию и т. д.?

Автор - ReeZon
Дата добавления - 09.04.2014 в 10:40
Мурад Дата: Среда, 09.04.2014, 11:03 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Тогда используйте коллекции.
Sub()
Цикл
Применение первого фильтра ко всем значениям, Коллекция1 = строки1
Если выбрано "Сбросить фильтр", тогда понятно
Если нет, то Применение второго фильтра к элементам Коллекции1 = строки2 (которые являются частью строки1)
и т.д.
Конец цикла
End Sub()
Как-то так наверное


Сообщение отредактировал Мурад - Среда, 09.04.2014, 11:03
 
Ответить
СообщениеТогда используйте коллекции.
Sub()
Цикл
Применение первого фильтра ко всем значениям, Коллекция1 = строки1
Если выбрано "Сбросить фильтр", тогда понятно
Если нет, то Применение второго фильтра к элементам Коллекции1 = строки2 (которые являются частью строки1)
и т.д.
Конец цикла
End Sub()
Как-то так наверное

Автор - Мурад
Дата добавления - 09.04.2014 в 11:03
_Boroda_ Дата: Среда, 09.04.2014, 11:44 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16957
Репутация: 6631 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
тогда так
[vba]
Код
Sub yy() 'установка фильтра
Range("A15:K15").AutoFilter
End Sub

Sub tt() 'работа с фильтром
'    ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=7, Criteria1:="*" & Range("H8") & "*"
      ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=9, Criteria1:="*" & Range("H9") & "*"
      ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=8, Criteria1:="*" & Range("H10") & "*"
'    ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=6, Criteria1:="*" & Range("H11") & "*"
End Sub

Sub nnn() 'установка фильтра в состояние "Нет фильтрации"
      ActiveSheet.ShowAllData
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениетогда так
[vba]
Код
Sub yy() 'установка фильтра
Range("A15:K15").AutoFilter
End Sub

Sub tt() 'работа с фильтром
'    ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=7, Criteria1:="*" & Range("H8") & "*"
      ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=9, Criteria1:="*" & Range("H9") & "*"
      ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=8, Criteria1:="*" & Range("H10") & "*"
'    ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=6, Criteria1:="*" & Range("H11") & "*"
End Sub

Sub nnn() 'установка фильтра в состояние "Нет фильтрации"
      ActiveSheet.ShowAllData
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 09.04.2014 в 11:44
ReeZon Дата: Среда, 09.04.2014, 12:30 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Уважаемый Boroda! По данному коду все равно идет отображение данных по нескольким фильтрам одновременно, а именно H8 и H11. Может есть еще варианты?
 
Ответить
СообщениеУважаемый Boroda! По данному коду все равно идет отображение данных по нескольким фильтрам одновременно, а именно H8 и H11. Может есть еще варианты?

Автор - ReeZon
Дата добавления - 09.04.2014 в 12:30
_Boroda_ Дата: Среда, 09.04.2014, 13:09 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16957
Репутация: 6631 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
По данному коду все равно идет отображение данных по нескольким фильтрам одновременно, а именно H8 и H11
Ну конечно. Это же не готовый код для Вашей кнопки, а информация к размышлению Вам. Самостоятельно подумать - не, никак, да?
Хорошо, подробнее:
на каждое условие в ячейках Н8:Н11 есть кнопка, в которой прописано
для Н8
[vba]
Код
Sub tt() 'работа с фильтром Н8
      ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=7, Criteria1:="*" & Range("H8") & "*"
End Sub
[/vba]
и рядом кнопка
[vba]
Код
Sub qq()
      ActiveSheet.Range("$A$15:$K$41").AutoFilter Field:=7
End Sub
[/vba]
снятия фильтра по ЭТОМУ столбцу
(эти 2 кода можно объединить и повесить на одну кнопку. Потренируйтесь самостоятельно, если желание появится)
Так для каждой ячейки из Н8:Н11
Ниже кнопка снятия всех фильтров (а не удаления, как у Вас)
[vba]
Код
Sub nnn() 'установка фильтра в состояние "Нет фильтрации"
      ActiveSheet.ShowAllData
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
По данному коду все равно идет отображение данных по нескольким фильтрам одновременно, а именно H8 и H11
Ну конечно. Это же не готовый код для Вашей кнопки, а информация к размышлению Вам. Самостоятельно подумать - не, никак, да?
Хорошо, подробнее:
на каждое условие в ячейках Н8:Н11 есть кнопка, в которой прописано
для Н8
[vba]
Код
Sub tt() 'работа с фильтром Н8
      ActiveSheet.Range("$A$15:$k$41").AutoFilter Field:=7, Criteria1:="*" & Range("H8") & "*"
End Sub
[/vba]
и рядом кнопка
[vba]
Код
Sub qq()
      ActiveSheet.Range("$A$15:$K$41").AutoFilter Field:=7
End Sub
[/vba]
снятия фильтра по ЭТОМУ столбцу
(эти 2 кода можно объединить и повесить на одну кнопку. Потренируйтесь самостоятельно, если желание появится)
Так для каждой ячейки из Н8:Н11
Ниже кнопка снятия всех фильтров (а не удаления, как у Вас)
[vba]
Код
Sub nnn() 'установка фильтра в состояние "Нет фильтрации"
      ActiveSheet.ShowAllData
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 09.04.2014 в 13:09
ReeZon Дата: Среда, 09.04.2014, 13:29 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо Вам большое за помощь, а также за своевременные и дельные советы. Дальше попробую сам)
 
Ответить
СообщениеСпасибо Вам большое за помощь, а также за своевременные и дельные советы. Дальше попробую сам)

Автор - ReeZon
Дата добавления - 09.04.2014 в 13:29
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!