Макрос для excel для расширенного фильтра

Расширенный фильтр и немного магии

У подавляющего большинства пользователей Excel при слове «фильтрация данных» в голове всплывает только обычный классический фильтр с вкладки Данные — Фильтр (Data — Filter):

advanced-filter1.png

Такой фильтр — штука привычная, спору нет, и для большинства случаев вполне сойдет. Однако бывают ситуации, когда нужно проводить отбор по большому количеству сложных условий сразу по нескольким столбцам. Обычный фильтр тут не очень удобен и хочется чего-то помощнее. Таким инструментом может стать расширенный фильтр (advanced filter), особенно с небольшой «доработкой напильником» (по традиции).

Основа

Для начала вставьте над вашей таблицей с данными несколько пустых строк и скопируйте туда шапку таблицы — это будет диапазон с условиями (выделен для наглядности желтым):

advanced-filter2.png

Между желтыми ячейками и исходной таблицей обязательно должна быть хотя бы одна пустая строка.

Именно в желтые ячейки нужно ввести критерии (условия), по которым потом будет произведена фильтрация. Например, если нужно отобрать бананы в московский «Ашан» в III квартале, то условия будут выглядеть так:

advanced-filter3.png

Чтобы выполнить фильтрацию выделите любую ячейку диапазона с исходными данными, откройте вкладку Данные и нажмите кнопку Дополнительно (Data — Advanced). В открывшемся окне должен быть уже автоматически введен диапазон с данными и нам останется только указать диапазон условий, т.е. A1:I2:

advanced-filter5.png

Обратите внимание, что диапазон условий нельзя выделять «с запасом», т.е. нельзя выделять лишние пустые желтые строки, т.к. пустая ячейка в диапазоне условий воспринимается Excel как отсутствие критерия, а целая пустая строка — как просьба вывести все данные без разбора.

Переключатель Скопировать результат в другое место позволит фильтровать список не прямо тут же, на этом листе (как обычным фильтром), а выгрузить отобранные строки в другой диапазон, который тогда нужно будет указать в поле Поместить результат в диапазон. В данном случае мы эту функцию не используем, оставляем Фильтровать список на месте и жмем ОК. Отобранные строки отобразятся на листе:

advanced-filter6.png

Добавляем макрос

«Ну и где же тут удобство?» — спросите вы и будете правы. Мало того, что нужно руками вводить условия в желтые ячейки, так еще и открывать диалоговое окно, вводить туда диапазоны, жать ОК. Грустно, согласен! Но «все меняется, когда приходят они ©» — макросы!

Работу с расширенным фильтром можно в разы ускорить и упростить с помощью простого макроса, который будет автоматически запускать расширенный фильтр при вводе условий, т.е. изменении любой желтой ячейки. Щелкните правой кнопкой мыши по ярлычку текущего листа и выберите команду Исходный текст (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, т.е. все будет фильтроваться мгновенно, сразу после ввода очередного условия:

advanced-filter-work.gif

Так все гораздо лучше, правда? :)

Реализация сложных запросов

Теперь, когда все фильтруется «на лету», можно немного углубиться в нюансы и разобрать механизмы более сложных запросов в расширенном фильтре. Помимо ввода точных совпадений, в диапазоне условий можно использовать различные символы подстановки (* и ?) и знаки математических неравенств для реализации приблизительного поиска. Регистр символов роли не играет. Для наглядности я свел все возможные варианты в таблицу:

Критерий Результат
гр* или гр все ячейки начинающиеся с Гр, т.е. Груша, Грейпфрут, Гранат и т.д.
=лук все ячейки именно и только со словом Лук, т.е. точное совпадение
*лив* или *лив ячейки содержащие лив как подстроку, т.е. Оливки, Ливер, Залив и т.д.
=п*в слова начинающиеся с П и заканчивающиеся на В т.е. Павлов, Петров и т.д.
а*с слова начинающиеся с А и содержащие далее С, т.е. Апельсин, Ананас, Асаи и т.д.
=*с слова оканчивающиеся на С
=???? все ячейки с текстом из 4 символов (букв или цифр, включая пробелы)
=м??????н все ячейки с текстом из 8 символов, начинающиеся на М и заканчивающиеся на Н, т.е. Мандарин, Мангостин  и т.д.
=*н??а все слова оканчивающиеся на А, где 4-я с конца буква Н, т.е. Брусника, Заноза и т.д.
>=э все слова, начинающиеся с Э, Ю или Я
<>*о* все слова, не содержащие букву О
<>*вич все слова, кроме заканчивающихся на вич (например, фильтр женщин по отчеству)
= все пустые ячейки
<> все непустые ячейки
>=5000 все ячейки со значением больше или равно 5000
5 или =5 все ячейки со значением 5
>=3/18/2013 все ячейки с датой позже 18 марта 2013 (включительно)

