Как сделать очистку в vba

Обновлено: 07.07.2024

Есть столбец C и в нем с 3 по 25 ряд уже вписанны слова - Dear,Meal,Run. Как же прописать макрос, который будет удалять слова другие то есть если колонна содержит (вручную вписать какое -то другое слово или цифру( не важно)) то excel просто удалит это значение. Слова в этой колонне должны быть только эти на другие clearcontent Код который не работает(

Уточните задачу. В столбце 3 удалять слова, которые не равны трем показанным. То есть удалять все, которые не попали в список. И тут же пишете: удалять только слова, указанные вручную. В ячейках по одному слову или по несколько? Столбец 20 - что с ним делать? Или искать в третьем, удалять в 20, как в коде? В общем, уточните, пожалуйста.

@vikttur " В столбце 3 удалять слова, которые не равны трем показанным" - да, " не попали в список. " не попали в интервал(1 до 20) "В ячейках по одному слову или по несколько?" - по одному

1 ответ 1

Неправильный синтаксис проверки. Правильно:

Так правильно с точки зрения синтаксиса, но неправильно логически. Применяется оператор Or (ИЛИ). При такой записи не может быть результата False.

В ячейке слово "Deal":

В ячейке слво "Excel":

В этом случае нужно применять оператор And (И).

Просматриваем строки с 3 по 25. Если в ячейке столбца С значение не равно указанным, очищаем ячейку. Вместо And - каскад If, позволяющий отрезать лишние вычисления.

Автофильтр Excel VBA: полное руководство с примерами

Многие функции Excel также доступны для использования в VBA - и Автофильтр метод - одна из таких функций.

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

Тогда зачем даже использовать автофильтр в VBA?

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

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

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

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

В таком сценарии использование VBA Autofilter может ускорить работу и сэкономить время.

Примечание: Я расскажу об этом примере (о фильтрации данных на основе раскрывающегося списка и копировании на новый лист) позже в этом руководстве.

Синтаксис автофильтра Excel VBA

  • Выражение: Это диапазон, к которому вы хотите применить автоматический фильтр.
  • Поле: [Необязательный аргумент] Это номер столбца, который вы хотите отфильтровать. Это считается слева в наборе данных. Поэтому, если вы хотите отфильтровать данные на основе второго столбца, это значение будет 2.
  • Критерии1: [Необязательный аргумент] Это критерии, на основе которых вы хотите отфильтровать набор данных.
  • Оператор: [Необязательный аргумент] Если вы также используете критерий 2, вы можете объединить эти два критерия на основе Оператора. Для использования доступны следующие операторы: xlAnd, xlOr, xlBottom10Items, xlTop10Items, xlBottom10Percent, xlTop10Percent, xlFilterCellColor, xlFilterDynamic, xlFilterFontColor, xlFilterIcon, xlFilterValues
  • Критерии2: [Необязательный аргумент] Это второй критерий, по которому вы можете фильтровать набор данных.
  • VisibleDropDown: [Необязательный аргумент] Вы можете указать, хотите ли вы, чтобы раскрывающийся значок фильтра отображался в отфильтрованных столбцах или нет. Этот аргумент может иметь значение ИСТИНА или ЛОЖЬ.

Все остальные аргументы, кроме Expression, необязательны.

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

Приведенный выше код просто применит метод автофильтра к столбцам (или, если он уже применен, удалит его).

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

Если у вас есть отфильтрованные данные, он удалит фильтры и покажет вам полный набор данных.

Теперь давайте посмотрим на несколько примеров использования Excel VBA Autofilter, которые прояснят его использование.

Пример: фильтрация данных на основе текстового условия


Приведенный выше код относится к Sheet1, а внутри него - к A1 (которая является ячейкой в ​​наборе данных).

Обратите внимание, что здесь мы использовали Field: = 2, поскольку столбец элемента - это второй столбец в нашем наборе данных слева.

Теперь, если вы думаете - зачем мне это делать с помощью кода VBA. Это легко сделать с помощью встроенного фильтра.

Если это все, что вы хотите сделать, лучше использовать встроенную функцию фильтра.

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

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

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

Пример: несколько критериев (И / ИЛИ) в одном столбце


Следующий код сделает это:

Обратите внимание, что здесь я использовал XLOR оператор.

Это указывает VBA использовать оба критерия и фильтровать данные, если выполняется какой-либо из двух критериев.

Точно так же вы также можете использовать критерий И.

Например, если вы хотите отфильтровать все записи, в которых количество больше 10, но меньше 20, вы можете использовать следующий код:

Пример: несколько критериев с разными столбцами

Предположим, у вас есть следующий набор данных.


С помощью автофильтра вы можете фильтровать несколько столбцов одновременно.

Пример: отфильтровать 10 лучших записей с помощью метода автофильтрации

Предположим, у вас есть следующий набор данных.


Ниже приведен код, который предоставит вам 10 лучших записей (на основе столбца количества):

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

Обратите внимание, что в этом примере, если вы хотите получить 5 лучших элементов, просто измените число в Criteria1: = ”10 ″ с 10 до 5.

Итак, для топ-5 элементов код будет следующим:

Это может выглядеть странно, но независимо от того, сколько топовых элементов вы хотите, значение Operator всегда остается xlTop10Items.

Точно так же приведенный ниже код даст вам 10 нижних элементов:

А если вам нужны 5 нижних элементов, измените число в Criteria1: = ”10 ″ с 10 до 5.

Пример: отфильтруйте 10 процентов лучших с помощью метода автофильтрации

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

Ниже приведен код, который предоставит вам первые 10 процентов записей (в зависимости от столбца количества):

В нашем наборе данных, поскольку у нас есть 20 записей, он вернет 2 верхние записи (что составляет 10% от общего числа записей).

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

Предположим, у вас есть набор данных, как показано ниже:


Пример: копирование отфильтрованных строк на новый лист

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

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

Приведенный выше код проверяет, есть ли отфильтрованные строки в Sheet1 или нет.

И если есть отфильтрованные строки, он скопирует их, вставит новый рабочий лист и вставит эти строки на этот только что вставленный рабочий лист.

Пример: фильтрация данных на основе значения ячейки

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

Что-то вроде того, что показано ниже:

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

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

Ниже приведен код, который это сделает:

Это код события рабочего листа, который выполняется только тогда, когда на листе есть изменение, а целевая ячейка - B2 (где у нас есть раскрывающийся список).

Этот код НЕ помещается в модуль.

Вместо этого его нужно поместить в серверную часть рабочего листа, на котором есть эти данные.

Вот шаги, чтобы поместить этот код в окно кода рабочего листа:

  1. Откройте редактор VB (сочетание клавиш - ALT + F11).
  2. На панели Project Explorer дважды щелкните имя рабочего листа, в котором вы хотите использовать эту функцию фильтрации.
  3. В окне кода рабочего листа скопируйте и вставьте приведенный выше код.
  4. Закройте редактор VB.

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

Это код события рабочего листа, который выполняется только тогда, когда на листе есть изменение, а целевая ячейка - B2 (где у нас есть раскрывающийся список).

Включение и выключение автофильтра Excel с помощью VBA

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

Вы можете использовать приведенный ниже код, чтобы отключить любые предварительно примененные автоматические фильтры:

Этот код проверяет все листы и удаляет все примененные фильтры.

Если вы не хотите отключать фильтры для всего листа, а только для определенного набора данных, используйте следующий код:

Приведенный выше код проверяет, установлены ли уже фильтры или нет.

Если фильтры уже применены, он их удаляет, иначе ничего не делает.

Точно так же, если вы хотите включить автофильтр, используйте следующий код:

Убедитесь, что автофильтр уже применен

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


Показать все данные

Если у вас есть фильтры, примененные к набору данных, и вы хотите показать все данные, используйте приведенный ниже код:

Приведенный выше код проверяет, имеет ли FilterMode значение TRUE или FALSE.

Если это правда, это означает, что был применен фильтр и он использует метод ShowAllData для отображения всех данных.

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

Использование автофильтра на защищенных листах

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

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

Для этого отметьте опцию Использовать автофильтр при защите листа.


Хотя это работает, когда у вас уже есть фильтры, если вы попытаетесь добавить автофильтры с помощью кода VBA, это не сработает.

Поскольку лист защищен, он не позволит запускать какие-либо макросы и вносить изменения в автофильтр.

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

Ниже приведен код, который защитит лист, но в то же время позволит вам использовать в нем фильтры, а также макросы VBA.

Этот код необходимо поместить в окно кода ThisWorkbook.

Вот шаги, чтобы поместить код в окно кода ThisWorkbook:

Как только вы откроете книгу и включите макросы, он автоматически запустит макрос и защитит Sheet1.

Однако перед этим он укажет EnableAutoFilter = True, что означает, что фильтры будут работать и на защищенном листе.

Кроме того, он устанавливает для аргумента UserInterfaceOnly значение True. Это означает, что пока рабочий лист защищен, код макроса VBA будет продолжать работать.

Вам также могут понравиться следующие руководства по VBA:

Итог: узнайте, как очистить все фильтры и фильтры в одном столбце с помощью макросов VBA. Включает примеры кода для регулярных диапазонов и таблиц Excel.

Уровень мастерства: Средний

VBA Code to Clear Filters in Excel

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

VBA AutoFilters Guide.xlsm (100.5 KB)

Очистить все фильтры из диапазона

Мы используем метод ShowAllData, чтобы очистить все фильтры, примененные к диапазону.

Clear All Filters on Sheet or Table with ShowAllData Method in VBA

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

Ошибка метода ShowAllData

Если к любому столбцу не применены фильтры, метод ShowAllData вызовет ошибку. Это ошибка времени выполнения ‘1004 с описанием:
Method ‘ShowAllData’ of object ‘_Worksheet’ failed.

VBA Clear Filters Error Method ShowAllData of Object Worksheet failed

Следующая строка On Error Resume Next будет игнорировать эту ошибку. При ошибке GoTo 0 сбрасывается, поэтому ошибки возникают в любых строках кода ниже.

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

Очистить все фильтры из таблицы Excel

Чтобы очистить все фильтры таблицы Excel (ListObject), мы также используем метод ShowAllData. В этом случае ShowAllData является членом свойства AutoFilter объекта ListObject.

Очистить все фильтры во всех таблицах на листе

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

Очистить фильтры в одной колонке

Чтобы очистить фильтры для одного столбца, мы используем метод AutoFilter. Мы ссылаемся только на параметр Field и устанавливаем значение для номера столбца, который мы хотим очистить.

Clear Filter on Single Column VBA AutoFilter Method Field Only

Поле — это номер столбца диапазона, к которому применяются фильтры, а не номер столбца рабочего листа.

Field Parameter Value is Column Number of the Range or Table

Тот же метод используется для очистки фильтров, примененных к столбцу в таблице. В этом случае метод AutoFilter является членом объекта Range объекта ListObject.

Фильтры и типы данных

Параметры раскрывающегося меню фильтра изменяются в зависимости от типа данных в столбце. У нас есть разные фильтры для текста, чисел, дат и цветов. Это создает МНОГО различных комбинаций операторов и критериев для каждого типа фильтра.

Я создал отдельные статьи для каждого из этих типов фильтров. Статьи содержат пояснения и примеры кода VBA.

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

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

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

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

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

Как очистить кеш Excel

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

Отключить список последних документов

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

Очистить кеш сводной таблицы

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

Использование параметров сводной таблицы

  1. Кликните правой кнопкой мыши ячейку в сводной таблице. Появится контекстное меню.


Использование кода VBA

Для этого вы также можете использовать программу Microsoft Visual Basic для приложений. Основным преимуществом этого метода является то, что он охватывает все сводные таблицы.

    Откройте файл, для которого вы хотите очистить кеш сводных таблиц, нажмите Alt + F11, чтобы открыть Microsoft Visual Basic для приложений.


Очистка кэша Office вручную

Используйте Центр загрузки Office

В Windows 8 и 8.1 доступ к параметру поиска осуществляется при наведении курсора мыши на правый нижний угол экрана. Это будет один из предложенных вариантов.



Использовать очистку диска

Программа очистки диска Windows помогает удалять временные файлы всех видов, включая документы Office. Очистку диска можно найти так же, как и Центр загрузки Office.


Как часто вы очищаете кеш в Excel? Excel работает быстрее? Как это влияет на ваш компьютер? Дайте нам знать в комментариях ниже.

Читайте также: