Как выделить диапазон созданный автофильтром?

Программирование на Visual Basic for Applications
vbaexcel
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 13.09.2007 (Чт) 11:43

Как выделить диапазон созданный автофильтром?

Сообщение vbaexcel » 13.09.2007 (Чт) 13:45

Здравствуйте.

Подскажите, плиз, как выделить диапазон, который получился после применения автофильтра?
Пример данных:
А1----------------В1----------------С1
Дата--------Наименование Количество
01.01.2007---Шланг----------------2
02.01.2007---Колодка-------------1
02.01.2007---РК---------------------5
05.01.2007---РК---------------------2
06.01.2007---Фильтр---------------1
07.01.2007---Шланг----------------3
09.01.2007---Колодка-------------2
12.01.2007---Шланг----------------4
15.01.2007---РК---------------------3

S1 = CStr(InputBox("Наименование:")) 'вводим наименование
Selection.AutoFilter Field:=2, Criteria1:=S1 'срабатывает автофильтр по введенному критерию "Наименование".

Повторю вопрос: как выделить диапазон данных, который получился после применения автофильтра, чтобы с ним дальше можно было работать?

Спасибо.

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 13.09.2007 (Чт) 14:22

Код: Выделить всё
    Set myFiltered = ActiveSheet.AutoFilter.Range.Offset(1, 0).Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1, _
       ActiveSheet.AutoFilter.Range.Columns.Count).SpecialCells(xlCellTypeVisible)
    myFiltered.Select
Всякое решение плодит новые проблемы.

vbaexcel
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 13.09.2007 (Чт) 11:43

Сообщение vbaexcel » 13.09.2007 (Чт) 15:08

Genyaa писал(а):
Код: Выделить всё
    Set myFiltered = ActiveSheet.AutoFilter.Range.Offset(1, 0).Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1, _
       ActiveSheet.AutoFilter.Range.Columns.Count).SpecialCells(xlCellTypeVisible)
    myFiltered.Select


Спасибо большое.
Не знал, что так все сложно и запутано (для меня :D ) с автофильтром. Думал, что будет достаточно:
Код: Выделить всё
AutoFilterRange.Rows.SpecialCells(xlCellTypeVisible).Select

Но это не работает.

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 13.09.2007 (Чт) 22:33

Ну, можно и проще, конечно... Но Вы сказали, что нужно выделить именно данные... в моем решении заголовки не выделяются. Для этого и пришлось делать две дополнительные манипуляции с областью автофильтра - Offset (чтобы сместить на одну строку вниз, освобождая заголовки от выделения) и Resize (чтобы не выделялась строка ниже области автофильтра после смещения).
Всякое решение плодит новые проблемы.

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 04.10.2007 (Чт) 9:39

А какой будет синтаксис, чтоб узнать количество видимых строк для расширенного фильтра... ?

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 05.10.2007 (Пт) 11:38

Код: Выделить всё
    Set myFiltered = ActiveSheet.AutoFilter.Range.Offset(1, 0).Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1, _
       ActiveSheet.AutoFilter.Range.Columns.Count).SpecialCells(xlCellTypeVisible)
    myFiltered.Select
    MsgBox "Выбрано " & myFiltered.Rows.Count & " строк данных в автофильтре"
Всякое решение плодит новые проблемы.

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 05.10.2007 (Пт) 13:02

А вы пробовали это для расширенного фильтра, или просто предполагаете, что должно работать ? Потому что у меня так не проходит... :-(
Тогда можно было бы просто написать:
RowCount=ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Count-1
Обращаю внимание, что
MsgBox "Выбрано " & myFiltered.Rows.Count & " строк данных в автофильтре"
не совсем корректно. Правильно было бы написать так:
Код: Выделить всё
MsgBox "Выбрано " & myFiltered.Rows.Count & " строк данных в автофильтре"


А вот как можно сделать другим способом, независимо от типа фильтра:
Код: Выделить всё
RowCount = Selection.SpecialCells(xlCellTypeVisible).Count
Вместо "Selection" можно подставить один из столбцов фильтруемого диапазона

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 05.10.2007 (Пт) 13:40

Однако, это всё не то, что я хотел.... Этот способ работает довольно медленно :-(
Если выделить столбец значений, то в строке состояний можно выбрать "Количество значений" и эксель моментально определяет сколько их (и при наложенном фильтре тоже). Вот как бы туда добраться, в строку состояний экселя... ;-)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 124

    TopList