Тонкие моменты:

  • Знак * подразумевает под собой любое количество любых символов, а ? — один любой символ.
  • Логика в обработке текстовых и числовых запросов немного разная. Так, например, ячейка условия с числом 5 не означает поиск всех чисел, начинающихся с пяти, но ячейка условия с буквой Б равносильна Б*, т.е. будет искать любой текст, начинающийся с буквы Б.
  • Если текстовый запрос не начинается со знака =, то в конце можно мысленно ставить *.
  • Даты надо вводить в штатовском формате месяц-день-год и через дробь (даже если у вас русский Excel и региональные настройки).

Логические связки И-ИЛИ

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

advanced-filter3.png

Т.е. фильтруй мне бананы именно в третьем квартале, именно по Москве и при этом из «Ашана».

Если нужно связать условия логическим оператором ИЛИ (OR), то их надо просто вводить в разные строки. Например, если нам нужно найти все заказы менеджера Волиной по московским персикам и все заказы по луку в третьем квартале по Самаре, то это можно задать в диапазоне условий следующим образом:

advanced-filter7.png

Если же нужно наложить два или более условий на один столбец, то можно просто продублировать заголовок столбца в диапазоне критериев и вписать под него второе, третье и т.д. условия. Вот так, например, можно отобрать все сделки с марта по май:

advanced-filter8.png

В общем и целом, после «доработки напильником» из расширенного фильтра выходит вполне себе приличный инструмент, местами не хуже классического автофильтра.

Ссылки по теме

  • Суперфильтр на макросах
  • Что такое макросы, куда и как вставлять код макросов на Visual Basic
  • Умные таблицы в Microsoft Excel

Содержание

  1. Написание макросов для фильтров
  2. Именованный диапазон для условий
  3. Макро-рекордер — твой друг (или враг)
  4. Как сделать фильтр в сводной таблице макросом
  5. Решение № 1: Макрос VBA для фильтрации сводной таблицы по определенной дате или периоду
  6. Как работает макрос?
  7. Как насчет фильтрации двух сводных таблиц за разные периоды времени?
  8. Настройка: данные конвейера продаж CRM
  9. Как установить номер поля динамически
  10. Добавляем макрос фильтрации
  11. Метод автофильтрации

Написание макросов для фильтров

Фильтры являются отличным инструментом для анализа данных в Excel. Для большинства аналитиков и частых пользователей Excel фильтры являются частью нашей повседневной жизни. Мы используем раскрывающиеся меню фильтров для применения фильтров к отдельным столбцам в наборе данных. Это помогает нам связывать цифры с отчетами и проводить исследование наших данных.

Фильтрация также может быть трудоемким процессом. Особенно, когда мы применяем фильтры к нескольким столбцам на больших листах или фильтруем данные, чтобы затем копировать / вставлять их в другие листы или книги.

В этой статье объясняется, как создавать макросы для автоматизации процесса фильтрации. Это обширное руководство по методу автофильтра в VBA.

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

Именованный диапазон для условий

Сначала надо создать именованный диапазон, куда мы будем вводить условия, и откуда макрос их будет брать. Для этого можно прямо над таблицей вставить пару-тройку пустых строк, затем выделить ячейки для будущих критериев (на рисунке это A2:F2) и дать им имя Условия, вписав его в поле имени в левом верхнем углу и нажав клавишу Enter. Для наглядности, я выделил эти ячейки желтым цветом:

Макро-рекордер — твой друг (или враг)

Мы можем легко получить код VBA для фильтров, включив макро-рекордер, а затем применив один или несколько фильтров к диапазону / таблице.

Вот шаги для создания макроса фильтра с помощью устройства записи макросов:

  1. Включите рекордер макросов:
    1. Вкладка «Разработчик»> «Запись макроса».
    2. Дайте макросу имя, выберите, где вы хотите сохранить код, и нажмите ОК.
  2. Примените один или несколько фильтров, используя раскрывающиеся меню фильтров.
  3. Остановите рекордер.
  4. Откройте редактор 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

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

Содержание

  1. Стандартный метод
  2. Расширенный фильтр
  3. Основа
  4. Использование макроса расширенного фильтра
  5. Подробнее о сложных запросах
  6. Логические условия
  7. Функция «Фильтр»
  8. Выводы

Стандартный метод

Начнем с рассмотрения методики создания самого обычного фильтра, а потом научимся делать расширенный. Для начала нужно кликнуть по ячейке и нажать на кнопку «Фильтр», которая находится на вкладке «Данные». 

Как сделать фильтр в Excel

1

После этого на заголовках покажутся стрелки. 

Как сделать фильтр в Excel

2

В нашем случае нужно нажать на ту, которая находится возле обозначения страны.

Далее появится окно, в котором нам нужно убрать галочку возле пункта «Выделить все» и оставить только пункт «USA». 

Как сделать фильтр в Excel

3

После нажатия на кнопку «ОК» список автоматически будет отфильтрован так, что будут отображаться только информация о продажах из Соединенных Штатов.

Как сделать фильтр в Excel

4

Далее нужно нажать стрелочку на следующей колонке «Quarter» и поставить галочку возле строки Qtr 4, убрав все остальные.

Как сделать фильтр в Excel

5

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

Как сделать фильтр в Excel

6

Если же требуется очистка данных, то на соответствующей вкладке нужно нажать на кнопку «Очистить». Если необходимо отключить работу фильтра, то для этого надо нажать по кнопке «Фильтр» повторно.

Расширенный фильтр

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

Расширенный фильтр – это как раз пример такого инструмента. Особенно если его немного усовершенствовать.

Основа

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

Как сделать фильтр в Excel

7

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

Как сделать фильтр в Excel

8

Чтобы отфильтровать данные, необходимо в диапазоне, который мы будем фильтровать, нажать на любую ячейку и открыть на ленте вкладку «Данные». Там вы увидите кнопку «Дополнительно». Если по ней нажать, появится окно, где уже будет указан правильный диапазон. Осталось только указать ячейки, в каких приводятся условия. 

Как сделать фильтр в Excel

9

Важно! Нужно выделять исключительно те желтые строки, которые содержат условия. Дело в том, что все ячейки диапазона, где перечисляются критерии фильтрации, не содержащие никакой информации, читаются Excel, как команда показывать абсолютно всю информацию. Простыми словами, отменить фильтр.

С использованием кнопки «Скопировать результат в другое место» можно добиться того, чтобы фильтр отображал значения не прямо здесь, а в отдельном диапазоне. Если нам требуется это сделать, то для этого существует поле «Поместить результат в диапазон». В случае с нашим примером, эта функция использоваться не будет, поэтому мы просто нажимаем «ОК». Отфильтрованные строки мгновенно окажутся на листе.

Как сделать фильтр в Excel

10

Использование макроса расширенного фильтра

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

Причем достаточно воспользоваться очень легки макросом, который запрограммирован на то, чтобы запускать расширенный фильтр при изменении любой ячейки диапазона условий. Согласитесь, что так значительно удобнее. Для этого необходимо вызвать контекстное меню ярлыка данного листа и кликнуть по пункту «Исходный текст». Далее появится окошко, где вставляете такой код.

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

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

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

Как сделать фильтр в Excel

11

Согласитесь, что теперь значительно удобнее.

Подробнее о сложных запросах

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

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

Как сделать фильтр в Excel

12

Здесь нужно учитывать такие моменты:

  1. Символ * говорит о каком-угодно количестве символов, а ? – лишь одном.
  2. Числовые и текстовые запросы обрабатываются разным способом. Так, если условная ячейка, в которой указано число 5, указана пользователем, то это еще не означает, что фильтр будет искать все числа, которые начинаются с этой цифры. Но если в ней будет указана буква Б, то фильтр будет отбирать те данные, которые содержат текст, который начинается с нее. Простыми словами, если текст не начинается со знака =, то он эквивалентен такому, в конце которого находится символ *.
  3. Если используются даты, то они вводятся в таком формате, как в Соединенных Штатах. Сначала указывается месяц, потом день, а потом – год, а также элементы перечисления разделяются дробью. Это даже касается локализованного под Россию Экселя.

Логические условия

