Автообновление фильтра в excel

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

doc auot обновить фильтр 1

Автоматически повторно применять автофильтр при изменении данных с помощью кода VBA


стрелка синий правый пузырь Автоматически повторно применять автофильтр при изменении данных с помощью кода VBA

Обычно вы можете обновить данные фильтра, щелкнув функцию «Повторное применение» вручную, но здесь я представлю вам код VBA для автоматического обновления данных фильтра при изменении данных, пожалуйста, сделайте следующее:

1. Перейдите к листу, на котором вы хотите автоматически обновлять фильтр при изменении данных.

2. Щелкните правой кнопкой мыши вкладку листа и выберите Просмотреть код из контекстного меню во всплывающем Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустое окно модуля, см. снимок экрана:

Код VBA: автоматическое повторное применение фильтра при изменении данных:

Private Sub Worksheet_Change(ByVal Target As Range)
   Sheets("Sheet3").AutoFilter.ApplyFilter
End Sub

doc auot обновить фильтр 2

Внимание: В приведенном выше коде Лист 3 — это имя листа с автоматическим фильтром, который вы используете, измените его по своему усмотрению.

3. А затем сохраните и закройте это окно кода, теперь, когда вы меняете отфильтрованные данные, Фильтр функция будет автоматически обновлена ​​сразу, см. снимок экрана:

doc auot обновить фильтр 3


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (36)


Номинальный 5 из 5


·


рейтинги 1

Извините, недостаточно комментариев для комментирования. (Администраторы, не стесняйтесь вырезать это в комментарии выше.) Ответ пользователя «danicotra», начинающийся с «Я использую VBA/Macro на основе события Worksheet_Change, но мой подход …» с
‘сначала удалите фильтр
затем примените его снова
является правильным решением при использовании Excel 2007+. Тем не мение .Автофильтр.ApplyFilter недействителен в XL03 и ранее, поэтому я покажу путь ниже.

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

Даникотра использовал упрощенный пример. На самом деле, вы можете сделать это в более общем плане. Предположим, с ActiveSheet для следующего (или некоторого другого объекта листа):

  1. Сохраните диапазон автофильтра. Она имеет .Автофильтр.Фильтры.Подсчитать столбцы и (.Автофильтр.Спектр.Граф /.Автофильтр.Фильтры.Количество) строк, сохраненных в rngAutofilter

  2. Соберите в массив myAutofilters каждое из 4 свойств каждого из.Автофильтр.Фильтры.Подсчитайте элементы автофильтра, стараясь при этом избежать ошибок, определенных приложением.На или.Оператор ложный. (myAutofilters будет reDim’d на количество строк и столбцов в шаге 1)

  3. Выключите фильтр, но сохраните раскрывающиеся списки с помощью.ShowAllData

  4. Для каждого элемента фильтра, который был.В соответствии с сохраненным массивом сбросьте 3 из 4 свойств каждого из.Автофильтр.Фильтры.Подсчитать элементы автофильтра. Снова позаботьтесь о том, чтобы избежать «ошибок, определенных приложением», когда.Оператор ложный, поэтому для каждого элемента «я»,
    rngAutofilter.Поле автофильтра:= i, критерии1:= myAutofilters (i, 2)
    или же
    rngAutofilter.Поле автофильтра:= i, критерии1:= myAutofilters (i, 2), оператор:= myAutofilters (i, 3), критерии2:= myAutofilters (i, 4)

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

