Note: The other languages of the website are Google-translated. Back to English

Как автоматически повторно применять автофильтр при изменении данных в 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
Этот комментарий был сведен к минимуму модератором на сайте
привет, как я могу использовать все это в Google Finance? спасибо
Этот комментарий был сведен к минимуму модератором на сайте
Красиво.. очень нужно
Этот комментарий был сведен к минимуму модератором на сайте
Я хочу, чтобы изменение на одном листе вызывало автоматическую фильтрацию нескольких других листов, как мне изменить этот код? Пример: SheetA изменен, что приводит к тому, что Sheet1, Sheet2 и Sheet3 применяют свой автофильтр. Спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Я делаю это для лицевой стороны листа, если для ячейки установлено значение =sheet1!E6. Он не будет применять фильтр при его изменении. Если я изменю номер на заднем листе, он отрегулирует передний, но не фильтрует. Если изменить формулу, чтобы отфильтровать критерии, она применяется повторно. Что я могу сделать?
Этот комментарий был сведен к минимуму модератором на сайте
Используйте этот
Private Sub Work_Change (Цель ByVal как диапазон)
Activesheet.AutoFilter.ApplyFilter
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Я не могу заставить это работать на меня вообще. Я пытаюсь взять с основного листа и взять только те задания, которые применяются к определенным менеджерам проектов на каждой вкладке с их именами. Я также хочу, чтобы он автоматически обновлялся при внесении изменений.
Этот комментарий был сведен к минимуму модератором на сайте
эта команда все подделка ничего не делает. полностью попробовать, но бесполезно.
Этот комментарий был сведен к минимуму модератором на сайте
Отлично работает и экономит мне много времени и нервов.. Действительно отличный совет.. Большое спасибо за вашу помощь.
Этот комментарий был сведен к минимуму модератором на сайте
Это решение работает отлично. Спасибо, что написали! Если у кого-то возникли проблемы, есть несколько вещей, которые следует учитывать.

Во-первых, событие Worksheet_Change вызывается для каждого листа. Это означает, что если у вас есть несколько листов с фильтрами, которые вам нужно обновить, вам нужно будет реагировать на все эти события. Одна подпрограмма Worksheet_Change для каждого листа, а не одна подпрограмма для всей книги (одно исключение — см. примечание ниже).

Во-вторых, в дополнение к первому, код должен быть помещен в модуль кода, относящийся к рабочему листу, который необходимо отслеживать. Когда вы попадаете в редактор VB, легко (непреднамеренно) переключать модули кода, поэтому необходимо позаботиться о том, чтобы поместить его на лист, который вы хотите отслеживать на предмет изменений данных.

В-третьих, это не подтверждено, но, возможно, является ошибкой. В примере используются имена листов «Лист1», «Лист2» ​​и т. д. Если вы переименовали листы, вам может потребоваться обновить код. Обратите внимание, что в примере листу Sheet7 было присвоено имя «dfdf». Если вы хотите обновить фильтр там, вам нужно будет использовать;
Листы("dfdf").AutoFilter.ApplyFilter
нет;
Листы("Лист7").AutoFilter.ApplyFilter

Было бы неплохо обновить статью, включив в нее пример с переименованным листом.


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

# (код должен быть размещен на листе для отслеживания изменений данных)
Private Sub Worksheet_Change (ByVal Target As Range)
Листы("Лист1").AutoFilter.ApplyFilter
Листы("Лист2").AutoFilter.ApplyFilter
Листы("Лист3").AutoFilter.ApplyFilter
Листы("Лист4").AutoFilter.ApplyFilter
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Привет, Майк,
Спасибо за ваше подробное объяснение.
Этот комментарий был сведен к минимуму модератором на сайте
Отличное объяснение, спасибо.

Но как запустить Sheets("Sheet3").AutoFilter.ApplyFilter при создании нового листа?
Поскольку я не могу написать код, который вы упомянули, на листе, которого еще не существует
Этот комментарий был сведен к минимуму модератором на сайте
Отлично, спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
работает как чемпион, и так просто. большое спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Это кажется отличным. Не могли бы вы сказать мне, как сделать то же самое для сортировки, а не для фильтра, пожалуйста?
Этот комментарий был сведен к минимуму модератором на сайте
Привет, Крис,
Может быть, следующая статья может решить вашу проблему, пожалуйста, просмотрите:

https://www.extendoffice.com/documents/excel/2592-excel-auto-sort-by-value.html

Пожалуйста, попробуйте!
Этот комментарий был сведен к минимуму модератором на сайте
Привет, это прекрасно работает, но только при ручном изменении данных в таблице.

У меня есть отфильтрованная таблица в стиле «десятки/лидеров», которая заполняется вводом данных на отдельном листе (на самом деле данные проходят через 3 листа, прежде чем попасть в таблицу). Когда данные изменяются на листе ввода данных, цифры в таблице лидеров обновляются, однако фильтр не обновляется автоматически.
Есть идеи, как это сделать?
Весьма признателен.
Алекс
Этот комментарий был сведен к минимуму модератором на сайте
у меня она такая же проблема. Кто-нибудь может нам помочь?
Этот комментарий был сведен к минимуму модератором на сайте
У меня такая же проблема. Я пытаюсь автоматически фильтровать лист 2, содержащий данные, поступающие с листа 1. Это работает, только если я изменяю данные на листе 2, а не на листе 1.
Любые мысли о том, почему это не работает и как это исправить?
Этот комментарий был сведен к минимуму модератором на сайте
Привет, кажется, это отлично работает, но у меня возникают проблемы, когда на одном листе (вкладке) есть более одного фильтра. Я преобразовал диапазон ячеек в таблицу, чтобы можно было использовать отдельные и множественные фильтры на одном листе. В этом примере отображается только обновление одной из таблиц/фильтров. Любые предложения о том, как обновить ВСЕ таблицы/фильтры на листе?

