Найти в Дзене
Doc

Программирование в Excel. Как отфильтровать таблицу Excel сразу по нескольким текстовым значениям

До того как я научился программировать на VBA я сталкивался с такой трудностью в работе с программой Excel - использование фильтра в большой таблице (несколько тысяч, а иногда и десятков тысяч строк), которая периодически обновлялась в смежной организации мне нужно было постоянно работать с несколькими группами показателей (получать от этих групп некоторые параметры, анализировать их - оценивать динамику их изменения и т.д и т.п.).

Так как обновленный файл каждый раз присылался по почте, то постоянно приходилось с помощью инструмента фильтр отбирать некоторое количество строк из этой большой таблицы, ну и конечно делать это все вручную.

Как это происходило?

У меня был список групп, в каждой из которых был определенный перечень (например бытовой техники)

В столбце "В" тип техники у нас есть следующие значения:

  • электрические стеклоочистители;
  • очистители и увлажнители воздуха;
  • вентиляторы;
  • пылесосы;
  • гладильные системы;
  • утюги;
  • парогенераторы;
  • пароочистители и отпариватели

И из этого перечня постоянно приходилось работать с несколькими комбинациями типов техники, например:

  • пылесосы и утюги;
  • вентиляторы и пылесосы.

В случае если типов техники немного, то это не представляет сложности. А если типов несколько сотен или комбинация состоит из нескольких десятков значений?

Вручную это возможно сделать с помощью стандартного инструмента

С помощью выделенных красным цветом инструментов можно добавлять в фильтр любое количество значений. Но это только в том случае, если этих значений несколько.
С помощью выделенных красным цветом инструментов можно добавлять в фильтр любое количество значений. Но это только в том случае, если этих значений несколько.

Но если вам нужно каждый день отбирать одни и те же значения в больших количествах, то это довольно утомительно. К тому же, если нужно срочно снять фильтр, то потом опять придется вручную набирать нужную комбинацию значения фильтра.

Для того чтобы кардинально облегчить эту работу, нам на помощь приходит вся мощь VBA. Предварительно на отдельный лист в этой или в любой другой книги необходимо вынести в столбцы значения, в нашем случае Типа техники.

У нас есть два листа: "диапазон" и "комбинации". На листе "комбинации" мы будем составлять комбинации текстов, по которым будем фильтровать таблицу на листе "диапазон"
У нас есть два листа: "диапазон" и "комбинации". На листе "комбинации" мы будем составлять комбинации текстов, по которым будем фильтровать таблицу на листе "диапазон"

Например

Мы будем использовать три комбинации типов техники
Мы будем использовать три комбинации типов техники

Алгоритм применения фильтра следующий:

1. Составляем комбинацию типов техники на листе "комбинации"

2. Выделяем нужную комбинацию (диапазон ячеек)

3. Нажимаем на специальную кнопку (создадим ее и выведем на панель быстрого доступа)

В итоге получаем отфильтрованную таблицу на листе "диапазон"

Переходим в редактор VBA (комбинация клавиш Alt+F11).

Первоначальное окно редактора VBA
Первоначальное окно редактора VBA

Добавляем новый "модуль"

Выбираем на вкладке "Insert" строку "Module"
Выбираем на вкладке "Insert" строку "Module"

Создаем процедуру. Для этого наберите текст 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:

Еще о фильтрах можно почитать в этих статьях:

Наука
7 млн интересуются