Public myAutofilters As Variant, rngAutofilter As Range 'Public
Sub SaveAndRestoreAutofilters()
  'This will update the autofilter display to recognize data changes by turning autofilter off and then on, preserving all characteristics
  'Note, XL2007 and later have .autofilter.applyfilter, but not the invaluable XL03 and earlier
  Dim i As Long, iNumAutofilters As Long, iNumActiveAutofilters As Long
  iNumActiveAutofilters = SaveAutoFilterInfo(iNumAutofilters) 'NOTE! Use CALL or assignment to prevent parentheses from forcing ByVal !
  If iNumActiveAutofilters < 1 Then
      Application.StatusBar = "0 ACTIVE filters;" & iNumAutofilters & " autofilters"
      Exit Sub
  End If
  ActiveSheet.ShowAllData

  Rem Here optionally do stuff which can include changing data or toggling autofilter columns

  For i = 1 To iNumAutofilters
      If myAutofilters(i, 1) Then
          If myAutofilters(i, 3) <> 0 Then 'then .Operator is something, so set it and Criteria2, else just Criteria1
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2), Operator:=myAutofilters(i, 3), Criteria2:=myAutofilters(i, 4) ', On:=true by rule
          Else
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2) ', On:=true by rule (it's R/O anyway)
          End If
          Rem Selection.AutoFilter Field:=i 'How you'd "turn off" only a single column's autofiltering. FYI .On is R/O!
      End If
      'activesheet.autofiltermode=false 'just FYI, how you comprehensively turn off filtering on a sheet (erasing the dropdowns and criteria and filter range!)
  Next i
End Sub
Function SaveAutoFilterInfo(iNumAutofilters As Long) As Long
  Dim i As Long, iRowsAutofiltered As Long
  SaveAutoFilterInfo = 0 'counts the number that are .On, and returns the total
  iNumAutofilters = ActiveSheet.AutoFilter.Range.Columns.Count
  If ActiveSheet.AutoFilter.Filters.Count <> iNumAutofilters Then MsgBox "I can't explain this. All bets are off. Aborting.": Exit function
  ReDim myAutofilters(1 To iNumAutofilters, 4)
  For i = 1 To iNumAutofilters
      myAutofilters(i, 1) = ActiveSheet.AutoFilter.Filters(i).On
      If myAutofilters(i, 1) Then
          SaveAutoFilterInfo = SaveAutoFilterInfo + 1
          myAutofilters(i, 2) = ActiveSheet.AutoFilter.Filters(i).Criteria1
          myAutofilters(i, 3) = ActiveSheet.AutoFilter.Filters(i).Operator
          If myAutofilters(i, 3) <> 0 Then 'then is either xlAnd, xlOr, etc., and there's a second criteria
              myAutofilters(i, 4) = ActiveSheet.AutoFilter.Filters(i).Criteria2
          End If
      End If
  Next i
  iRowsAutofiltered = ActiveSheet.AutoFilter.Range.Count / ActiveSheet.AutoFilter.Range.Columns.Count
  Set rngAutofilter = Cells(ActiveSheet.AutoFilter.Range.Row, ActiveSheet.AutoFilter.Range.Column).Resize(iRowsAutofiltered, iNumAutofilters)
End Function

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

Вам нужно будет включить макросы и сохранить файл Excel как файл с поддержкой макросов, .XLSM, чтобы использовать код. Чтобы сохранить файл как файл с поддержкой макросов, выберите «Файл»> «Сохранить как» и выберите «Книга с поддержкой макросов Excel» в диалоговом окне «Сохранить как».

Затем выберите лист, к которому вы применили фильтры. Щелкните его правой кнопкой мыши и выберите в контекстном меню «Просмотреть код».

Откроется окно Microsoft Visual Basic с текущим листом Excel. Вставьте следующий код в окно кода.

Private Sub Worksheet_Change(ByVal Target As Range)
If Me.FilterMode = True Then
With Application
.EnableEvents = False
.ScreenUpdating = False
End With

With ActiveWorkbook
.CustomViews.Add ViewName:="Mine", RowColSettings:=True
Me.AutoFilterMode = False
.CustomViews("Mine").Show
.CustomViews("Mine").Delete
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End If

End Sub

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

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

Что вы думаете об этой статье?

Sorry, insufficient rep to comment. (Admins, feel free to cut this into a comment above.) User «danicotra» response beginning with «I use a VBA/Macro based on Worksheet_Change event too, but my approach…» with
‘ first remove filter
‘ then apply it again
is the correct solution when using Excel 2007+. However .AutoFilter.ApplyFilter is invalid in XL03 and earlier so I show the way below.

