Страницы: 1
RSS
Работа фильтра по трём и более условиям одновременно
 
Добрый день знатокам!

Такая ситуация: есть столбец с энным количеством почтовых адресов. Есть задача найти/удалить некоторые из них. Для ускорения работы использую текстовый фильтр. Это позволяет найти/отобразить не более двух наборов адресов одновременно (выбираю, к примеру, "начинается с: Маркса ул., + "или" + начинается с: Энгельса). Но нужно ещё быстрее, т. к. адресов полно + такую операцию нужно произвести с кучей однотипных файлов (овер 50 шт.)

Не найдя фильтра, где можно было бы выбрать больше двух условий, решил записать макрос. В редакторе его "внутренности" выглядят так:
Код
ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:="=*37°*" _
        , Operator:=xlOr, Criteria2:="=тест*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Промышленная ул., 3,*", Operator:=xlOr, Criteria2:= _
        "=Промышленная ул., 3А,*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Полевая ул., 1,*", Operator:=xlOr, Criteria2:= _
        "=Полевая ул., 1А,*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Видова ул., 34,*", Operator:=xlOr, Criteria2:= _
        "=Видова ул., 36,*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Анапское ш., 2*", Operator:=xlOr, Criteria2:= _
        "=Анапское ш., 12,*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Анапское ш., 60*", Operator:=xlOr, Criteria2:= _
        "=Анапское ш., 62,*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Луначарского ул., 1,*", Operator:=xlOr, Criteria2:= _
        "=Луначарского ул., 2,*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Стрелковая ул., 7,*", Operator:=xlOr, Criteria2:= _
        "=Донская ул., 4,*"
    ActiveSheet.Range("$A$1:$F$55000").AutoFilter Field:=5, Criteria1:= _
        "=Донская ул., 4А,*", Operator:=xlOr, Criteria2:= _
        "=Кутузовская ул., 37,*"

Результатом его работы закономерно явилось поочерёдное отображение девяти пар наборов адресов с остановкой на отображении последней пары. А мне надо, чтобы в итоге остались отображёнными ВСЕ адреса. Что нужно подправить в коде?
Изменено: Михаил Михаил - 27.01.2022 18:03:55
 
Михаил Михаил,  Вы видели, как другие участники форума оформляют код? Вот и Вы оформляйте аналогично: для жтого есть кнопка <...>
 
Вам в соседнюю дверь.
Владимир
 
не видел, прошу извинить.

Цитата
написал: Вам в соседнюю  дверь .
Посмотрел, применил к своей задаче и.. Там не совсем то. А именно: используя операторы и/или (даже и со знаками подстановки "*" или "?"), мы можем отобразить в итоге всё равно максимум два набора значений. Мне нужно гораздо больше. Т. е.: вводишь набор адресов -

1. Промышленная ул., 3,
2. Промышленная ул., 3А,
3. Ленина ул.,
4. Полевая ул., 1,
5. Полевая ул., 1А,
...
...
...
...
...
- и в итоге отображаются все введённые адреса сразу.
 
Цитата
Михаил Михаил написал:
максимум два набора значений
Этого ограничения нет и в автофильтре (попробуйте при записи макроса выделить галочками несколько строк в окошке фильтра, выделите любые, просто верхние 3+, потом замените текст на нужный в коде).
А про расширенный фильтр вы что-то совсем странно поняли. Просто сделайте, как написано в статье.
Изменено: Xel - 27.01.2022 16:18:57
 
Сделал ровно так, как написано (файл прилагаю). Работает так: ввожу в соответствующем столбце диапазона "Условие" один адрес - Промышленная, 3, - и получаю выборку по Промышленной, 3. Но кроме этой самой Промышленной - у меня ещё куча адресов, которые надо отобразить для последующего удаления. Как только не пытался - не выходит каменный цветок.
Изменено: vikttur - 27.01.2022 17:40:28
 
Код
    ActiveSheet.Range("$A$4:$F$1932").AutoFilter Field:=5, Criteria1:=Array( "*ленин*",  "*челюс*"), Operator:=   xlFilterValues

Хм, он, похоже, подстановочные знаки и правда понимает только  на двух вариантах для критерия   8-0  На третьем творит что-то разнообразное, смотря, что добавишь (excel365)

В любом случае - сделайте по инструкции из сообщения #3, там точно работает, я проверяла. У вас в файле что-то совсем другое.
Изменено: Xel - 27.01.2022 18:11:03
 
Вопрос к автору темы: Вы точно читали ссылку из #3?
Изменено: sokol92 - 27.01.2022 18:06:28
Владимир
 
Сделано, по-моему, по приему  вот этому
Но это совсем не то место, куда посылали :oops:
Изменено: Xel - 27.01.2022 18:09:08
 
Цитата
написал:
Вопрос к автору темы: Вы точно читали ссылку из #3?
Прочёл ещё раз. Действительно, вы правы, нужное мне оказалось в самом конце. Сделал так, как там написано. Итог: по одному условию в столбце фильтр работает, по двум - снова нет. Такое впечатление (поправьте, если ошибаюсь), что фильтр по второму условию ищет в списке значений, отобранных по первому условию. И, вполне естественно - не находит и не отображает.  
 
Я не вижу в Вашем файле из #10 расширенного фильтра. Приложите файл с примененным расширенным фильтром и опишите, чем это не соответствует Вашим ожиданиям.

Расширенный фильтр работает по своим строкам условий.  Выбираются записи, удовлетворяющие всем условиям, которые есть в первой строке диапазона условий. Далее, к отобранным ранее записям добавляются записи, удовлятворяющие всем условиям второй строки условий фильтра и т.д.
Владимир
 
Расширенный фильтр находится в строке 2. Вводя значение "Промышленная" в ячейку E2, я действительно вижу отбор по этому значению в столбце E. Но если я, оставив в E2 значение "Промышленная", напишу в G2 или H2 или I2 или J2 значение, к примеру, "Гейдука" - ячейки в столбце E (от E5 и ниже) становятся пустыми.
 
Владимир, перечитал ваше сообщение #11, переделал всё заново и - заработало!!  Спасибо!
 
Михаил Михаил,  все условия перечисленные в одной строке обрабатываются по принципу AND, то есть все должны выполнится. При этом поле в критеии может как упоминатся несколько раз , так и не упоминатся вовсе.
Все условия перечисленные в нескольких строках критерия обрабатываются суммарно по принципу OR, то есть если выполнилось в одной из строк, то будет отражено в результате.
Изменено: БМВ - 28.01.2022 09:26:11
По вопросам из тем форума, личку не читаю.
 
Ещё раз - огромное спасибо всем ответившим! Моя работа ускорилась в разы.
Страницы: 1
Наверх