Огромное преимущество расширенного фильтра заключается в том, что можно использовать логические условия. Что это такое? Логическим условием называется такое условие, которое использует логический оператор И или ИЛИ. Конечно, есть и другие, но они описаны выше.

Характерная черта любой логической операции в том, что она возвращает условие «Истина» или «Ложь». В случае с расширенным фильтром, условие будет следующее: если определенное условие истинно.

То есть, логическое условие «И» фактически расшифровывается, как «если критерий 1 и критерий 2 соответствуют критерию 3». Например, если яблоки и морковь стоят одинаково, то. Или – аналогично, просто вместо «И» вставляется «Или». На практике это может выглядеть так. Если пользователи купили товары компании 1 или компании 2, то отобразить эти покупки. В таком случае при приобретении чего-то третьего, оно не отображается.

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

Итак, что нужно знать? Если условия находятся в одной строке, хотя и различных ячейках, то они считаются как те, которые соединены друг с другом логическим оператором «И».

Как сделать фильтр в Excel

13

В описываемом примере фильтр покажет только те бананы, которые были куплены в Московском Ашане в третьем квартале.

Если же необходимо, чтобы условия были связались с помощью логического оператора «ИЛИ», то необходимо их записывать в разных строках.

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

Как сделать фильтр в Excel

14

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

Как сделать фильтр в Excel

15

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

Функция «Фильтр»

24 сентября 2018 года была представлена новая функция, которая также умеет фильтровать данные. Появилась она совместно с инновационным обновлением, которое добавило динамические массивы в Excel. Эта функция, аналогично шести остальным, доступна тем пользователям, которые пользуются последней версией Microsoft Office 365.

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

Синтаксис функции следующий.

=ФИЛЬТР(массив; включить; [если_пусто])

Разберем основные аргументы:

  1. Массив. Это диапазон (как представленный в виде ссылки, так и именованный), который будет использоваться для фильтрации данных.
  2. Включить. Это массив переменных, имеющих такую же ширину и высоту, как и массив. Простыми словами, это условия, при которых должны отображаться конкретные значения.
  3. Если_пусто. Это дополнительный аргумент, который задает значение, которое возвращается при обнаружении, что все значения включенного массива пустые. 

Использовать можно те же логические операторы в качестве условий, которые приводились выше. При этом есть ряд особенностей в работе этой функции, которые нужно учитывать:

  1. Она задействует динамические массивы. Учитывая это, результат всегда будет касаться и смежных ячеек. 
  2. Если необходимо задать фильтру несколько условий, необходимо использовать знак умножения во втором аргументе, а сами условия взять в скобки.
  3. Для использования оператора ИЛИ нужно использовать знак суммирования вместо знака умножения, а сами критерии также взять в скобки.
  4. Если окажется, что в ячейке, в которую будет возвращаться значение, уже есть какие-то значения, то появится ошибка #ПЕРЕНОС! Чтобы избавиться от нее, нужно очистить данные, содержащиеся в соответствующей ячейке.

Таким образом, тот сложный функционал расширенного фильтра можно реализовать с помощью одной простой функции 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Конец подписки

Вы поможете развитию сайта, поделившись страницей с друзьями

Содержание

  1. Что это такое
  2. Для чего это нужно
  3. Как работает
  4. С помощью диалогового окна «Расширенный фильтр»
  5. С помощью макроса
  6. Как добавить
  7. Как удалить
  8. Создаем диапазон условий
  9. Активируем фильтр
  10. Как задать несколько параметров
  11. Как поставить расширенный поиск
  12. Как удостовериться, поставлен ли фильтр
  13. Вывод

Что это такое

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

Для чего это нужно

Расширенный фильтр в Эксель (Excel) используется, если производится отбор по двум и более критериям. Например, в таблице представлена информация об учениках в школе. Их рост, вес, пол. Как, выбрать данные про мальчиков восьмого класса, ростом метр восемьдесят? Используйте расширенный фильтр. Рассмотрим на похожем примере.

Как работает

Теперь давайте рассмотрим, как работает фильтр в Эксель. Для примера воспользуемся следующими данными. У нас есть три столбца: «Название продукта», «Категория» и «Цена», к ним будем применять различные фильтры.

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

Например, оставим в «Категории» только фрукты. Снимаем галочку в поле «овощ» и нажимаем «ОК».

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

С помощью диалогового окна «Расширенный фильтр»

С помощью диалогового окна «Расширенный фильтр»

     Рассмотрим это на примере, нам нужно отобрать страны в мире где есть монархия. Для удобства и наглядной визуализации, скопируйте шапку таблицы немного выше, создайте несколько пустых строк. Обязательно между двумя таблицами должен быть разделитель – пустая строка. Теперь можем применить фильтр, согласно заданных условий. 

     Для начала выделяем любую из ячеек диапазона хранения ваших данных, на вкладке «Данные», нужно найти пункт «Дополнительно» и в открывшемся диалоговом окне «Расширенный фильтр» мы видим переключатель «Скопировать результат, в другое место» который позволяет вам перенести полученные данные в указанное место, но нам это пока не нужно. «Исходный диапазон» в диалоговом окне проставляется по умолчанию, а вот «Диапазон условий» вам нужно проставить вручную. Советую не спешить и указывать только заполненные строки с условием, так как пустая строка в диапазоне — это условие — «отобрать всё что есть». При подтверждении введенных условий в диалоговом окне «Расширенный фильтр» мы получаем указанный результат. Rozchirenii filtr 3 Как использовать расширенный фильтр в Excel

С помощью макроса

С помощью макроса

     Как видите, расширенный фильтр в Excel позволил вам произвести отборку данных по указанным вами критериям, но удобства у такого способа немного, хотя его полезность и важность вы отрицать не будете. Выходом из создавшегося положения можно найти, используя в работе возможности макроса. Rozchirenii filtr 4 Как использовать расширенный фильтр в Excel     Для улучшения эффективности работы вам нужно клацнуть на ярлыке вашего текущего листа правой кнопкой мышки и в контекстном окне выбрать пункт «Исходный текст» и в появившееся диалоговое окно ввести код:

     Этот код будет автоматически, применятся при любом изменении полей и накладывать фильтр на ваши данные. Он просматривает диапазон (C2:I2) на наличие введенных данных и мгновенно применяет условия, к диапазону ваших данных, которые начинаются с ячейки (C5). Rozchirenii filtr 5 Как использовать расширенный фильтр в Excel

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

     Вот предоставлены варианты:

Условие

Полученный результат

=?????

=в??а

=*ф?я

Отбор всех ячеек, где есть пять символов. (Например, Прага)

Отбор текста на 4 знака, который начинается с «в» и заканчивается на «а» (Например, Вена)

Отбор значений с тремя буквами в конце, одна из которых неизвестна (Например, София)

=пр

=п*р

=*н

=рим

Отбор всех значений, которые начинаются с букв «пр» (Например, Прага)

Отбор значений, которые начинаются с «п», содержат или заканчиваются на «р» (Например, Париж)

Отбор значений, которые заканчиваются на «н» (Например, Берлин)

Отбор точного совпадения (Например, Рим)

=

<>

>=40

=20

>=р

<>монарх*

<=11/01/2016

Производится отбор всех пустых ячеек

Производится отбор всех не пустых ячеек

Отбор значений, которые равны или больше 40

Точный отбор значений, которые равны 20.

Отбор всех значений, которые начинаются с «р»

Отбор данных, которые содержат «монарх»

Отсев дат до 1 ноября 2016 года.

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

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

«

Как добавить

Если Вы оформляли информацию через вкладку «Вставка» – «Таблица», или вкладка «Главная» – «Форматировать как таблицу», то в ней возможность фильтрации будет включена по умолчанию. Отображается нужная кнопка в виде стрелочки, которая расположена в верхней ячейке с правой стороны.

Фильтр в 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

Расширенный фильтр, макросом.

Mark1976

Дата: Суббота, 30.04.2016, 16:36 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

Всем привет. На просторах инета нашел макрос. Но в нем есть проблема. Он не работает как надо. Мне надо, чтобы во втором столбце В, поиск осуществлялся минимум по 2-м словам. Например: пишу анальгин амп, фильтр выдает анальгин амп. Пишу анальгин, фильтр выдает анальгин амп, анальгин таб. Буду благодарен за помощь.
[vba]

Код

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

[/vba]

К сообщению приложен файл:

_123.xlsx
(66.2 Kb)

 

Ответить

TimSha

Дата: Суббота, 30.04.2016, 16:44 |
Сообщение № 2

Группа: Проверенные

Ранг: Ветеран

Сообщений: 627


Репутация:

94

±

Замечаний:
0% ±


Excel 2013 Pro +

В вашем файле нет ни ваших условий отбора, ни макроса… ;)
ps И вернитесь к первоисточнику — там подробно описано что да как фильтровать.


«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

Сообщение отредактировал TimShaСуббота, 30.04.2016, 16:49

 

Ответить

Mark1976

Дата: Суббота, 30.04.2016, 16:52 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

TimSha, файл тогда весит больше 100кб. Как же быть тогда?

 

Ответить

TimSha

Дата: Суббота, 30.04.2016, 16:56 |
Сообщение № 4

Группа: Проверенные

Ранг: Ветеран

Сообщений: 627


Репутация:

94

±

Замечаний:
0% ±


Excel 2013 Pro +

21521х3=…..
Надо столько пустых строк в пустом файле?!


«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

 

Ответить

Mark1976

Дата: Суббота, 30.04.2016, 17:01 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

TimSha, перевложил

К сообщению приложен файл:

12345_.xlsm
(20.7 Kb)

 

Ответить

TimSha

Дата: Суббота, 30.04.2016, 17:14 |
Сообщение № 6

Группа: Проверенные

Ранг: Ветеран

Сообщений: 627


Репутация:

94

±

Замечаний:
0% ±


Excel 2013 Pro +

Все работает.
И, пожалуйста, дочитайте все до конца о «Суперфильтре на VBA» — и комментарии… ;)


«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

Сообщение отредактировал TimShaСуббота, 30.04.2016, 17:15

 

Ответить

Mark1976

Дата: Суббота, 30.04.2016, 17:18 |
Сообщение № 7

Группа: Проверенные

Ранг: Ветеран

Сообщений: 685


Репутация:

3

±

Замечаний:
0% ±


Excel 2010, 2013

TimSha, теперь понял. Спасибо. С наступающими. Статью прочитаю сейчас.

 

Ответить

sdaxadri

Дата: Среда, 16.11.2022, 12:05 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Всем Здравствуйте, файл прикрепил и картинку(По ней всё понятно будет)

Имеем расширенный фильтр, где макрос всё фильтрует автоматически, но на 2 столбцах (ФИО и Вес) всё работает, а там где (категория) 6-7 не работает из-за деффиса
Заранее спасибо

 

Ответить

У подавляющего большинства пользователей Excel при слове «фильтрация данных» в голове всплывает только обычный классический фильтр с вкладки Данные — Фильтр (Data — Filter):

advanced-filter1.png

Такой фильтр — штука привычная, спору нет, и для большинства случаев вполне сойдет. Однако бывают ситуации, когда нужно проводить отбор по большому количеству сложных условий сразу по нескольким столбцам. Обычный фильтр тут не очень удобен и хочется чего-то помощнее. Таким инструментом может стать расширенный фильтр (advanced filter), особенно с небольшой «доработкой напильником» (по традиции).

Основа
Для начала вставьте над вашей таблицей с данными несколько пустых строк и скопируйте туда шапку таблицы — это будет диапазон с условиями (выделен для наглядности желтым):

advanced-filter2.png

Между желтыми ячейками и исходной таблицей обязательно должна быть хотя бы одна пустая строка.

Именно в желтые ячейки нужно ввести критерии (условия), по которым потом будет произведена фильтрация. Например, если нужно отобрать бананы в московский «Ашан» в III квартале, то условия будут выглядеть так:

advanced-filter3.png

Чтобы выполнить фильтрацию выделите любую ячейку диапазона с исходными данными, откройте вкладку Данные и нажмите кнопку Дополнительно (Data — Advanced). В открывшемся окне должен быть уже автоматически введен диапазон с данными и нам останется только указать диапазон условий, т.е. A1:I2:

advanced-filter5.png

Обратите внимание, что диапазон условий нельзя выделять «с запасом», т.е. нельзя выделять лишние пустые желтые строки, т.к. пустая ячейка в диапазоне условий воспринимается Excel как отсутствие критерия, а целая пустая строка — как просьба вывести все данные без разбора.

Переключатель Скопировать результат в другое место позволит фильтровать список не прямо тут же, на этом листе (как обычным фильтром), а выгрузить отобранные строки в другой диапазон, который тогда нужно будет указать в поле Поместить результат в диапазон. В данном случае мы эту функцию не используем, оставляем Фильтровать список на месте и жмем ОК. Отобранные строки отобразятся на листе:

advanced-filter6.png