I beg that true experts and gurus read the code because I’m pretty confident that it is top shelf material. Perhaps the inexplicable downvote count on this answer can be reversed when people see what good stuff is done below.

danicotra used a simplified example. Actually, you can do this more generally. Assume With ActiveSheet for the following (or some other sheet object):

  1. Save the range of the autofilter. It has .AutoFilter.Filters.Count columns, and (.AutoFilter.Range.Count/.AutoFilter.Filters.Count) rows, saved to rngAutofilter

  2. Collect in an array myAutofilters each of the 4 properties of each of the .AutoFilter.Filters.Count autofilter Items, taking care that you avoid «Application-defined errors» when .On or .Operator is false. (myAutofilters would be reDim’d to the number of rows and columns in step 1)

  3. Turn off the filter but preserve the dropdowns with .ShowAllData

  4. For each filter Item that was .On according to your saved array, reset 3 of the 4 properties of each of the .AutoFilter.Filters.Count autofilter Items. Again take care that you avoid «Application-defined errors» when .Operator is false, so for each item «i»,
    rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i,2)
    or
    rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i,2), Operator:=myAutofilters(i,3), Criteria2:=myAutofilters(i,4)

Now the autofilter will be reinstituted, over the same range as it was before your code began, but with the autofilter updated for changes in data.

Public myAutofilters As Variant, rngAutofilter As Range 'Public
Sub SaveAndRestoreAutofilters()
  'This will update the autofilter display to recognize data changes by turning autofilter off and then on, preserving all characteristics
  'Note, XL2007 and later have .autofilter.applyfilter, but not the invaluable XL03 and earlier
  Dim i As Long, iNumAutofilters As Long, iNumActiveAutofilters As Long
  iNumActiveAutofilters = SaveAutoFilterInfo(iNumAutofilters) 'NOTE! Use CALL or assignment to prevent parentheses from forcing ByVal !
  If iNumActiveAutofilters < 1 Then
      Application.StatusBar = "0 ACTIVE filters;" & iNumAutofilters & " autofilters"
      Exit Sub
  End If
  ActiveSheet.ShowAllData

  Rem Here optionally do stuff which can include changing data or toggling autofilter columns

  For i = 1 To iNumAutofilters
      If myAutofilters(i, 1) Then
          If myAutofilters(i, 3) <> 0 Then 'then .Operator is something, so set it and Criteria2, else just Criteria1
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2), Operator:=myAutofilters(i, 3), Criteria2:=myAutofilters(i, 4) ', On:=true by rule
          Else
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2) ', On:=true by rule (it's R/O anyway)
          End If
          Rem Selection.AutoFilter Field:=i 'How you'd "turn off" only a single column's autofiltering. FYI .On is R/O!
      End If
      'activesheet.autofiltermode=false 'just FYI, how you comprehensively turn off filtering on a sheet (erasing the dropdowns and criteria and filter range!)
  Next i
End Sub
Function SaveAutoFilterInfo(iNumAutofilters As Long) As Long
  Dim i As Long, iRowsAutofiltered As Long
  SaveAutoFilterInfo = 0 'counts the number that are .On, and returns the total
  iNumAutofilters = ActiveSheet.AutoFilter.Range.Columns.Count
  If ActiveSheet.AutoFilter.Filters.Count <> iNumAutofilters Then MsgBox "I can't explain this. All bets are off. Aborting.": Exit function
  ReDim myAutofilters(1 To iNumAutofilters, 4)
  For i = 1 To iNumAutofilters
      myAutofilters(i, 1) = ActiveSheet.AutoFilter.Filters(i).On
      If myAutofilters(i, 1) Then
          SaveAutoFilterInfo = SaveAutoFilterInfo + 1
          myAutofilters(i, 2) = ActiveSheet.AutoFilter.Filters(i).Criteria1
          myAutofilters(i, 3) = ActiveSheet.AutoFilter.Filters(i).Operator
          If myAutofilters(i, 3) <> 0 Then 'then is either xlAnd, xlOr, etc., and there's a second criteria
              myAutofilters(i, 4) = ActiveSheet.AutoFilter.Filters(i).Criteria2
          End If
      End If
  Next i
  iRowsAutofiltered = ActiveSheet.AutoFilter.Range.Count / ActiveSheet.AutoFilter.Range.Columns.Count
  Set rngAutofilter = Cells(ActiveSheet.AutoFilter.Range.Row, ActiveSheet.AutoFilter.Range.Column).Resize(iRowsAutofiltered, iNumAutofilters)
