Страницы: 1
RSS
как инвертировать условие фильтра???
 
Помогите написать макрос, который бы инвертировал бы значения фильтра в 2007 экселе.  
 
В таблице, в шапке установлены филтра, и например в А1 повыделяли "галочками" - мальчик1, мальчик2, мальчик3. Запускаем макрос, оп - галочки с выделенных ранее условий снимаются, а на ранее пустые мтановятся включенными. Это делать только для одной ячейки (нужна предварительная проверка на выделенный диапазон)  - этакая инверсия, то что было скрыто фильтром становится видемым, и наоборот.  
 
Бавает выделено много условий и тыкать курсором в 30 "галочек" запаристо.  
Вот пришла идея обратиться к макрсам, а тямы нехватает...
 
Запускаем макрос, оп - галочки снимаются
 
снять  - понятно..  
а вот как их поставить????
 
встать в нужную ячейку в столбце А  
ввести "а" (русскую, строчную)
 
для начала ознакомьтесь с объектом ActiveSheet.AutoFilter.Filters  
 
там хитрость - если условий меньше трех, то работает как в 2003м, т.е. criteria1, criteria2. А если больше, то  criteria1 превращается в массив..  
 
еще нужно уметь извлекать  из массива уникальные элементы..  
 
тогда все просто - идем по списку уникальных, добавляем их в критерий, если там такого еще нет, если есть, то убираем..
Живи и дай жить..
 
слэн,  
я вчера поковырялся с этим немного. Если условие представлено в виде criteria1, criteria2, его можно инвертировать в том же виде, например  
=a ИЛИ =b -> <>a И <>b  
>a И <=b -> <=a ИЛИ >b  
 
А со списком есть тонкость. Если на таблицу наложен фильтр только в одном столбце, это действительно работает - составить коллекцию (dictionary) уникальных, исключить из нее элементы из массива Criteria1, применить фильтр с  
Criteria1:=dictionary.keys.  
Но если на таблицу наложен фильтр в других столбцах, такой метод может давать "лишние" элементы, которые скрыты другими фильтрами. И в этом случае после применения фильтра ничего не отображается. Я на этом остановился вчера.  
Видимо, после сохранения массива Criteria1 надо снимать фильтр с этого столбца и составлять коллекцию из уникальных ВИДИМЫХ элементов, потом по этой же схеме.  
 
Да, еще для 2007 надо предусмотреть работу с автофильтрами в таблицах (Listobjects).  
Сейчас некогда, а задачка в общем интересная. Особенно при одновременной инверсии условия в нескольких столбцах ;)
 
значит уникальные нужно искать только в видимых ячейках - т.е. в этом столбце скопировать критерий,показать все. взять видимые, найти уникальные
Живи и дай жить..
 
не дочитал :) Вы уже все написАли
Живи и дай жить..
 
Вот с помощью ломика ...
Страницы: 1
Читают тему
Наверх