Добавляем макрос
«Ну и где же тут удобство?» — спросите вы и будете правы. Мало того, что нужно руками вводить условия в желтые ячейки, так еще и открывать диалоговое окно, вводить туда диапазоны, жать ОК. Грустно, согласен! Но «все меняется, когда приходят они ©» — макросы!

Работу с расширенным фильтром можно в разы ускорить и упростить с помощью простого макроса, который будет автоматически запускать расширенный фильтр при вводе условий, т.е. изменении любой желтой ячейки. Щелкните правой кнопкой мыши по ярлычку текущего листа и выберите команду Исходный текст (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, т.е. все будет фильтроваться мгновенно, сразу после ввода очередного условия:

advanced-filter-work.gif

Так все гораздо лучше, правда? :)

Реализация сложных запросов
Теперь, когда все фильтруется «на лету», можно немного углубиться в нюансы и разобрать механизмы более сложных запросов в расширенном фильтре. Помимо ввода точных совпадений, в диапазоне условий можно использовать различные символы подстановки (* и ?) и знаки математических неравенств для реализации приблизительного поиска. Регистр символов роли не играет. Для наглядности я свел все возможные варианты в таблицу:

Критерий Результат
гр* или гр все ячейки начинающиеся с Гр, т.е. Груша, Грейпфрут, Гранат и т.д.
=лук все ячейки именно и только со словом Лук, т.е. точное совпадение
*лив* или *лив ячейки содержащие лив как подстроку, т.е. Оливки, Ливер, Залив и т.д.
=п*в слова начинающиеся с П и заканчивающиеся на В т.е. Павлов, Петров и т.д.
а*с слова начинающиеся с А и содержащие далее С, т.е. Апельсин, Ананас, Асаи и т.д.
=*с слова оканчивающиеся на С
=???? все ячейки с текстом из 4 символов (букв или цифр, включая пробелы)
=м??????н все ячейки с текстом из 8 символов, начинающиеся на М и заканчивающиеся на Н, т.е. Мандарин, Мангостин и т.д.
=*н??а все слова оканчивающиеся на А, где 4-я с конца буква Н, т.е. Брусника, Заноза и т.д.
>=э все слова, начинающиеся с Э, Ю или Я
<>*о* все слова, не содержащие букву О
<>*вич все слова, кроме заканчивающихся на вич (например, фильтр женщин по отчеству)
= все пустые ячейки
<> все непустые ячейки
>=5000 все ячейки со значением больше или равно 5000
5 или =5 все ячейки со значением 5
>=3/18/2013 все ячейки с датой позже 18 марта 2013 (включительно)

Тонкие моменты:

  • Знак * подразумевает под собой любое количество любых символов, а ? — один любой символ.
  • Логика в обработке текстовых и числовых запросов немного разная. Так, например, ячейка условия с числом 5 не означает поиск всех чисел, начинающихся с пяти, но ячейка условия с буквой Б равносильна Б*, т.е. будет искать любой текст, начинающийся с буквы Б.
  • Если текстовый запрос не начинается со знака =, то в конце можно мысленно ставить *.
  • Даты надо вводить в штатовском формате месяц-день-год и через дробь (даже если у вас русский Excel и региональные настройки).

Логические связки И-ИЛИ
Условия записанные в разных ячейках, но в одной строке — считаются связанными между собой логическим оператором И (AND):

advanced-filter3.png

Т.е. фильтруй мне бананы именно в третьем квартале, именно по Москве и при этом из «Ашана».

Если нужно связать условия логическим оператором ИЛИ (OR), то их надо просто вводить в разные строки. Например, если нам нужно найти все заказы менеджера Волиной по московским персикам и все заказы по луку в третьем квартале по Самаре, то это можно задать в диапазоне условий следующим образом:

advanced-filter7.png

Если же нужно наложить два или более условий на один столбец, то можно просто продублировать заголовок столбца в диапазоне критериев и вписать под него второе, третье и т.д. условия. Вот так, например, можно отобрать все сделки с марта по май:

advanced-filter8.png

В общем и целом, после «доработки напильником» из расширенного фильтра выходит вполне себе приличный инструмент, местами не хуже классического автофильтра.

Источник

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

Понравилась статья? Поделить с друзьями:
  • Макрос для excel range
  • Макрос в excel с окном
  • Макрос для excel if else
  • Макрос в excel с несколькими файлами
  • Макрос для excel 2019