как в коде обраться к отфильтрованным данным?

Программирование на Visual Basic for Applications
starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

как в коде обраться к отфильтрованным данным?

Сообщение starkee » 22.01.2008 (Вт) 11:55

Помогите, пожалуйста!
Никак не могу понять, что делать. Мне нужно выбрать строки, 1ый столбец которых содержит слово.... ну допустим "мама"... делаю я это так
Код: Выделить всё
    Rows("9:9").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="=*мама*"

Вопрос:
как теперь мне перенести отфильтрованные данные в другую книгу?
Не знаю, правильно ли сформулировала вопрос.... :oops: Просто я никак не пойму, могу ли я после применения метода AutoFilter, получить, например, номера строк, которые попали под критерий фильтрации.... А то получается, что данные отфильтровались, а взять я их не могу... Может быть у ячейки или строки появляется какая-нибудь метка, что строка отфильтрована.... Помогите, пожалуйста!
А то такая простая операция, как отобрать данные по критерию, стала для меня неразрешимой :(

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 22.01.2008 (Вт) 12:17

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

oleg
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 07.02.2002 (Чт) 1:41

Сообщение oleg » 06.04.2008 (Вс) 5:17

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

а где здесь критерий фильтрации? нельзя ли рабочий код посмотреть?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 06.04.2008 (Вс) 13:58

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


1) Это можно записать несколько короче:
Код: Выделить всё
    With ActiveSheet.AutoFilter.Range
        Set myFiltered = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
   End With


2) Метод .Select - это зло с точки зрения быстродействия и в VBA из под Excel очень редко бывает нужен.

3) У проперти .SpecialCells есть серьезное ограничение: если результирующий диапазон состоит из более чем 8.170 несмежных областей, то .SpecialCells молча вернет исходный диапазон
Привет,
KL

VBA_Student
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 24.03.2008 (Пн) 19:35

Сообщение VBA_Student » 14.04.2008 (Пн) 15:01

У проперти .SpecialCells есть серьезное ограничение: если результирующий диапазон состоит из более чем 8.170 несмежных областей, то .SpecialCells молча вернет исходный диапазон


А 8.170=8170?
если да, то каким образом можно скопировать отфильрованные данные? Просто дело в том, что я тупо копирую весь непустой диапазон. Есть ли способ поделикатнее?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 14.04.2008 (Пн) 20:45

VBA_Student писал(а):А 8.170=8170?

Да. Правда, тут поправка - 8.192
VBA_Student писал(а):если да, то каким образом можно скопировать отфильрованные данные? Просто дело в том, что я тупо копирую весь непустой диапазон. Есть ли способ поделикатнее?

Не вижу связи между первым и вторым вопросом. К тому же способ, найденный тобой и впоследствии сокращенный мной выше, и есть наиболее быстрый и наименее ресурсоемкий.

Код: Выделить всё
   With ActiveSheet.AutoFilter.Range
        .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy Range("A1")
   End With


Для того, чтобы результирующий диапазон превысил 8.192 несмежных областей, нужно как минимум, чтобы исходный диапазон имел 16.385 строк и при этом каждая вторая строка была бы видимой. Это твой случай?
Привет,
KL


Вернуться в VBA

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

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

    TopList  
cron