End Function

 

kniukh

Пользователь

Сообщений: 5
Регистрация: 02.07.2013

Добрый день!
Очень нужна Ваша помощь.
Задача: автоматическое обновление ВСЕХ фильтров (на всех листах) при запуске файла.
Знаю что возможно решить проблему при помощи Макроса, но не знаю как его написать.

Заранее благодарен! Файл прикрепляю (файл не маленький, потому сильно обрезал и добавил в архив).

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

#2

02.07.2013 13:09:38

Цитата
kniukh пишет: файл не маленький, потому сильно обрезал и добавил в архив

А могли бы сделать маленький аналог.

 

kniukh

Пользователь

Сообщений: 5
Регистрация: 02.07.2013

Сделал. Есть еще небольшое пожелание, чтобы фильтр обновлялся при внесении изменений на страницы 1 — 31 (в образце я их убрал, чтобы скинуть «лишний вес»)

 

kniukh

Пользователь

Сообщений: 5
Регистрация: 02.07.2013

#4

02.07.2013 16:39:37

Вот штудирую литературу по макросам. Получилось пока такое. Но не работает. Что я упускаю?! Поддержку макросов я включил.

Код
Private Sub Workbook_Open()
   Workbook.AutoFilter.ApplyFilter
End Sub
 

kniukh

Пользователь

Сообщений: 5
Регистрация: 02.07.2013

Помогите, знающие люди! Очень Вас прошу!

 

Igor67

Пользователь

Сообщений: 3729
Регистрация: 21.12.2012

kniukh,  Вы бы не суетились. У Вас файл под сотню, я на работе качать не буду. Увидев тему с 5 ответами, вечером могу ее и не смотреть. А в теме оказывается не ответы, а только Ваши уточнения :D

 

Serge 007

Гость

#7

02.07.2013 20:09:12

Цитата
kniukh пишет: автоматическое обновление ВСЕХ фильтров

Поясните, что Вы подразумеваете под «обновлением» фильтров?

 

Igor67

Пользователь

Сообщений: 3729
Регистрация: 21.12.2012

kniukh, не знаю зачем Вам обновлять фильтр на всех листах, если Вы все равно не видите данных ;) Держите вариант. Как понял имя листа совпадает с фильтром, поэтому при переходе на лист сначала фильтр снимается, а потом снова ставится. При этом обращаю внимание что Наталья и Наталия это 2 совсем разных имени.

 

kniukh

Пользователь

Сообщений: 5
Регистрация: 02.07.2013

Большое, огромнейшее Вам спасибо!
Буду внимательнее!

 

Sergii Skrypai

Пользователь

Сообщений: 107
Регистрация: 07.01.2013

#10

14.05.2014 22:57:19

Подскажите, пожалуйста, текст макроса, для
1) запуска макроса в ручную для обновление всех фильтров на всех листах книги
2) запуска макроса в ручную для обновление фильтра на активном  листе

Заранее спасибо.

Понравилась статья? Поделить с друзьями:
  • Автообновление сводной таблицы excel макрос
  • Автообновление сводной таблицы excel без макросов
  • Автообновление курса валют в excel
  • Автообновление графика в excel
  • Автонумерация ячейки в excel