Хобрук: Ваш путь к мастерству в программировании

Автофильтр VBA для Criteria IsLetter/любой текст

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

    With rng
    .AutoFilter Field:=1, Criteria:= "cannot find solution - need [A-Za-z]"
    .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells (xlCellTypeVisible).Rows.Delete

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

Есть ли способ сделать это??

Спасибо за любой совет.

20.08.2020

Ответы:


1

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

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

введите здесь описание изображения

Там выберите содержит и введите ? в качестве значения поиска.

введите здесь описание изображения

Если это соответствует вашим потребностям, это код в VBA:

    .AutoFilter Field:=1, Criteria1:="=*?*", Operator:=xlAnd

Если это не соответствует вашим потребностям, потому что ваш фильтр еще более сложный, единственная идея, которая у меня есть, состоит в том, чтобы создать вспомогательный столбец, написать UDF, который возвращает либо True, либо False в зависимости от того, должно ли значение отображаться или нет, и фильтровать по этому вместо этого вспомогательный столбец (вы можете использовать регулярные выражения в этой определяемой пользователем функции).
Или вручную выполните цикл по своим данным и решите в своем коде, какая строка подходит, но будьте осторожны при удалении данных, либо выполните цикл назад, либо создайте объединение и удалите в один раз - много примеров для этого на SO.

20.08.2020
  • Спасибо @FunThomas. К сожалению '?' не подходит к фильтру. У меня есть цикл, который работает, но это тысячи строк данных, и он занимает слишком много времени среди остального кода, необходимого для запуска, поэтому я надеялся найти более быстрое решение. Столбец представляет собой свободный текст, и мне нужны строки, содержащие только 7-значное число, но я думаю, что проблема в том, что он читается как текст 26.08.2020
  • Если вам нужен цикл и у вас большой объем данных: вы можете значительно ускорить свой код, a) прочитать все данные в массив и перебрать его в цикле и b) создайте переменную диапазона с помощью команды union и удалите все сразу — удаление строк — одна из самых медленных операций в VBA/Excel. См. stackoverflow.com/a/33744707/7599798, чтобы получить представление 26.08.2020
  • Новые материалы

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..