До того как я научился программировать на VBA я сталкивался с такой трудностью в работе с программой Excel - использование фильтра в большой таблице (несколько тысяч, а иногда и десятков тысяч строк), которая периодически обновлялась в смежной организации мне нужно было постоянно работать с несколькими группами показателей (получать от этих групп некоторые параметры, анализировать их - оценивать динамику их изменения и т.д и т.п.).
Так как обновленный файл каждый раз присылался по почте, то постоянно приходилось с помощью инструмента фильтр отбирать некоторое количество строк из этой большой таблицы, ну и конечно делать это все вручную.
Как это происходило?
У меня был список групп, в каждой из которых был определенный перечень (например бытовой техники)
В столбце "В" тип техники у нас есть следующие значения:
- электрические стеклоочистители;
- очистители и увлажнители воздуха;
- вентиляторы;
- пылесосы;
- гладильные системы;
- утюги;
- парогенераторы;
- пароочистители и отпариватели
И из этого перечня постоянно приходилось работать с несколькими комбинациями типов техники, например:
- пылесосы и утюги;
- вентиляторы и пылесосы.
В случае если типов техники немного, то это не представляет сложности. А если типов несколько сотен или комбинация состоит из нескольких десятков значений?
Вручную это возможно сделать с помощью стандартного инструмента
Но если вам нужно каждый день отбирать одни и те же значения в больших количествах, то это довольно утомительно. К тому же, если нужно срочно снять фильтр, то потом опять придется вручную набирать нужную комбинацию значения фильтра.
Для того чтобы кардинально облегчить эту работу, нам на помощь приходит вся мощь VBA. Предварительно на отдельный лист в этой или в любой другой книги необходимо вынести в столбцы значения, в нашем случае Типа техники.
Например
Алгоритм применения фильтра следующий:
1. Составляем комбинацию типов техники на листе "комбинации"
2. Выделяем нужную комбинацию (диапазон ячеек)
3. Нажимаем на специальную кнопку (создадим ее и выведем на панель быстрого доступа)
В итоге получаем отфильтрованную таблицу на листе "диапазон"
Переходим в редактор VBA (комбинация клавиш Alt+F11).
Добавляем новый "модуль"
Создаем процедуру. Для этого наберите текст Sub фильтр_по_диапазону и нажмите на Enter. В результате получите:
Dim wsD As Worksheet
Dim sel As Range
Dim r As Range
Dim i As Integer
Dim x
Set wsD = ThisWorkbook.Worksheets("äèàïàçîí")
Set r = wsD.Cells(1, 1).CurrentRegion
Set sel = Selection
ReDim x(1 To sel.Cells.Count)
For i = 1 To UBound(x)
x(i) = sel.Cells(i, 1)
Next i
r.AutoFilter 2, Array(x), xlFilterValues
Теперь добавить нашу процедуру на панель быстрого доступа
Теперь достаточно выделить нужный диапазон на листе "комбинации" и нажимать на кнопку "фильтр_по_диапазону" и получать нужные комбинации строк.
Если статья вам понравилась, ставьте лайки и подписывайтесь на канал
PS:
Еще о фильтрах можно почитать в этих статьях:
- особенности применения фильтра + программирование расширенного фильтра