Большое спасибо,

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

Сангат Мембанту
Этот комментарий был сведен к минимуму модератором на сайте
Это не работает с фильтром на основе выбора списка https://www.extendoffice.com/documents/excel/4113-excel-filter-based-on-list-selection.html
Этот комментарий был сведен к минимуму модератором на сайте
Гениально и просто сделать. Огромное спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,

Этот код отлично работает, большое спасибо.

У меня, однако, есть одна небольшая проблема: если я изменяю значения в любой ячейке, которая не является частью таблицы, я получаю сообщение об ошибке времени выполнения:

«Ошибка времени выполнения '91':

Переменная объекта или с переменной блока не настроена"


У меня есть варианты «Отладка» или «Завершить», вариант «Продолжить» неактивен. Я могу нажать «Конец», и код все еще работает, однако очень раздражает необходимость иметь дело с этим всплывающим окном после каждого изменения.

У кого-нибудь есть подобный опыт или предложение о том, как это сортировать?

Благодаря!
Этот комментарий был сведен к минимуму модератором на сайте
Привет Дэвид,
Чтобы решить вашу проблему, вы можете применить следующий код:

Private Sub Worksheet_Change (ByVal Target As Range)
On Error Resume Next
Листы("Лист3").AutoFilter.ApplyFilter
End Sub

Пожалуйста, попробуйте, надеюсь, это поможет вам!
Этот комментарий был сведен к минимуму модератором на сайте
Привет Скайанг,


Я реализовал ваше решение, и оно действительно исправлено.

Спасибо большое!
Этот комментарий был сведен к минимуму модератором на сайте
Привет, у меня была такая же проблема, вставил новый код и изменил имя листа, но ничего не происходит, фильтр не обновляется
Этот комментарий был сведен к минимуму модератором на сайте
такая же проблема и здесь, какое-нибудь обновленное решение?
Этот комментарий был сведен к минимуму модератором на сайте
Не могу заставить это работать вообще в офисе 365
какие-либо предложения
Этот комментарий был сведен к минимуму модератором на сайте
Привет, большое спасибо за помощь. Что-то у меня работает не так. Вот история.

Sheet1 содержит переменные данные. Sheet3 имеет статические данные и фильтр. Критерии фильтрации на «Листе3» взяты из Листа1. Sheet1 содержит данные, полученные из отфильтрованных результатов на Sheet3.

Sheet3 имеет код:

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Range("A1:U14").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("A22:U23"), CopyToRange:=Range("A25:U26"), Unique:=False
End Sub

Это прекрасно работает, если я что-то делаю на Sheet3. Нет проблем. Благодарю вас!

Сначала у меня был код на Sheet1:

Private Sub Worksheet_Change (ByVal Target As Range)
Листы("Лист3").AutoFilter.ApplyFilter
End Sub

Что привело к ошибке «Ошибка выполнения 91, переменная объекта или блок не установлен».

Я изменил код на основе комментариев:

Private Sub Worksheet_Change (ByVal Target As Range)
On Error Resume Next
Листы("Лист3").AutoFilter.ApplyFilter
End Sub

Теперь я не получаю ошибку, но данные на Листе3 и, следовательно, на Листе1 не меняются. Другими словами, событие применения фильтра к Листу3 не происходит, когда я вношу изменения в Лист1. Неважно, если я ударю или щелкните другую ячейку после изменения ячейки критериев фильтра Sheet3, установленной на Sheet1.

Кроме того, я ожидаю, что если бы я хотел иметь несколько ячеек на Листе 1, которые вызывали фильтры на Листах 4 и 5 в дополнение к Листу 3, мне нужно было бы читать код на Листе 1:

Private Sub Worksheet_Change (ByVal Target As Range)
On Error Resume Next
Листы("Лист3").AutoFilter.ApplyFilter
Листы("Лист4").AutoFilter.ApplyFilter
Листы("Лист5").AutoFilter.ApplyFilter
End Sub

Еще раз спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,

Это отличный код, спасибо. Единственная проблема, с которой я сталкиваюсь, это то, что я использую раскрывающийся список на отдельном листе диаграммы. Если я вручную изменю значение в ячейке, связанной с раскрывающимся списком, это сработает. Но когда я пытаюсь просто использовать раскрывающийся список, он не обновляется. есть идеи?
Этот комментарий был сведен к минимуму модератором на сайте
На самом деле у меня есть данные из другого файла Excel, который был импортирован в таблицу Excel с именем «База данных». Затем я импортирую эти данные в тот же файл Excel, но в другой ExcelSheet «Обзор». Я хочу, чтобы при изменении данных в исходном источнике фильтр применялся на листе «Обзор». Заранее благодарю того, кто сможет мне помочь :). PS не могу использовать VBA на первом листе Excel
Здесь еще нет комментариев
Загрузить ещё
Оставляйте свои комментарии
Публикация как гость
×
Оценить этот пост:
0   Характеристики
Предлагаемые места

Подписывайтесь на Нас

Copyright © 2009 - www.extendoffice.ком. | Все права защищены. Питаться от ExtendOffice, | Карта сайта
Microsoft и логотип Office являются товарными знаками или зарегистрированными товарными знаками Microsoft Corporation в США и / или других странах.
Защищено Sectigo SSL