Страницы: 1
RSS
Фильтрация данных по части содержимого ячейки
 
Добрый день!  
 
Есть один столбец. Возможное значение ячеек: Апельсин, Апельбанан, Огурец.  
 
В выпадающим списке фильтра над таблицей имеем на выбор три варианта: Апель, Апельсин, Огурец.  
При выборе Апель должны скрываться строки с Огурцами, Апельсины и Апельбананы должны оставаться видимыми. При выборе Апельсина - оставаться только Апельсины. Аналогично с Огурцами.  
Пример во вложении.  
Буду чертовски благодарен за любую подсказку!
 
Данные - Фильтр - Автофильтр - Условие - Содержит: Апель
 
Большое спасибо за быстрый ответ! К сожалению, я не могу пользоваться автофильтром.  
Это значение должно присутствовать в выпадающем списке. Пользователь не должен заниматься настройками автофильтра.
 
А как вы предполагали организовать фильтрацию через выпадающий список? Все равно ж через обращение к AutoFilter? Ну так измените критерий в нем с "равно" на "содержит" и все.
 
может так (прикреплен файл) второй лист, 1 - есть, 0 -нету
 
Предложенный пример вообще не содержит обращения к автофильтру. Там просто условное скрытие строк.  
 
Причина отказа от автофильтра в слишком большом количестве условий : сортировка такая, этакая, все, первые 10 и так далее. Нужно очень компактное меню.
 
ВНИМАНИЕ!  
 
Нельзя использовать автофильтр в том его виде, в котором он применяется в Excel по умолчанию. Слишком много лишних опций.
 
{quote}{login=mws}{date=30.09.2011 02:51}{thema=}{post}Предложенный пример вообще не содержит обращения к автофильтру....{/post}{/quote}  
 
А чем Вам не нравится решение через 1 и 0?, по моему хоть зафильтруйся. Ну или я не понял вопроса
 
{quote}{login=urfin0000}{date=30.09.2011 02:51}{thema=}{post}может так (прикреплен файл) второй лист, 1 - есть, 0 -нету{/post}{/quote}  
 
Благодарю, мысль интересная :) Прикину, как можно извернуться, чтобы и автофильтр выбросить.
 
Большое Вам спасибо! Коммент к автофильтру к вам не относился :) Там действительно можно все сделать :) Пожалуй, пока стоит тему закрыть, нужно подумать, а не народ гонять :)    
 
Благодарю, urfin0000!
 
Если выпадающий, то придётся писать макрос скрытия/отображения строк.
 
2 Юрий М  
 
Собственно приведенный пример и написан на сокрытии строк. Или я что-то не понимаю?
 
опазадающий :)
Живи и дай жить..
 
Великолепно, то, что нужно! Спасибо, слэн!  
 
Тема закрыта, благодарю всех участников! :)
 
СЛЭН, очень красиво! вот действительное верное решение задачи именно той которая поставлена.  
А можно попросить код прокомментировать построчно, для обучающихся и любопытных (т.е. для мне) :)
 
Поддерживаю urfin0000!    
Решение действительно красивое. И действительно верное.    
 
Насчет комментариев - как посчитаете нужным. Мне это тоже будет очень полезно, но просить вас об этом не очень хочется :) И так сделали все, что нужно :)
 
нет нет! автора (Слэна) в студию! пусть отчитается перед октябрятской звездочкой как дошел до такой жизни! :) шутка конечно.  
если сочтут возможным - прокомментируют, а нет помрем дураками :)
 
Давай подумаем сами :)  
 
   If Target.Address <> [A2].Address Then Exit Sub
//забить, если пользователь ткнулся не в ячейку с выпадающим списком  
 
   Dim x As Range, y As Range: Application.ScreenUpdating = False: Rows.Hidden = False  
//раскрыть все строки, но без обновления экрана  
 
   Set y = Range([a4], Cells(Rows.Count, "B").End(xlUp))
   
//дальше применяем автофильтр по критерию мусор&целевой_текст&мусор  
  On Error Resume Next  
   y.AutoFilter  
   If Target = "Все" Then Exit Sub  
   DoEvents  
   y.AutoFilter Field:=2, Criteria1:="=*" & Target.Text & "*", Operator:=xlAnd  
 
Нигде не ошибся, как думаешь?  
 
Блин, веселый второй день изучения VBA :)
 
А у меня решение слэна косячит, если последовательно все фильтры перебираю, то на последнем вижу:  
 
2 Огурец  
5 Огурец  
8 Огурец  
11 Огурец  
12 Апельбанан  
 
Косяк вероятно тут:  
Set y = Range([a4], Cells(Rows.Count, "B").End(xlUp))
 
Спорить не буду, действительно косячит - но ведь у него никто рабочий код и не спрашивал. А принцип он показал хорошо.
 
Исправил так:  
 
   Dim cr&: cr = [a4].CurrentRegion.Rows.Count
   Set y = Range([a4], "B" & cr + 4)
 
Тут главное определмить строку, до которой нужно тянуть фильтр. Можно и иначе определять.
 
Спасибо, Hugo! Учту. Внес в проект :) Буду дальше разбираться! :)
Страницы: 1
Читают тему
Наверх