Расширенный фильтр и немного магии
У подавляющего большинства пользователей Excel при слове «фильтрация данных» в голове всплывает только обычный классический фильтр с вкладки Данные — Фильтр (Data — Filter):
Такой фильтр — штука привычная, спору нет, и для большинства случаев вполне сойдет. Однако бывают ситуации, когда нужно проводить отбор по большому количеству сложных условий сразу по нескольким столбцам. Обычный фильтр тут не очень удобен и хочется чего-то помощнее. Таким инструментом может стать расширенный фильтр (advanced filter), особенно с небольшой «доработкой напильником» (по традиции).
Основа
Для начала вставьте над вашей таблицей с данными несколько пустых строк и скопируйте туда шапку таблицы — это будет диапазон с условиями (выделен для наглядности желтым):
Между желтыми ячейками и исходной таблицей обязательно должна быть хотя бы одна пустая строка.
Именно в желтые ячейки нужно ввести критерии (условия), по которым потом будет произведена фильтрация. Например, если нужно отобрать бананы в московский «Ашан» в III квартале, то условия будут выглядеть так:
Чтобы выполнить фильтрацию выделите любую ячейку диапазона с исходными данными, откройте вкладку Данные и нажмите кнопку Дополнительно (Data — Advanced). В открывшемся окне должен быть уже автоматически введен диапазон с данными и нам останется только указать диапазон условий, т.е. A1:I2:
Обратите внимание, что диапазон условий нельзя выделять «с запасом», т.е. нельзя выделять лишние пустые желтые строки, т.к. пустая ячейка в диапазоне условий воспринимается Excel как отсутствие критерия, а целая пустая строка — как просьба вывести все данные без разбора.
Переключатель Скопировать результат в другое место позволит фильтровать список не прямо тут же, на этом листе (как обычным фильтром), а выгрузить отобранные строки в другой диапазон, который тогда нужно будет указать в поле Поместить результат в диапазон. В данном случае мы эту функцию не используем, оставляем Фильтровать список на месте и жмем ОК. Отобранные строки отобразятся на листе:
Добавляем макрос
«Ну и где же тут удобство?» — спросите вы и будете правы. Мало того, что нужно руками вводить условия в желтые ячейки, так еще и открывать диалоговое окно, вводить туда диапазоны, жать ОК. Грустно, согласен! Но «все меняется, когда приходят они ©» — макросы!
Работу с расширенным фильтром можно в разы ускорить и упростить с помощью простого макроса, который будет автоматически запускать расширенный фильтр при вводе условий, т.е. изменении любой желтой ячейки. Щелкните правой кнопкой мыши по ярлычку текущего листа и выберите команду Исходный текст (Source Code). В открывшееся окно скопируйте и вставьте вот такой код:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A2:I5")) Is Nothing Then On Error Resume Next ActiveSheet.ShowAllData Range("A7").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion End If End Sub
Эта процедура будет автоматически запускаться при изменении любой ячейки на текущем листе. Если адрес измененной ячейки попадает в желтый диапазон (A2:I5), то данный макрос снимает все фильтры (если они были) и заново применяет расширенный фильтр к таблице исходных данных, начинающейся с А7, т.е. все будет фильтроваться мгновенно, сразу после ввода очередного условия:
Так все гораздо лучше, правда?
Реализация сложных запросов
Теперь, когда все фильтруется «на лету», можно немного углубиться в нюансы и разобрать механизмы более сложных запросов в расширенном фильтре. Помимо ввода точных совпадений, в диапазоне условий можно использовать различные символы подстановки (* и ?) и знаки математических неравенств для реализации приблизительного поиска. Регистр символов роли не играет. Для наглядности я свел все возможные варианты в таблицу:
Критерий | Результат |
гр* или гр | все ячейки начинающиеся с Гр, т.е. Груша, Грейпфрут, Гранат и т.д. |
=лук | все ячейки именно и только со словом Лук, т.е. точное совпадение |
*лив* или *лив | ячейки содержащие лив как подстроку, т.е. Оливки, Ливер, Залив и т.д. |
=п*в | слова начинающиеся с П и заканчивающиеся на В т.е. Павлов, Петров и т.д. |
а*с | слова начинающиеся с А и содержащие далее С, т.е. Апельсин, Ананас, Асаи и т.д. |
=*с | слова оканчивающиеся на С |
=???? | все ячейки с текстом из 4 символов (букв или цифр, включая пробелы) |
=м??????н | все ячейки с текстом из 8 символов, начинающиеся на М и заканчивающиеся на Н, т.е. Мандарин, Мангостин и т.д. |
=*н??а | все слова оканчивающиеся на А, где 4-я с конца буква Н, т.е. Брусника, Заноза и т.д. |
>=э | все слова, начинающиеся с Э, Ю или Я |
<>*о* | все слова, не содержащие букву О |
<>*вич | все слова, кроме заканчивающихся на вич (например, фильтр женщин по отчеству) |
= | все пустые ячейки |
<> | все непустые ячейки |
>=5000 | все ячейки со значением больше или равно 5000 |
5 или =5 | все ячейки со значением 5 |
>=3/18/2013 | все ячейки с датой позже 18 марта 2013 (включительно) |
Тонкие моменты:
- Знак * подразумевает под собой любое количество любых символов, а ? — один любой символ.
- Логика в обработке текстовых и числовых запросов немного разная. Так, например, ячейка условия с числом 5 не означает поиск всех чисел, начинающихся с пяти, но ячейка условия с буквой Б равносильна Б*, т.е. будет искать любой текст, начинающийся с буквы Б.
- Если текстовый запрос не начинается со знака =, то в конце можно мысленно ставить *.
- Даты надо вводить в штатовском формате месяц-день-год и через дробь (даже если у вас русский Excel и региональные настройки).
Логические связки И-ИЛИ
Условия записанные в разных ячейках, но в одной строке — считаются связанными между собой логическим оператором И (AND):
Т.е. фильтруй мне бананы именно в третьем квартале, именно по Москве и при этом из «Ашана».
Если нужно связать условия логическим оператором ИЛИ (OR), то их надо просто вводить в разные строки. Например, если нам нужно найти все заказы менеджера Волиной по московским персикам и все заказы по луку в третьем квартале по Самаре, то это можно задать в диапазоне условий следующим образом:
Если же нужно наложить два или более условий на один столбец, то можно просто продублировать заголовок столбца в диапазоне критериев и вписать под него второе, третье и т.д. условия. Вот так, например, можно отобрать все сделки с марта по май:
В общем и целом, после «доработки напильником» из расширенного фильтра выходит вполне себе приличный инструмент, местами не хуже классического автофильтра.
Ссылки по теме
- Суперфильтр на макросах
- Что такое макросы, куда и как вставлять код макросов на Visual Basic
- Умные таблицы в Microsoft Excel
Содержание
- Написание макросов для фильтров
- Именованный диапазон для условий
- Макро-рекордер — твой друг (или враг)
- Как сделать фильтр в сводной таблице макросом
- Решение № 1: Макрос VBA для фильтрации сводной таблицы по определенной дате или периоду
- Как работает макрос?
- Как насчет фильтрации двух сводных таблиц за разные периоды времени?
- Настройка: данные конвейера продаж CRM
- Как установить номер поля динамически
- Добавляем макрос фильтрации
- Метод автофильтрации
Написание макросов для фильтров
Фильтры являются отличным инструментом для анализа данных в Excel. Для большинства аналитиков и частых пользователей Excel фильтры являются частью нашей повседневной жизни. Мы используем раскрывающиеся меню фильтров для применения фильтров к отдельным столбцам в наборе данных. Это помогает нам связывать цифры с отчетами и проводить исследование наших данных.
Фильтрация также может быть трудоемким процессом. Особенно, когда мы применяем фильтры к нескольким столбцам на больших листах или фильтруем данные, чтобы затем копировать / вставлять их в другие листы или книги.
В этой статье объясняется, как создавать макросы для автоматизации процесса фильтрации. Это обширное руководство по методу автофильтра в VBA.
У меня также есть статьи с примерами для различных фильтров и типов данных, в том числе: пробелы, текст, числа, даты, цвета и значки, и очищающие фильтры.
Именованный диапазон для условий
Сначала надо создать именованный диапазон, куда мы будем вводить условия, и откуда макрос их будет брать. Для этого можно прямо над таблицей вставить пару-тройку пустых строк, затем выделить ячейки для будущих критериев (на рисунке это A2:F2) и дать им имя Условия, вписав его в поле имени в левом верхнем углу и нажав клавишу Enter. Для наглядности, я выделил эти ячейки желтым цветом:
Макро-рекордер — твой друг (или враг)
Мы можем легко получить код VBA для фильтров, включив макро-рекордер, а затем применив один или несколько фильтров к диапазону / таблице.
Вот шаги для создания макроса фильтра с помощью устройства записи макросов:
- Включите рекордер макросов:
- Вкладка «Разработчик»> «Запись макроса».
- Дайте макросу имя, выберите, где вы хотите сохранить код, и нажмите ОК.
- Примените один или несколько фильтров, используя раскрывающиеся меню фильтров.
- Остановите рекордер.
- Откройте редактор VB (вкладка «Разработчик»> Visual Basic) для просмотра кода.
Если вы уже использовали макрос-рекордер для этого процесса, то вы знаете, насколько он может быть полезен. Тем более, что наши критерии фильтрации становятся более сложными.
Код будет выглядеть примерно так:
Sub Filters_Macro_Recorder() ' ' Filters_Macro_Recorder Macro ' ' ActiveSheet.ListObjects("tblData").Range.AutoFilter Field:=4, Criteria1:= _ "Product 2" ActiveSheet.ListObjects("tblData").Range.AutoFilter Field:=4 ActiveSheet.ListObjects("tblData").Range.AutoFilter Field:=5, Criteria1:= _ ">=500", Operator:=xlAnd, Criteria2:="<=1000" End Sub
Мы видим, что каждая строка использует метод AutoFilter для применения фильтра к столбцу. Он также содержит информацию о критериях фильтра.
Мы видим, что каждая строка использует метод AutoFilter для применения фильтра к столбцу. Он также содержит информацию о критериях фильтра.
Как сделать фильтр в сводной таблице макросом
Чтобы получить данные для одного из 4-х магазинов фирмы, достаточно лишь открыть выпадающий список со всеми магазинами и выбрать один из них. Пример результата этих действий изображено на рисунке:
Изменение настроек, которые доступны в интерактивных инструментах сводной таблице доступны так же на уровне программирования макросов из редактора VBA. Выбор магазина, который является элементом поля СТРАИЦЫ реализуется с помощью свойства CurrentPage.
Просто как параметр для этого свойства следует указать название поля. Например, напишем простой код макроса, который сам выберет «Магазин3» как критерий для фильтрования данных по оборотам в сводной таблице:
SubMagazin3()
ActiveSheet.PivotTables("ТаблицаМ").PivotFields("Магазины").CurrentPage ="Магазин 3"
End Sub
Чтобы создать такой макрос сначала откройте редактор VisualBasic (ALT+F11), а потом создайте новый модуль в редакторе: «Insert»-«Module» и введете в него выше указанный VBA-код:
Результат действия этого простого макроса такой же как выше рисунке, но без использования пользователем интерактивных инструментов сводной таблицы.
В методе PivotTables указан аргумент «ТаблицаМ» – это всего лишь ссылка на внутренне имя, которое было присвоено для сводной таблицы еще на этапе ее создания. Читайте пример создания где он детально описан: Макрос для создания сводной таблицы в Excel. Далее рассмотрим, как можно скрывать часть данных из области видимости значений.
Решение № 1: Макрос VBA для фильтрации сводной таблицы по определенной дате или периоду
Мы можем использовать простой макрос, чтобы установить фильтр в сводной таблице для самой последней даты в таблице исходных данных. Фильтрация поля «Дата отчета» в сводной таблице также выберет отфильтрованный элемент в срезе и отфильтрует все связанные сводные диаграммы.
Приведенный ниже макрос может выглядеть как много кода, но на самом деле он очень прост. Чтобы его использовать, вам просто нужно будет указать все переменные для имени рабочего листа, имени сводной таблицы, имени сводного поля (Дата отчета) и критериев фильтрации (последняя дата). Эти переменные будут представлять имена объектов в вашей собственной книге.
Sub Filter_PivotField() ' Описание: фильтрация сводной таблицы или среза по определенной дате или периоду. Dim sSheetName As String Dim sPivotName As String Dim sFieldName As String Dim sFilterCrit As String Dim pi As PivotItem ' Установите переменные sSheetName = "Pivot" sPivotName = "PivotTable1" sFieldName = "Report Date" 'sFilterCrit = "5/2/2016" sFilterCrit = ThisWorkbook.Worksheets("Data").Range("G2").Value With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName) ' Очистить все фильтры основного поля .ClearAllFilters ' Проходить по элементам сводки поля сводки ' Скрыть или отфильтровать элементы, которые не соответствуют критериям For Each pi In .PivotItems If pi.Name <> sFilterCrit Then pi.Visible = False End If Next pi End With End Sub
Макрос в настоящее время настроен на использование значения из ячейки G2 в Таблице данных для критериев фильтра (самая поздняя дата). Ячейка G2 содержит формулу, которая возвращает самую последнюю дату из столбца с помощью функции MAX
Конечно, это можно изменить, чтобы вычислить самую последнюю дату в коде макроса. Хотя приятно видеть это на листе.
Как работает макрос?
Макрос сначала очищает все фильтры для поля сводки фильтра отчетов с помощью метода ClearAllFilters.
Затем он использует цикл For Next для циклического прохождения всех элементов сводки в поле сводки, чтобы применить фильтр. Каждый уникальный элемент в поле является основным элементом. Макрос проверяет, не соответствует ли имя элемента сводки (<>) критериям. Если нет, то он скрывает элемент или фильтрует его. В результате мы видим только критерии фильтра.
Как насчет фильтрации двух сводных таблиц за разные периоды времени?
Вот еще один пример с настройкой переменных в качестве параметров макроса. Это позволяет нам вызывать макрос из другого макроса.
Sub Filter_PivotField_Args( _ sSheetName As String, _ sPivotName As String, _ sFieldName As String, _ sFilterCrit As String) ' Фильтрация сводной таблицы или среза по определенной дате или периоду Dim pi As PivotItem With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName) ' Очистить все фильтры основного поля .ClearAllFilters ' Проходить по элементам сводки поля сводки ' Скрыть или отфильтровать элементы, которые не соответствуют критериям For Each pi In .PivotItems If pi.Name <> sFilterCrit Then pi.Visible = False End If Next pi End With End Sub
Sub Filter_Multiple_Pivots() ' Вызвать макрос Filter Pivot для нескольких пивотов Dim sFilter1 As String Dim sFilter2 As String ' Установите критерии фильтра sFilter1 = ThisWorkbook.Worksheets("Data").Range("G2").Value sFilter2 = ThisWorkbook.Worksheets("Data").Range("G3").Value ' Вызовите макрос сводных фильтров, чтобы отфильтровать оба сводных Call Filter_PivotField_Args("2 Pivots", "PivotTable1", "Report Date", sFilter1) Call Filter_PivotField_Args("2 Pivots", "PivotTable2", "Report Date", sFilter2) End Sub
В этом примере у нас есть лист с двумя сводными таблицами для сравнения неделя за неделей. Таким образом, нам нужно отфильтровать одну сводную таблицу для самой последней даты и одну для даты предыдущей недели.
Макрос Filter_Multiple_Pivots вызывает макрос Filter_PivotField_Args дважды. Обратите внимание, что имя сводной таблицы и значения критериев фильтрации различны для каждого вызова. Это простой способ многократно использовать макрос сводного поля фильтра без необходимости повторения большого количества кода.
Настройка: данные конвейера продаж CRM
В этом примере мы собираемся использовать данные о продажах. Таблица данных содержит еженедельные снимки или экспорт данных из системы CRM (Salesforces.com, Dynamics CRM, HubSpot и т.д.).
Для обновления данных мы экспортируем конвейерный отчет каждую неделю и вставляем данные в конец существующей таблицы. Есть и другие способы автоматизации этого процесса, но мы не будем вдаваться в подробности.
В наборе данных есть столбец «Дата отчета», в котором содержится дата запуска отчета для каждой строки. Вы можете видеть на изображении, что есть 4 набора данных, добавленных (сложенных) вместе, чтобы создать одну большую таблицу.
Сводная таблица показывает сводку доходов по этапам конвейера, а поле «Дата отчета» находится в области «Фильтры». Это позволяет нам фильтровать по любой дате отчета, чтобы увидеть сводную информацию о конвейере за эту неделю.
Когда новые данные добавляются в таблицу данных, мы хотим автоматически фильтровать все связанные сводные таблицы, диаграммы и срезы на последнюю дату отчета.
Как установить номер поля динамически
Если мы добавим / удалим / переместим столбцы в диапазоне фильтра, то номер поля для отфильтрованного столбца может измениться. Поэтому я стараюсь по возможности избегать жесткого кодирования числа для параметра Field.
Вместо этого мы можем использовать переменную и использовать некоторый код, чтобы найти номер столбца по его имени. Вот два примера для обычных диапазонов и таблиц.
Sub Dynamic_Field_Number() 'Методы, чтобы найти и установить поле на основе имени столбца. Dim lo As ListObject Dim iCol As Long 'Установить ссылку на первую таблицу на листе Set lo = Sheet1.ListObjects(1) 'Установить поле фильтра iCol = lo.ListColumns("Product").Index 'Использовать функцию соответствия для регулярных диапазонов 'iCol = WorksheetFunction.Match("Product", Sheet1.Range("B3:G3"), 0) 'Использовать переменную для значения параметра поля lo.Range.AutoFilter Field:=iCol, Criteria1:="Product 3" End Sub
Номер столбца будет найден при каждом запуске макроса. Нам не нужно беспокоиться об изменении номера поля при перемещении столбца. Это экономит время и предотвращает ошибки (беспроигрышный вариант)!
Добавляем макрос фильтрации
Теперь надо добавить к текущему листу макрос фильтрации по критериям из созданного диапазона Условия. Для этого щелкните правой кнопкой мыши по ярлычку листа и выберите команду Исходный текст (Source text). В открывшееся окно редактора Visual Basic надо скопировать и вставить текст вот такого макроса:
Private Sub Worksheet_Change(ByVal Target As Range) Dim FilterCol As Integer Dim FilterRange As Range Dim CondtitionString As Variant Dim Condition1 As String, Condition2 As String If Intersect(Target, Range("Условия")) Is Nothing Then Exit Sub On Error Resume Next Application.ScreenUpdating = False 'определяем диапазон данных списка Set FilterRange = Target.Parent.AutoFilter.Range 'считываем условия из всех измененных ячеек диапазона условий For Each cell In Target.Cells FilterCol = cell.Column - FilterRange.Columns(1).Column + 1 If IsEmpty(cell) Then Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol Else If InStr(1, UCase(cell.Value), " ИЛИ ") > 0 Then LogicOperator = xlOr ConditionArray = Split(UCase(cell.Value), " ИЛИ ") Else If InStr(1, UCase(cell.Value), " И ") > 0 Then LogicOperator = xlAnd ConditionArray = Split(UCase(cell.Value), " И ") Else ConditionArray = Array(cell.Text) End If End If 'формируем первое условие If Left(ConditionArray(0), 1) = "<" Or Left(ConditionArray(0), 1) = ">" Then Condition1 = ConditionArray(0) Else Condition1 = "=" & ConditionArray(0) End If 'формируем второе условие - если оно есть If UBound(ConditionArray) = 1 Then If Left(ConditionArray(1), 1) = "<" Or Left(ConditionArray(1), 1) = ">" Then Condition2 = ConditionArray(1) Else Condition2 = "=" & ConditionArray(1) End If End If 'включаем фильтрацию If UBound(ConditionArray) = 0 Then Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1 Else Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1, _ Operator:=LogicOperator, Criteria2:=Condition2 End If End If Next cell Set FilterRange = Nothing Application.ScreenUpdating = True End Sub
Все.
Теперь при вводе любых условий в желтые ячейки нашего именованного диапазона тут же будет срабатывать фильтрация, отображая только нужные нам строки и скрывая ненужные:
Как и в случае с классическими Автофильтром (Filter) и Расширенным фильтром (Advanced Filter), в нашем фильтре макросом можно смело использовать символы подстановки:
- * (звездочка) – заменяет любое количество любых символов
- ? (вопросительный знак) – заменяет один любой символ
и операторы логической связки:
- И – выполнение обоих условий
- ИЛИ – выполнение хотя бы одного из двух условий
и любые математические символы неравенства (>,<,=,>=,<=,<>).
При удалении содержимого ячеек желтого диапазона Условия автоматически снимается фильтрация с соответствующих столбцов.
Метод автофильтрации
Метод AutoFilter используется для очистки и применения фильтров к одному столбцу в диапазоне или таблице в VBA. Он автоматизирует процесс применения фильтров через выпадающие меню фильтров и делает, чтобы все работало.
Его можно использовать для применения фильтров к нескольким столбцам путем написания нескольких строк кода, по одной для каждого столбца. Мы также можем использовать Автофильтр, чтобы применить несколько критериев фильтрации к одному столбцу, так же, как в выпадающем меню фильтра, установив несколько флажков или указав диапазон дат.
Источники
- https://excelpedia.ru/makrosi-v-excel/macros-filters-autofilter-method
- https://www.planetaexcel.ru/techniques/3/137/
- https://exceltable.com/vba-macros/makrosy-filtra-svodnoy-tablicy
- https://excelpedia.ru/makrosi-v-excel/filtraciya-svodnoj-tablicy
Если требуется показать только данные, соответствующие определенному критерию или условию, необходимо воспользоваться такой функцией, как фильтр. Как же это сделать?
Содержание
- Стандартный метод
- Расширенный фильтр
- Основа
- Использование макроса расширенного фильтра
- Подробнее о сложных запросах
- Логические условия
- Функция «Фильтр»
- Выводы
Стандартный метод
Начнем с рассмотрения методики создания самого обычного фильтра, а потом научимся делать расширенный. Для начала нужно кликнуть по ячейке и нажать на кнопку «Фильтр», которая находится на вкладке «Данные».
После этого на заголовках покажутся стрелки.
В нашем случае нужно нажать на ту, которая находится возле обозначения страны.
Далее появится окно, в котором нам нужно убрать галочку возле пункта «Выделить все» и оставить только пункт «USA».
После нажатия на кнопку «ОК» список автоматически будет отфильтрован так, что будут отображаться только информация о продажах из Соединенных Штатов.
Далее нужно нажать стрелочку на следующей колонке «Quarter» и поставить галочку возле строки Qtr 4, убрав все остальные.
Ура, после этих нехитрых манипуляций будет отображаться только товары из США за четвертый квартал.
Если же требуется очистка данных, то на соответствующей вкладке нужно нажать на кнопку «Очистить». Если необходимо отключить работу фильтра, то для этого надо нажать по кнопке «Фильтр» повторно.
Расширенный фильтр
Стандартный фильтр – это вещь, которая используется очень часто. И она может использоваться для стандартных ситуаций. Но в некоторых случаях необходимо ориентироваться на большее количество критериев, одновременно учитывая огромное количество столбцов. И функциональности обычного фильтра здесь явно будет недостаточно. Обязательно появится желание использовать инструмент, имеющий большее количество возможностей.
Расширенный фильтр – это как раз пример такого инструмента. Особенно если его немного усовершенствовать.
Основа
Сперва добавьте в таблицу несколько новых строчек без информации в ячейках и сделайте сверху шапку таблицы. Это и будет диапазон, содержащий критерии для фильтра. Мы его выделили желтым цветом, чтобы сделать процесс более наглядным.
Между таблицей с критериями и основной таблицей необходимо вставить хотя бы одну пустую строчку. В желтую таблицу вставляются условия отбора данных. Например, если нам необходимо показать только бананы, которые продаются в московском Ашане и показать их продажи в III квартале, то таблица будет такой.
Чтобы отфильтровать данные, необходимо в диапазоне, который мы будем фильтровать, нажать на любую ячейку и открыть на ленте вкладку «Данные». Там вы увидите кнопку «Дополнительно». Если по ней нажать, появится окно, где уже будет указан правильный диапазон. Осталось только указать ячейки, в каких приводятся условия.
Важно! Нужно выделять исключительно те желтые строки, которые содержат условия. Дело в том, что все ячейки диапазона, где перечисляются критерии фильтрации, не содержащие никакой информации, читаются Excel, как команда показывать абсолютно всю информацию. Простыми словами, отменить фильтр.
С использованием кнопки «Скопировать результат в другое место» можно добиться того, чтобы фильтр отображал значения не прямо здесь, а в отдельном диапазоне. Если нам требуется это сделать, то для этого существует поле «Поместить результат в диапазон». В случае с нашим примером, эта функция использоваться не будет, поэтому мы просто нажимаем «ОК». Отфильтрованные строки мгновенно окажутся на листе.
Использование макроса расширенного фильтра
Большинство людей согласятся, что в стандартном виде расширенный фильтр – жутко неудобная штука. И да, это действительно так. Кроме того, что нужно создавать таблицу специально под условия, вручную туда вводить данные, а также открывать отдельное диалоговое окно и вводить туда диапазоны. Но если воспользоваться макросами, большинство операций можно автоматизировать.
Причем достаточно воспользоваться очень легки макросом, который запрограммирован на то, чтобы запускать расширенный фильтр при изменении любой ячейки диапазона условий. Согласитесь, что так значительно удобнее. Для этого необходимо вызвать контекстное меню ярлыка данного листа и кликнуть по пункту «Исходный текст». Далее появится окошко, где вставляете такой код.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(«A2:I5»)) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range(«A7»).CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range(«A1»).CurrentRegion
End If
End Sub
Естественно, нужно вставить наиболее подходящие в конкретной ситуации ячейки. Теперь всегда, когда любая ячейка будет изменяться, данная подпрограмма будет запускаться. Как только происходит редактирование ячейки, находящейся в диапазоне с условиями (в пустой ячейке, проще говоря), то все фильтры будут автоматически сняты, а также будет выставлен расширенный.
Все, больше никаких дополнительных действий совершать не нужно. Фильтр будет автоматически адаптироваться под любое совершаемое пользователем изменение.
Согласитесь, что теперь значительно удобнее.
Подробнее о сложных запросах
После того, как была реализована команда автоматически накладывать расширенный фильтр на таблицу, при малейшей коррекции условий, теперь можно разобраться, как вообще работают сложные условия в расширенном фильтре.
Кроме точных совпадений, человек в праве использовать дополнительные символы, некоторые из которых позволяют более гибко настраивать поиск. При этом нет разницы, какой регистр имеют символы. Чтобы было более понятно, вот таблица, детально описывающая все возможные условия.
Здесь нужно учитывать такие моменты:
- Символ * говорит о каком-угодно количестве символов, а ? – лишь одном.
- Числовые и текстовые запросы обрабатываются разным способом. Так, если условная ячейка, в которой указано число 5, указана пользователем, то это еще не означает, что фильтр будет искать все числа, которые начинаются с этой цифры. Но если в ней будет указана буква Б, то фильтр будет отбирать те данные, которые содержат текст, который начинается с нее. Простыми словами, если текст не начинается со знака =, то он эквивалентен такому, в конце которого находится символ *.
- Если используются даты, то они вводятся в таком формате, как в Соединенных Штатах. Сначала указывается месяц, потом день, а потом – год, а также элементы перечисления разделяются дробью. Это даже касается локализованного под Россию Экселя.
Логические условия
Огромное преимущество расширенного фильтра заключается в том, что можно использовать логические условия. Что это такое? Логическим условием называется такое условие, которое использует логический оператор И или ИЛИ. Конечно, есть и другие, но они описаны выше.
Характерная черта любой логической операции в том, что она возвращает условие «Истина» или «Ложь». В случае с расширенным фильтром, условие будет следующее: если определенное условие истинно.
То есть, логическое условие «И» фактически расшифровывается, как «если критерий 1 и критерий 2 соответствуют критерию 3». Например, если яблоки и морковь стоят одинаково, то. Или – аналогично, просто вместо «И» вставляется «Или». На практике это может выглядеть так. Если пользователи купили товары компании 1 или компании 2, то отобразить эти покупки. В таком случае при приобретении чего-то третьего, оно не отображается.
Фактически любой фильтр независимо от того, он простой или расширенный, содержит в себе логические условия. Но можно сделать их использование более гибким.
Итак, что нужно знать? Если условия находятся в одной строке, хотя и различных ячейках, то они считаются как те, которые соединены друг с другом логическим оператором «И».
В описываемом примере фильтр покажет только те бананы, которые были куплены в Московском Ашане в третьем квартале.
Если же необходимо, чтобы условия были связались с помощью логического оператора «ИЛИ», то необходимо их записывать в разных строках.
Например, в приведенном ниже примере фильтр будет учитывать только заказы менеджера Волиной как по персикам, купленным в Москве и луке, который продавался в третьем квартале в Самаре.
Если же нужно накладывать больше одного условия на один столбец, то, как вариант, можно просто продублировать заголовок столбца в диапазоне критериев и под ним написать последующие условия. например, так можно наложить фильтр таким образом, чтобы показывались все сделки, совершенные с марта по май.
Таким образом, если выполнять приведенные выше рекомендации, то расширенный фильтр уже не будет казаться настолько неудобным инструментом, а набор его функций будет очень обширным и фактически будет покрывать любую задачу, которую перед собой поставит пользователь.
Функция «Фильтр»
24 сентября 2018 года была представлена новая функция, которая также умеет фильтровать данные. Появилась она совместно с инновационным обновлением, которое добавило динамические массивы в Excel. Эта функция, аналогично шести остальным, доступна тем пользователям, которые пользуются последней версией Microsoft Office 365.
Фактически она призвана полностью заменить функционал расширенного фильтра в Excel, который требовал неких танцев с бубном, чтобы его можно было более-менее удобно использовать.
Синтаксис функции следующий.
=ФИЛЬТР(массив; включить; [если_пусто])
Разберем основные аргументы:
- Массив. Это диапазон (как представленный в виде ссылки, так и именованный), который будет использоваться для фильтрации данных.
- Включить. Это массив переменных, имеющих такую же ширину и высоту, как и массив. Простыми словами, это условия, при которых должны отображаться конкретные значения.
- Если_пусто. Это дополнительный аргумент, который задает значение, которое возвращается при обнаружении, что все значения включенного массива пустые.
Использовать можно те же логические операторы в качестве условий, которые приводились выше. При этом есть ряд особенностей в работе этой функции, которые нужно учитывать:
- Она задействует динамические массивы. Учитывая это, результат всегда будет касаться и смежных ячеек.
- Если необходимо задать фильтру несколько условий, необходимо использовать знак умножения во втором аргументе, а сами условия взять в скобки.
- Для использования оператора ИЛИ нужно использовать знак суммирования вместо знака умножения, а сами критерии также взять в скобки.
- Если окажется, что в ячейке, в которую будет возвращаться значение, уже есть какие-то значения, то появится ошибка #ПЕРЕНОС! Чтобы избавиться от нее, нужно очистить данные, содержащиеся в соответствующей ячейке.
Таким образом, тот сложный функционал расширенного фильтра можно реализовать с помощью одной простой функции Excel. Главное – немного потренироваться и иметь последнюю версию Microsoft Office.
Выводы
Таким образом, фильтрация данных в Excel позволяет среди большого массива данных найти те, которые нужны в конкретный момент времени. Например, если есть перечень товаров большого магазина, то можно отображать и анализировать исключительно шампуни или крема, а все остальные пункты временно спрятать. Если же нужно будет посмотреть, допустим, элитный французский алкоголь, то можно применить сразу несколько фильтров.
Мы разобрались, что нужно для того, чтобы применять фильтры к спискам, а также учитывать сразу большое количество сложных критериев для того, чтобы отображать только нужные данные.
А в современных версиях Excel есть еще и вариант расширенного фильтра, который выражен в одной просто формуле с очень простым синтаксисом, но при этом имеющей огромный функционал. И пользователь отныне может выбирать, какой из методов подходит лучше всего конкретно в его случае. Но естественно, профессиональный пользователь Excel будет мастерски владеть всеми тремя способами минимум для того, чтобы правильно читать чужие таблицы.
Оцените качество статьи. Нам важно ваше мнение:
Содержание
- Расширенный синтаксис фильтра
- Фильтрация данных на месте
- Сброс данных
- Фильтрация уникальных значений
- Использование аргумента CopyTo
- Удаление дубликатов из данных
В этом руководстве объясняется, как использовать метод расширенного фильтра в VBA.
Расширенная фильтрация в Excel очень полезна при работе с большими объемами данных, когда вы хотите применить несколько фильтров одновременно. Его также можно использовать для удаления дубликатов из ваших данных. Вы должны быть знакомы с созданием расширенного фильтра в Excel, прежде чем пытаться создать расширенный фильтр из VBA.
Рассмотрим следующий рабочий лист.
Вы можете сразу увидеть, что есть дубликаты, которые вы, возможно, захотите удалить. Тип счета представляет собой смесь сберегательного, срочного и чекового.
Сначала вам нужно настроить раздел критериев для расширенного фильтра. Сделать это можно на отдельном листе.
Для удобства я назвал свою таблицу данных «База данных», а таблицу критериев «Критерии».
Расширенный синтаксис фильтра
Expression.AdvancedFilter Action, CriteriaRange, CopyToRange, Unique
- В Выражение представляет объект диапазона — и может быть установлен как диапазон (например, Range («A1: A50»)) — или диапазон может быть назначен переменной, и эта переменная может использоваться.
- В Действие аргумент является обязательным и может иметь значение xlFilterInPlace или xlFilterCopy
- В Диапазон критериев аргумент — это то, откуда вы получаете критерии для фильтрации (наш лист критериев выше). Это необязательно, поскольку вам не понадобятся критерии, если вы, например, фильтруете уникальные значения.
- В CopyToRange Аргумент — это то место, куда вы собираетесь поместить результаты фильтра — вы можете фильтровать на месте или вы можете скопировать результат фильтра в альтернативное место. Это также необязательный аргумент.
- В Уникальный аргумент также является необязательным — Правда фильтровать только уникальные записи, Ложь — фильтровать все записи, соответствующие критериям — если вы его опустите, по умолчанию будет Ложь.
Фильтрация данных на месте
Используя критерии, указанные выше в таблице критериев, мы хотим найти все счета с типами «Сбережения» и «Текущие». Мы фильтруем на месте.
123456789 | Sub CreateAdvancedFilter ()Dim rngDatabase как диапазонDim rngCriteria As Range’определить базу данных и диапазоны критериевУстановите rngDatabase = Sheets («База данных»). Диапазон («A1: H50»)Установите rngCriteria = Sheets («Criteria»). Range («A1: H3»)’фильтровать базу данных по критериямrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaКонец подписки |
Код скроет строки, не соответствующие критериям.
В приведенной выше процедуре VBA мы не включили аргументы CopyToRange или Unique.
Сброс данных
Перед тем, как запустить другой фильтр, мы должны очистить текущий. Это будет работать, только если вы отфильтровали свои данные на месте.
12345 | Sub ClearFilter ()При ошибке Возобновить Далее’сбросить фильтр, чтобы показать все данныеActiveSheet.ShowAllDataКонец подписки |
Фильтрация уникальных значений
В приведенной ниже процедуре я включил аргумент Unique, но опустил аргумент CopyToRange. Если вы опустите этот аргумент, вы ИЛИ нужно поставить запятую в качестве заполнителя для аргумента
123456789 | Sub UniqueValuesFilter1 ()Dim rngDatabase как диапазонDim rngCriteria As Range’определить базу данных и диапазоны критериевУстановите rngDatabase = Sheets («База данных»). Диапазон («A1: H50»)Установите rngCriteria = Sheets («Criteria»). Range («A1: H3»)’фильтруем базу данных по критериямrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, ИстинаКонец подписки |
ИЛИ вам необходимо использовать именованные аргументы, как показано ниже.
123456789 | Sub UniqueValuesFilter2 ()Dim rngDatabase как диапазонDim rngCriteria As Range’определить базу данных и диапазоны критериевУстановите rngDatabase = Sheets («База данных»). Диапазон («A1: H50»)Установите rngCriteria = Sheets («Criteria»). Range («A1: H3»)’фильтруем базу данных по критериямrngDatabase.AdvancedFilter Действие: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueКонец подписки |
Оба приведенных выше примера кода будут запускать один и тот же фильтр, как показано ниже — данные только с уникальными значениями.
Использование аргумента CopyTo
123456789 | Sub CopyToFilter ()Dim rngDatabase как диапазонDim rngCriteria As Range’определить базу данных и диапазоны критериевУстановите rngDatabase = Sheets («База данных»). Диапазон («A1: H50»)Установите rngCriteria = Sheets («Criteria»). Range («A1: H3»)’скопировать отфильтрованные данные в альтернативное местоrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range («N1: U1»), Unique: = TrueКонец подписки |
Обратите внимание, что мы могли бы опустить имена аргументов в строке кода расширенного фильтра, но использование именованных аргументов делает код более легким для чтения и понимания.
Эта строка ниже идентична строке в процедуре, показанной выше.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range («N1: U1»), True |
После запуска кода исходные данные по-прежнему отображаются с отфильтрованными данными, отображаемыми в месте назначения, указанном в процедуре.
Удаление дубликатов из данных
Мы можем удалить дубликаты из данных, опустив аргумент Criteria и скопировав данные в новое место.
1234567 | Sub RemoveDuplicates ()Dim rngDatabase как диапазон’определить базу данныхУстановите rngDatabase = Sheets («База данных»). Диапазон («A1: H50»)’фильтровать базу данных по новому диапазону с уникальным значением truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range («N1: U1»), Unique: = TrueКонец подписки |
Вы поможете развитию сайта, поделившись страницей с друзьями
Содержание
- Что это такое
- Для чего это нужно
- Как работает
- С помощью диалогового окна «Расширенный фильтр»
- С помощью макроса
- Как добавить
- Как удалить
- Создаем диапазон условий
- Активируем фильтр
- Как задать несколько параметров
- Как поставить расширенный поиск
- Как удостовериться, поставлен ли фильтр
- Вывод
Что это такое
Расширенный фильтр в Excel это функция, производящая выборку данных по столбцам в таблице. Результат размещается на текущем листе.
Для чего это нужно
Расширенный фильтр в Эксель (Excel) используется, если производится отбор по двум и более критериям. Например, в таблице представлена информация об учениках в школе. Их рост, вес, пол. Как, выбрать данные про мальчиков восьмого класса, ростом метр восемьдесят? Используйте расширенный фильтр. Рассмотрим на похожем примере.
Как работает
Теперь давайте рассмотрим, как работает фильтр в Эксель. Для примера воспользуемся следующими данными. У нас есть три столбца: «Название продукта», «Категория» и «Цена», к ним будем применять различные фильтры.
Нажмите стрелочку в верхней ячейке нужного столбика. Здесь Вы увидите список неповторяющихся данных из всех ячеек, расположенных в данном столбце. Напротив каждого значения будут стоять галочки. Снимите галочки с тех значений, которые нужно исключить из списка.
Например, оставим в «Категории» только фрукты. Снимаем галочку в поле «овощ» и нажимаем «ОК».
Для тех столбцов таблицы, к которым применен фильтр, в верхней ячейке появится соответствующий значок.
С помощью диалогового окна «Расширенный фильтр»
С помощью диалогового окна «Расширенный фильтр»
Рассмотрим это на примере, нам нужно отобрать страны в мире где есть монархия. Для удобства и наглядной визуализации, скопируйте шапку таблицы немного выше, создайте несколько пустых строк. Обязательно между двумя таблицами должен быть разделитель – пустая строка. Теперь можем применить фильтр, согласно заданных условий.
Для начала выделяем любую из ячеек диапазона хранения ваших данных, на вкладке «Данные», нужно найти пункт «Дополнительно» и в открывшемся диалоговом окне «Расширенный фильтр» мы видим переключатель «Скопировать результат, в другое место» который позволяет вам перенести полученные данные в указанное место, но нам это пока не нужно. «Исходный диапазон» в диалоговом окне проставляется по умолчанию, а вот «Диапазон условий» вам нужно проставить вручную. Советую не спешить и указывать только заполненные строки с условием, так как пустая строка в диапазоне — это условие — «отобрать всё что есть». При подтверждении введенных условий в диалоговом окне «Расширенный фильтр» мы получаем указанный результат.
С помощью макроса
С помощью макроса
Как видите, расширенный фильтр в Excel позволил вам произвести отборку данных по указанным вами критериям, но удобства у такого способа немного, хотя его полезность и важность вы отрицать не будете. Выходом из создавшегося положения можно найти, используя в работе возможности макроса. Для улучшения эффективности работы вам нужно клацнуть на ярлыке вашего текущего листа правой кнопкой мышки и в контекстном окне выбрать пункт «Исходный текст» и в появившееся диалоговое окно ввести код:
Этот код будет автоматически, применятся при любом изменении полей и накладывать фильтр на ваши данные. Он просматривает диапазон (C2:I2) на наличие введенных данных и мгновенно применяет условия, к диапазону ваших данных, которые начинаются с ячейки (C5).
Кроме точно сформулированных условий, когда используется расширенный фильтр в Excel, можно также использовать знаки подстановки и замены, разнообразные математические знаки, которые позволят произвести приблизительный поиск или захватит диапазон данных.
Вот предоставлены варианты:
Условие |
Полученный результат |
=????? =в??а =*ф?я |
Отбор всех ячеек, где есть пять символов. (Например, Прага) Отбор текста на 4 знака, который начинается с «в» и заканчивается на «а» (Например, Вена) Отбор значений с тремя буквами в конце, одна из которых неизвестна (Например, София) |
=пр =п*р =*н =рим |
Отбор всех значений, которые начинаются с букв «пр» (Например, Прага) Отбор значений, которые начинаются с «п», содержат или заканчиваются на «р» (Например, Париж) Отбор значений, которые заканчиваются на «н» (Например, Берлин) Отбор точного совпадения (Например, Рим) |
= <> >=40 =20 >=р <>монарх* <=11/01/2016 |
Производится отбор всех пустых ячеек Производится отбор всех не пустых ячеек Отбор значений, которые равны или больше 40 Точный отбор значений, которые равны 20. Отбор всех значений, которые начинаются с «р» Отбор данных, которые содержат «монарх» Отсев дат до 1 ноября 2016 года. |
Как видите эти условия, позволят вам улучшить возможности поиска, а совместно с использованием макроса для расширенного фильтра, так и совсем станет все быстро, подробно и точно.
На этом я хочу закончить статью о том, как эффективно используется расширенный фильтр в Excel, как вы видите, это мощный и очень хороший инструмент для работы в вашими данными.
«
Как добавить
Если Вы оформляли информацию через вкладку «Вставка» – «Таблица», или вкладка «Главная» – «Форматировать как таблицу», то в ней возможность фильтрации будет включена по умолчанию. Отображается нужная кнопка в виде стрелочки, которая расположена в верхней ячейке с правой стороны.
Если Вы просто заполнили блоки данными, а затем отформатировали их в виде таблицы – фильтр нужно включить. Для этого выделите весь диапазон ячеек, включая строку с заголовками, так как нужная нам кнопочка будет добавлена в верхний рядок. А вот если выделить блоки начиная с ячейки с данными, то первый рядок не будет относиться к фильтруемой информации. Затем перейдите на вкладку «Данные» и нажмите кнопку «Фильтр».
В примере кнопка со стрелочкой находится в заголовках, и это правильно – будут фильтроваться все данные, расположенные ниже.
Если Вас интересует вопрос, как сделать таблицу в Эксель, перейдите по ссылке и прочтите статью по данной теме.
Как удалить
Если Вам нужно удалить фильтр данных в Excel, нажмите в ячейке на соответствующий значок и выберите из меню «Удалить фильтр с (название столбца)».
Отфильтровать информацию в Excel можно различными способами. Различают текстовые и числовые фильтры. Применяются они соответственно, если в ячейках столбца записан либо текст, либо числа.
Создаем диапазон условий
Например, есть таблица:
Для создания диапазона условий, сделайте дополнительную таблицу. Шапка такая же как у основной. Разместите ее в свободном месте на листе.
Оставьте пустую строку отделяющую новую таблицу от исходной.
Прописываем условия. Выберем данные с «Товар3», и где «Цена за 1 ед» равняется 10.
Активируем фильтр
Перейдите:
Активируйте пункт «Исходный диапазон». Добавьте туда основную таблицу, выделив ее мышкой.
Переместите курсор в «Диапазон условий». Отметьте шапку и строки с условиями.
Не отмечайте пустые строки.
Нажмите «ОК».
Мы рассмотрели, где находится расширенный фильтр в Excel. Предположим, что нужно отобразить данные, где стоимость товара больше 1 000 000. Как это сделать? В условиях пропишите:
Нажмите «ОК».
Чтобы сбросить фильтр перейдите:
Для активации этой функции в Excel 2010, выполните аналогичные действия.
Как задать несколько параметров
После того как информация отфильтрована по параметрам одного из столбцов, пользователь вправе продолжить отфильтровывать ее по остальным столбцам. Значений для отсева уже меньше, но результат станет более детальным.
Например, мы уже отфильтровали таблицу по условию «Страна» и оставили только товары российского происхождения.
Теперь необходимо дополнительно отделить товары стоимостью 100 рублей, для этого применяем отсев в разделе «Цена».
Нажимаем «Ок» и получаем только товары стоимостью 100 рублей, произведенные в России.
Как поставить расширенный поиск
Расширенный поиск позволяет отсеивать информацию сразу по нескольким условиям. Работая с ним, перед тем как поставить фильтр в таблице excel, необходимо подготовить саму таблицу — создать над ней поле из нескольких свободных строк и скопировать заголовки.
Затем в свободной строке под скопированными заголовками задать необходимые условия поиска. Например, необходимо найти товары, произведенные в России, проданные менеджером Ивановым, стоимостью менее 300 рублей.
После того как параметры корректно введены, необходимо снова открыть вкладку «Данные» и выбрать функцию «Дополнительно».
Перед пользователем появится окно, в котором ему предстоит заполнить две строки:
- «Исходный диапазон» — это диапазон таблицы, информация которой подлежит фильтрации, то есть исходной таблицы. Его эксель введет автоматически;
- «Диапазон условий» — это ячейки, из которых программа возьмет значения для отсева, — вторая таблица, которую мы создали сверху. Чтобы значения появились в строке окна, необходимо просто захватить две ее строки: с наименованием раздела и введенными значениями.
После того как оба диапазона сформированы, нажмите «Ок» и оцените результат.
Как удостовериться, поставлен ли фильтр
Чтобы узнать, установлен поиск данных или нет, необходимо взглянуть на строку с наименованием параметров — это первая строка. Если он есть, в каждой ячейке строки обнаружится небольшой значок.
Значком «1» обозначается столбец, в котором поиск установлен, но не применяется. Значком «2» обозначен уже примененный поиск.
Вывод
Мы рассмотрели, как работает функция расширенный фильтр в Excel. Используйте такую возможность. Сделайте работу удобнее.
Источники
- https://public-pc.com/rasshirennyj-filtr-v-excel/
- http://comp-profi.com/filtr-v-excel/
- http://topexcel.ru/kak-ispolzovat-rasshirennyj-filtr-v-excel/
- https://clubtk.ru/forms/deloproizvodstvo/kak-polzovatsya-filtrami-v-tablitsakh-excel
Расширенный фильтр, макросом. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
У подавляющего большинства пользователей Excel при слове «фильтрация данных» в голове всплывает только обычный классический фильтр с вкладки Данные — Фильтр (Data — Filter):
Такой фильтр — штука привычная, спору нет, и для большинства случаев вполне сойдет. Однако бывают ситуации, когда нужно проводить отбор по большому количеству сложных условий сразу по нескольким столбцам. Обычный фильтр тут не очень удобен и хочется чего-то помощнее. Таким инструментом может стать расширенный фильтр (advanced filter), особенно с небольшой «доработкой напильником» (по традиции).
Основа
Для начала вставьте над вашей таблицей с данными несколько пустых строк и скопируйте туда шапку таблицы — это будет диапазон с условиями (выделен для наглядности желтым):
Между желтыми ячейками и исходной таблицей обязательно должна быть хотя бы одна пустая строка.
Именно в желтые ячейки нужно ввести критерии (условия), по которым потом будет произведена фильтрация. Например, если нужно отобрать бананы в московский «Ашан» в III квартале, то условия будут выглядеть так:
Чтобы выполнить фильтрацию выделите любую ячейку диапазона с исходными данными, откройте вкладку Данные и нажмите кнопку Дополнительно (Data — Advanced). В открывшемся окне должен быть уже автоматически введен диапазон с данными и нам останется только указать диапазон условий, т.е. A1:I2:
Обратите внимание, что диапазон условий нельзя выделять «с запасом», т.е. нельзя выделять лишние пустые желтые строки, т.к. пустая ячейка в диапазоне условий воспринимается Excel как отсутствие критерия, а целая пустая строка — как просьба вывести все данные без разбора.
Переключатель Скопировать результат в другое место позволит фильтровать список не прямо тут же, на этом листе (как обычным фильтром), а выгрузить отобранные строки в другой диапазон, который тогда нужно будет указать в поле Поместить результат в диапазон. В данном случае мы эту функцию не используем, оставляем Фильтровать список на месте и жмем ОК. Отобранные строки отобразятся на листе:
Добавляем макрос
«Ну и где же тут удобство?» — спросите вы и будете правы. Мало того, что нужно руками вводить условия в желтые ячейки, так еще и открывать диалоговое окно, вводить туда диапазоны, жать ОК. Грустно, согласен! Но «все меняется, когда приходят они ©» — макросы!
Работу с расширенным фильтром можно в разы ускорить и упростить с помощью простого макроса, который будет автоматически запускать расширенный фильтр при вводе условий, т.е. изменении любой желтой ячейки. Щелкните правой кнопкой мыши по ярлычку текущего листа и выберите команду Исходный текст (Source Code). В открывшееся окно скопируйте и вставьте вот такой код:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:I5")) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range("A7").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
End If
End Sub
Эта процедура будет автоматически запускаться при изменении любой ячейки на текущем листе. Если адрес измененной ячейки попадает в желтый диапазон (A2:I5), то данный макрос снимает все фильтры (если они были) и заново применяет расширенный фильтр к таблице исходных данных, начинающейся с А7, т.е. все будет фильтроваться мгновенно, сразу после ввода очередного условия:
Так все гораздо лучше, правда?
Реализация сложных запросов
Теперь, когда все фильтруется «на лету», можно немного углубиться в нюансы и разобрать механизмы более сложных запросов в расширенном фильтре. Помимо ввода точных совпадений, в диапазоне условий можно использовать различные символы подстановки (* и ?) и знаки математических неравенств для реализации приблизительного поиска. Регистр символов роли не играет. Для наглядности я свел все возможные варианты в таблицу:
Критерий Результат
гр* или гр все ячейки начинающиеся с Гр, т.е. Груша, Грейпфрут, Гранат и т.д.
=лук все ячейки именно и только со словом Лук, т.е. точное совпадение
*лив* или *лив ячейки содержащие лив как подстроку, т.е. Оливки, Ливер, Залив и т.д.
=п*в слова начинающиеся с П и заканчивающиеся на В т.е. Павлов, Петров и т.д.
а*с слова начинающиеся с А и содержащие далее С, т.е. Апельсин, Ананас, Асаи и т.д.
=*с слова оканчивающиеся на С
=???? все ячейки с текстом из 4 символов (букв или цифр, включая пробелы)
=м??????н все ячейки с текстом из 8 символов, начинающиеся на М и заканчивающиеся на Н, т.е. Мандарин, Мангостин и т.д.
=*н??а все слова оканчивающиеся на А, где 4-я с конца буква Н, т.е. Брусника, Заноза и т.д.
>=э все слова, начинающиеся с Э, Ю или Я
<>*о* все слова, не содержащие букву О
<>*вич все слова, кроме заканчивающихся на вич (например, фильтр женщин по отчеству)
= все пустые ячейки
<> все непустые ячейки
>=5000 все ячейки со значением больше или равно 5000
5 или =5 все ячейки со значением 5
>=3/18/2013 все ячейки с датой позже 18 марта 2013 (включительно)
Тонкие моменты:
- Знак * подразумевает под собой любое количество любых символов, а ? — один любой символ.
- Логика в обработке текстовых и числовых запросов немного разная. Так, например, ячейка условия с числом 5 не означает поиск всех чисел, начинающихся с пяти, но ячейка условия с буквой Б равносильна Б*, т.е. будет искать любой текст, начинающийся с буквы Б.
- Если текстовый запрос не начинается со знака =, то в конце можно мысленно ставить *.
- Даты надо вводить в штатовском формате месяц-день-год и через дробь (даже если у вас русский Excel и региональные настройки).
Логические связки И-ИЛИ
Условия записанные в разных ячейках, но в одной строке — считаются связанными между собой логическим оператором И (AND):
Т.е. фильтруй мне бананы именно в третьем квартале, именно по Москве и при этом из «Ашана».
Если нужно связать условия логическим оператором ИЛИ (OR), то их надо просто вводить в разные строки. Например, если нам нужно найти все заказы менеджера Волиной по московским персикам и все заказы по луку в третьем квартале по Самаре, то это можно задать в диапазоне условий следующим образом:
Если же нужно наложить два или более условий на один столбец, то можно просто продублировать заголовок столбца в диапазоне критериев и вписать под него второе, третье и т.д. условия. Вот так, например, можно отобрать все сделки с марта по май:
В общем и целом, после «доработки напильником» из расширенного фильтра выходит вполне себе приличный инструмент, местами не хуже классического автофильтра.
Источник
New to Excel? Looking for a tip? How about a tip so mind-blowingly advanced as to qualify as a magic trick? You’re in luck. In this Excel tutorial from ExcelIsFun, the 185th installment in their series of digital spreadsheet magic tricks, you’ll learn how to to use Advanced Filter to extract records from a table with 1 criteria, then use a Macro to automate the process.
Want to master Microsoft Excel and take your work-from-home job prospects to the next level? Jump-start your career with our Premium A-to-Z Microsoft Excel Training Bundle from the new Gadget Hacks Shop and get lifetime access to more than 40 hours of Basic to Advanced instruction on functions, formula, tools, and more.
Buy Now (97% off) >
Other worthwhile deals to check out:
- 97% off The Ultimate 2021 White Hat Hacker Certification Bundle
- 98% off The 2021 Accounting Mastery Bootcamp Bundle
- 99% off The 2021 All-in-One Data Scientist Mega Bundle
- 59% off XSplit VCam: Lifetime Subscription (Windows)
- 98% off The 2021 Premium Learn To Code Certification Bundle
- 62% off MindMaster Mind Mapping Software: Perpetual License
- 41% off NetSpot Home Wi-Fi Analyzer: Lifetime Upgrades