Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

фильтрация

464
19 мая 2003 года
WildAn
147 / / 19.05.2003
Драсьте. Проблема вот в чем. Есть книга, в которой два листа: на одном - список данных, на втором - критерии отбора. Необходимо выбрать из первого списка данные, удовлетворяющие второму списку. Второй список динамичен: может изменяться количество условий отбора. Поделитесь соображениями.
Заранее благодарен.
267
19 мая 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by WildAn
Драсьте. Проблема вот в чем. Есть книга, в которой два листа: на одном - список данных, на втором - критерии отбора. Необходимо выбрать из первого списка данные, удовлетворяющие второму списку. Второй список динамичен: может изменяться количество условий отбора. Поделитесь соображениями.
Заранее благодарен.



Воспользуйся расширенным фильтром (Advanced filter).

464
19 мая 2003 года
WildAn
147 / / 19.05.2003
Воспользуйся расширенным фильтром (Advanced filter).
положим я написал такое
ThisWorkbook.Worksheets("Лист1").Columns("L:L").Select
Selection.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=sheets("Лист2").Range("a1:a5), Unique:=False

А если у меня список на 2 листе постоянно меняться должен. Всегда в код лезть что-ли?
Пробовал писать CriteriaRange:=sheets("Лист2").range(cells(1,1),cells(5,1)), пишет run-time error 1004

Такая беда
267
19 мая 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by WildAn
Воспользуйся расширенным фильтром (Advanced filter).
положим я написал такое
ThisWorkbook.Worksheets("Лист1").Columns("L:L").Select
Selection.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=sheets("Лист2").Range("a1:a5), Unique:=False

А если у меня список на 2 листе постоянно меняться должен. Всегда в код лезть что-ли?
Пробовал писать CriteriaRange:=sheets("Лист2").range(cells(1,1),cells(5,1)), пишет run-time error 1004

Такая беда



Тут есть такая тонкость. Когда используешь range(cell1, cell2), эти самые cell1 и cell2 должны быть конкретными экселевскими ячейками.
cells(1,1) как известно возвращает ячейку A1 АКТИВНОГО листа. Поэтому если ты берешь range(cells(1,1),cells(5,1)) не на активном листе, возникает ошибка. Чтобы ее не было, синтаксис должен быть такой:
sheets("Лист2").range(sheets("Лист2").cells(1,1),sheets("Лист2").cells(5,1))

Это, конечно, ужасно неудобно, но такова жизнь.

464
19 мая 2003 года
WildAn
147 / / 19.05.2003
Огромная благодарность Все получилось
267
19 мая 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by WildAn
Огромная благодарность Все получилось



Кстати, в выражениях типа Range("A1:A5") в скобках может стоять любая допустимая строка. В твоем примере это может выглядеть, например, так:

CriteriaRange:=sheets("Лист2").Range("a1:a" & NumCrit)

(где NumCrit - переменная с номером последней строки в критериях)

Возможно, так твой код будет нагляднее.

1.3K
23 мая 2003 года
IKor
116 / / 04.12.2002
Цитата:
Originally posted by WildAn
Драсьте. Проблема вот в чем. Есть книга, в которой два листа: на одном - список данных, на втором - критерии отбора. Необходимо выбрать из первого списка данные, удовлетворяющие второму списку. Второй список динамичен: может изменяться количество условий отбора. Поделитесь соображениями.
Заранее благодарен.



Подобную задачу можно решить и не используя VBA. только при этом фильтрация будет производится не на самом списке данных, а рядом. Я бы использовал стандартные функции: ИНДЕКС, ПОИСКПОЗ и СМЕЩ. Кроме того, для наглядности выбора фильтра(ов) можно использовать "Ограничение вводимой в ячейку информаци.
Если тебе это еще нужно - можно попробоват прописать задачу детально.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог