Vba excel фильтр содержит

Ципихович Эндрю,
выложен фрагмент кода макроса, который делает следующее:

Имеем книгу excel с листом «Лист1». Лист представляет собой таблицу, которая имеет автофильтрацию (данные>фильтр>автофильтр).
В ячейке А1 есть некое значение «значение».
По приведенному выше коду, при запуске макрос фильтрует таблицу по первому столбцу в режиме «равно», подставляя значение ячейки A1 (в нашем случае это слово «значение»). В результате скрываются все строки, значения первых ячеек которых не равно слову «значение».

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

Моя задача изменить код таким образом, чтобы макрос работал не в режиме «равно», а в режиме «содержит». То есть первые ячейки должны строк должны содержать значение, указанное в ячейке A1.

В простом варианте код макроса выглядит как

Visual Basic
1
2
    Sheets("Лист1").Select
    Selection.AutoFilter Field:=1, Criteria1:="=*значение*", Operator:=xlAnd

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

На чтение 11 мин. Просмотров 34.3k.

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

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

Automate Filters with VBA Macros - AutoFilter Guide

Содержание

  1. Скачать файл
  2. Написание макросов для фильтров
  3. Макро-рекордер — твой друг (или враг)
  4. Метод автофильтрации
  5. Написание кода автофильтра
  6. Автофильтр не является дополнением
  7. Как установить номер поля динамически
  8. Используйте таблицы Excel с фильтрами
  9. Фильтры и типы данных
  10. Почему метод автофильтрации такой сложный?

Скачать файл

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

VBA AutoFilters Guide.xlsm (100.5 KB)

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

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

How Often Do You Apply Excel Filters

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

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

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

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

Мы можем легко получить код 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 для
применения фильтра к столбцу. Он также содержит информацию о критериях фильтра.

Метод автофильтрации

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

VBA AutoFilter Automates Filter Drop-down Menus

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

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

Вот пошаговые инструкции по написанию строки кода для автофильтра.

Шаг 1: Ссылка на диапазон или таблицу

Метод AutoFilter является частью объекта Range. Поэтому мы
должны ссылаться на диапазон или таблицу, к которым применяются фильтры на
листе. Это будет весь диапазон, к которому применяются фильтры.

AutoFilter Method is Member of Range Object

Следующие примеры включают / отключают фильтры в диапазоне B3: G1000 на листе автофильтра.

Sub AutoFilter_Range()
'Автофильтр является членом объекта Range
  
  'Ссылка на весь диапазон, к которому применяются фильтры
  'Автофильтр включает / выключает фильтры, когда параметры не указаны.
  Sheet1.Range("B3:G1000").AutoFilter
  
  'Полностью квалифицированный справочник, начиная с уровня Workbook
  ThisWorkbook.Worksheets("AutoFilter Guide").Range("B3:G1000").AutoFilter

End Sub

Вот пример использования таблиц Excel.

Sub AutoFilter_Table()
'Автофильтры на таблицах работают одинаково.

Dim lo As ListObject 'Excel Table

  'Установить переменную ListObject (Table)
  Set lo = Sheet1.ListObjects(1)
  
  'Автофильтр является членом объекта Range
  'Родителем объекта Range является объект List
  lo.Range.AutoFilter
  
End Sub

Метод AutoFilter имеет 5 необязательных параметров, которые
мы рассмотрим далее. Если мы не укажем ни один из параметров, как в приведенных
выше примерах, метод AutoFilter включит / выключит фильтры для указанного
диапазона. Это переключение. Если фильтры включены, они будут выключены, и
наоборот.

Диапазоны или таблицы?

Фильтры работают одинаково как для обычных диапазонов, так и для таблиц
Excel
.

AutoFilter on Regular Range or Excel Table

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

5 (или 6) параметров автофильтра

Метод
AutoFilter имеет 5 (или 6) необязательных параметров, которые используются для
указания критериев фильтрации для столбца. Вот список параметров.

AutoFilter Parameters Optional Screentip in VB Editor VBA

Фильтры на VBA (AutoFilter Method) читать подробное руководство

Страница справки MSDN

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

Шаг 2: Параметр поля

Первый параметр — это Field. Для параметра Field мы указываем число, которое является номером столбца, к которому будет применяться фильтр. Это номер столбца в диапазоне фильтра, который является родителем метода AutoFilter. Это НЕ номер столбца на рабочем листе.

В приведенном ниже примере поле 4 является столбцом
«Продукт», поскольку это 4-й столбец в диапазоне фильтра / таблице.

Field Parameter Value is Column Number of the Range or Table

Фильтр столбца очищается, когда мы указываем только параметр
Field, а другие критерии отсутствуют.

Field Parameter Only Clears Single Column Filter

Мы также можем использовать переменную для параметра Field и
установить ее динамически. Я объясню это более подробно ниже.

Шаг 3: Параметры критериев

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

'Фильтровать столбец «Продукт» для одного элемента
lo.Range.AutoFilter Field:=4, Criteria1:="Product 2"

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

VBA AutoFilter Code to Filter for Single Item in Filter Drop-down Menu

Общие правила для Criteria1 и Criteria2

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

  • Значением критерия является строка, заключенная в кавычки. Есть несколько исключений, когда критерии являются постоянными для периода времени даты и выше / ниже среднего.
  • При указании фильтров для отдельных чисел или дат форматирование чисел должно соответствовать форматированию чисел, применяемому в диапазоне / таблице.
  • Оператор сравнения больше / меньше чем также включен в кавычки перед числом.
  • Кавычки также используются для фильтров для пробелов «=» и не пробелов «<>».

General Rules for Criteria Parameters

'Фильтр на дату, большую или равную 1 января 2015 г.
lo.Range.AutoFilter Field:=1, Criteria1:=">=1/1/2015"

' Оператор сравнения> = находится внутри кавычек
' для параметра Criteria1.

' Форматирование даты в коде соответствует форматированию
' применяется к ячейкам на листе.

Шаг 4: Параметр оператора

Что если мы хотим выбрать несколько элементов из
раскрывающегося списка фильтров? Или сделать фильтр для диапазона дат или
чисел?

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

Фильтры на VBA (AutoFilter Method) читать подробное руководство

Вот ссылка на страницу справки MSDN, которая содержит список констант для перечисления XlAutoFilterOperator.

Operator используется в сочетании с Criteria1 и / или Criteria2, в зависимости от типа данных и типа фильтра. Вот несколько примеров.

'Фильтр для списка нескольких элементов, оператор - xlFilterValues
lo.Range.AutoFilter _
          Field:=iCol, _
          Criteria1:=Array("Product 4", "Product 5", "Product 6"), _
          Operator:=xlFilterValues
'Фильтр для диапазона дат (между датами), оператор xlAnd
lo.Range.AutoFilter _
          Field:=iCol, _
          Criteria1:=">=1/1/2014", _
          Operator:=xlAnd, _
          Criteria2:="<=12/31/2015"

Это основы написания строки кода для метода AutoFilter. Будет сложнее с различными типами данных.

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

Автофильтр не является дополнением

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

Это означает, что это не дополнение. Следующие 2 строки НЕ создадут фильтр для Продукта 1 и Продукта 2. После запуска макроса столбец Продукт будет отфильтрован только для Продукта 2.

'Автофильтр НЕ ДОБАВЛЯЕТ. Это сначала любые фильтры, применяемые
'в столбце перед применением нового фильтра
lo.Range.AutoFilter Field:=4, Criteria1:="Product 3"
  
'Эта строка кода отфильтрует столбец только для продукта 2
'Фильтр для Продукта 3 выше будет очищен при запуске этой линии.
lo.Range.AutoFilter Field:=4, Criteria1:="Product 2"

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

Как установить номер поля динамически

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

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

Use Variable for Filter Field Column Number in VBA with Index Property

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

Номер столбца будет найден при каждом запуске макроса. Нам
не нужно беспокоиться об изменении номера поля при перемещении столбца. Это
экономит время и предотвращает ошибки (беспроигрышный вариант)!

Используйте таблицы Excel с фильтрами

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

  • Нам не нужно переопределять диапазон в VBA, поскольку диапазон данных изменяет размер (строки / столбцы добавляются / удаляются). На всю таблицу ссылается объект ListObject.
  • Данные в таблице легко ссылаться после применения фильтров. Мы можем использовать свойство DataBodyRange для ссылки на видимые строки для копирования / вставки, форматирования, изменения значений и т.д.
  • Мы можем иметь несколько таблиц на одном листе и, следовательно, несколько диапазонов фильтров. С обычными диапазонами у нас может быть только один отфильтрованный диапазон на лист.
  • Код для очистки всех фильтров в таблице легче написать.

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

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

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

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

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

Почему метод автофильтрации такой сложный?

Этот пост был вдохновлен вопросом от Криса, участника The
VBA Pro Course. Комбинации Критерии и Операторы могут быть запутанными и
сложными. Почему это?

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

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

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

Стандартный Автофильтр для выборки из списков — вещь, безусловно, привычная и надежная. Но для создания сложных условий приходится выполнить не так уж мало действий. Например, чтобы отфильтровать значения попадающие в интервал от 100 до 200, необходимо развернуть список Автофильтра мышью, выбрать вариант Условие (Custom), а в новых версиях Excel: Числовые фильтры — Настраиваемый фильтр (Number filters — Custom filter). Затем в диалоговом окне задать два оператора сравнения, значения и логическую связку (И-ИЛИ) между ними:

custom_autofilter4.png

Не так уж и долго, скажут некоторые. Да, но если в день приходится повторять эту процедуру по нескольку десятков раз? Выход есть — альтернативный фильтр с помощью макроса, который будет брать значения критериев отбора прямо из ячеек листа, куда мы их просто введем с клавиатуры. По сути, это будет похоже на расширенный фильтр, но работающий в реальном времени. Чтобы реализовать такую штуку, нам потребуется сделать всего два шага:

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

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

custom_autofilter1.gif

Шаг 2. Добавляем макрос фильтрации

Теперь надо добавить к текущему листу макрос фильтрации по критериям из созданного диапазона Условия. Для этого щелкните правой кнопкой мыши по ярлычку листа и выберите команду Исходный текст (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

Все.

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

custom_autofilter2.gif

Как и в случае с классическими Автофильтром (Filter) и Расширенным фильтром (Advanced Filter), в нашем фильтре макросом можно смело использовать символы подстановки:

  • * (звездочка) — заменяет любое количество любых символов
  • ? (вопросительный знак) — заменяет один любой символ

и операторы логической связки:

  • И — выполнение обоих условий
  • ИЛИ — выполнение хотя бы одного из двух условий

и любые математические символы неравенства (>,<,=,>=,<=,<>).

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

P.S.

  • Если у вас Excel 2007 или 2010 не забудьте сохранить файл с поддержкой макросов (в формате xlsm), иначе добавленный макрос умрет.
  • Данный макрос не умеет работать с «умными таблицами»

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

  • Что такое макросы, куда вставлять код макроса на VBA, как их использовать?
  • Умные таблицы Excel 2007/2010
  • Расширенный фильтр и немного магии

Фильтры на VBA (AutoFilter Method): самое подробное руководство в рунете

Автор Дмитрий Якушев На чтение11 мин. Просмотров2.6k.

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

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

Содержание

  1. Скачать файл
  2. Написание макросов для фильтров
  3. Макро-рекордер — твой друг (или враг)
  4. Метод автофильтрации
  5. Написание кода автофильтра
  6. Шаг 1: Ссылка на диапазон или таблицу
  7. Диапазоны или таблицы?
  8. 5 (или 6) параметров автофильтра
  9. Шаг 2: Параметр поля
  10. Шаг 3: Параметры критериев
  11. Общие правила дляCriteria1 и Criteria2
  12. Шаг 4: Параметр оператора
  13. Автофильтр не является дополнением
  14. Как установить номер поля динамически
  15. Используйте таблицы Excel с фильтрами
  16. Фильтры и типы данных
  17. Почему метод автофильтрации такой сложный?

Скачать файл

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

VBA AutoFilters Guide.xlsm (100.5 KB)

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

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

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

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

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

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

Мы можем легко получить код 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 для применения фильтра к столбцу. Он также содержит информацию о критериях фильтра.

Метод автофильтрации

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

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

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

Вот пошаговые инструкции по написанию строки кода для автофильтра.

Шаг 1: Ссылка на диапазон или таблицу

Метод AutoFilter является частью объекта Range. Поэтому мы должны ссылаться на диапазон или таблицу, к которым применяются фильтры на листе. Это будет весь диапазон, к которому применяются фильтры.

Следующие примеры включают / отключают фильтры в диапазоне B3: G1000 на листе автофильтра.

Sub AutoFilter_Range()

‘Автофильтр является членом объекта Range

  ‘Ссылка на весь диапазон, к которому применяются фильтры

  ‘Автофильтр включает / выключает фильтры, когда параметры не указаны.

  Sheet1.Range(«B3:G1000»).AutoFilter

  ‘Полностью квалифицированный справочник, начиная с уровня Workbook

  ThisWorkbook.Worksheets(«AutoFilter Guide»).Range(«B3:G1000»).AutoFilter

End Sub

Вот пример использования таблиц Excel.

Sub AutoFilter_Table()

‘Автофильтры на таблицах работают одинаково.

Dim lo As ListObject ‘Excel Table

  ‘Установить переменную ListObject (Table)

  Set lo = Sheet1.ListObjects(1)

  ‘Автофильтр является членом объекта Range

  ‘Родителем объекта Range является объект List

  lo.Range.AutoFilter

End Sub

Метод AutoFilter имеет 5 необязательных параметров, которые мы рассмотрим далее. Если мы не укажем ни один из параметров, как в приведенных выше примерах, метод AutoFilter включит / выключит фильтры для указанного диапазона. Это переключение. Если фильтры включены, они будут выключены, и наоборот.

Диапазоны или таблицы?

Фильтры работают одинаково как для обычных диапазонов, так и для таблиц Excel.

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

5 (или 6) параметров автофильтра

Метод AutoFilter имеет 5 (или 6) необязательных параметров, которые используются для указания критериев фильтрации для столбца. Вот список параметров.

Страница справки MSDN

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

Шаг 2: Параметр поля

Первый параметр — это Field. Для параметра Field мы указываем число, которое является номером столбца, к которому будет применяться фильтр. Это номер столбца в диапазоне фильтра, который является родителем метода AutoFilter. Это НЕ номер столбца на рабочем листе.

В приведенном ниже примере поле 4 является столбцом «Продукт», поскольку это 4-й столбец в диапазоне фильтра / таблице.

Фильтр столбца очищается, когда мы указываем только параметр Field, а другие критерии отсутствуют.

Мы также можем использовать переменную для параметра Field и установить ее динамически. Я объясню это более подробно ниже.

Шаг 3: Параметры критериев

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

‘Фильтровать столбец «Продукт» для одного элемента

lo.Range.AutoFilter Field:=4, Criteria1:=»Product 2″

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

Общие правила для Criteria1 и Criteria2

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

  • Значением критерия является строка, заключенная в кавычки. Есть несколько исключений, когда критерии являются постоянными для периода времени даты и выше / ниже среднего.
  • При указании фильтров для отдельных чисел или дат форматирование чисел должно соответствовать форматированию чисел, применяемому в диапазоне / таблице.
  • Оператор сравнения больше / меньше чем также включен в кавычки перед числом.
  • Кавычки также используются для фильтров для пробелов «=» и не пробелов «<>».

‘Фильтр на дату, большую или равную 1 января 2015 г.

lo.Range.AutoFilter Field:=1, Criteria1:=»>=1/1/2015″

‘ Оператор сравнения> = находится внутри кавычек

‘ для параметра Criteria1.

‘ Форматирование даты в коде соответствует форматированию

‘ применяется к ячейкам на листе.

Шаг 4: Параметр оператора

Что если мы хотим выбрать несколько элементов из раскрывающегося списка фильтров? Или сделать фильтр для диапазона дат или чисел?

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

Вот ссылка на страницу справки MSDN, которая содержит список констант для перечисления XlAutoFilterOperator .

Operator используется в сочетании с Criteria1 и / или Criteria2, в зависимости от типа данных и типа фильтра. Вот несколько примеров.

‘Фильтр для списка нескольких элементов, оператор — xlFilterValues

lo.Range.AutoFilter _

          Field:=iCol, _

          Criteria1:=Array(«Product 4», «Product 5», «Product 6»), _

          Operator:=xlFilterValues

‘Фильтр для диапазона дат (между датами), оператор xlAnd

lo.Range.AutoFilter _

          Field:=iCol, _

          Criteria1:=»>=1/1/2014″, _

          Operator:=xlAnd, _

          Criteria2:=»<=12/31/2015″

Это основы написания строки кода для метода AutoFilter. Будет сложнее с различными типами данных.

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

Автофильтр не является дополнением

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

Это означает, что это не дополнение. Следующие 2 строки НЕ создадут фильтр для Продукта 1 и Продукта 2. После запуска макроса столбец Продукт будет отфильтрован только для Продукта 2.

‘Автофильтр НЕ ДОБАВЛЯЕТ. Это сначала любые фильтры, применяемые

‘в столбце перед применением нового фильтра

lo.Range.AutoFilter Field:=4, Criteria1:=»Product 3″

‘Эта строка кода отфильтрует столбец только для продукта 2

‘Фильтр для Продукта 3 выше будет очищен при запуске этой линии.

lo.Range.AutoFilter Field:=4, Criteria1:=»Product 2″

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

Как установить номер поля динамически

Если мы добавим / удалим / переместим столбцы в диапазоне фильтра, то номер поля для отфильтрованного столбца может измениться. Поэтому я стараюсь по возможности избегать жесткого кодирования числа для параметра 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

Номер столбца будет найден при каждом запуске макроса. Нам не нужно беспокоиться об изменении номера поля при перемещении столбца. Это экономит время и предотвращает ошибки (беспроигрышный вариант)!

Используйте таблицы Excel с фильтрами

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

  • Нам не нужно переопределять диапазон в VBA, поскольку диапазон данных изменяет размер (строки / столбцы добавляются / удаляются). На всю таблицу ссылается объект ListObject.
  • Данные в таблице легко ссылаться после применения фильтров. Мы можем использовать свойство DataBodyRange для ссылки на видимые строки для копирования / вставки, форматирования, изменения значений и т.д.
  • Мы можем иметь несколько таблиц на одном листе и, следовательно, несколько диапазонов фильтров. С обычными диапазонами у нас может быть только один отфильтрованный диапазон на лист.
  • Код для очистки всех фильтров в таблице легче написать.

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

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

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

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

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

Почему метод автофильтрации такой сложный?

Этот пост был вдохновлен вопросом от Криса, участника The VBA Pro Course. Комбинации Критерии и Операторы могут быть запутанными и сложными. Почему это?

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

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

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

Источник

Фильтр не фильтрует числа по условию «содержит»

artika2000

Дата: Четверг, 20.07.2017, 22:47 |
Сообщение № 1

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

Здравствуйте. Спасибо автору за пример.
В файле не работает фильтр при выполнении макроса ЭтаКнига.Одновременный_фильтр_на_нескольких_листах_книги «Ctrl+q», дело в формате видимо, но не могу справиться. В какой формат привести стобец «ИНН» чтобы макрос работал корректно.
Заранее благодарен.

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

0948406.xlsm
(44.7 Kb)

Сообщение отредактировал artika2000Четверг, 20.07.2017, 23:35

 

Ответить

_Boroda_

Дата: Пятница, 21.07.2017, 00:02 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Если Ваш вопрос именно про формат, то если все ИНН будут в текстовом формате, то Ваш макрос должен заработать. Причем не просто Текстовый формат, и именно чтобы они были текстом, как А7 на Лист1


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 00:10 |
Сообщение № 3

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

_Boroda_, Добрый вечер, извините меня, я видимо в самых азах 0.
Два дня пытаюсь формат ячеек в столбце ИНН переделать в текстовый, но никак не получается.
если только в каждой ячейке долбить «ENTER». «формат ячеек»- мне не помогает, в видимости моей болезни. Прошу объяснить и помочь, не ругайтесь

 

Ответить

_Boroda_

Дата: Пятница, 21.07.2017, 00:17 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Быстро можно так — где-нибудь сбоку написать

протянуть вниз, скопировать и вставить в столбец А значениями

Или выделить столбец — Данные — Текст по столбцам — Далее — Далее — точку на Текстовый — Готово


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 00:23 |
Сообщение № 5

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

_Boroda_, Спасибо Вам, за Ваш труд.
Попробовал- не получилось у меня в моменте ничего.
Спасибо, я уверен что Вы правы, попробую утром.
С уважением, Артем

 

Ответить

_Boroda_

Дата: Пятница, 21.07.2017, 00:27 |
Сообщение № 6

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Я там в пред. сообщении файлик положил, посмотрите

А можно и не делать ничего

Немного добавил в Ваш макрос, теперь фильтрует и так
В макросе добавки обозначил вот так «‘============»
И комментарии туда написал

В двух словах — сначала делаем все значения текстом, ставим фильтр «содержит» (в тексте это нормально работает), а затем делаем все значения снова числами. А фильтр-то уже сделан и он никуда не денется уже


=======
Добавлено
Все это ночной бред. Так не работает


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Сообщение отредактировал _Boroda_Пятница, 21.07.2017, 10:27

 

Ответить

al-Ex

Дата: Пятница, 21.07.2017, 02:13 |
Сообщение № 7

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

Ранг: Форумчанин

Сообщений: 190


Репутация:

59

±

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


Excel 2010

[offtop]

сначала делаем все значения текстом, ставим фильтр «содержит» (в тексте это нормально работает), а затем делаем все значения снова числами. А фильтр-то уже сделан и он никуда не денется уже

прям. «старик Хоттабыч» — волосок из бороды, дунул >плюнул> пошептал, и «ок».

Сообщение отредактировал al-ExПятница, 21.07.2017, 02:14

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 07:15 |
Сообщение № 8

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

_Boroda_, Доброе утро.
Спасибо за файл, но не рабтает у меня корректно.

После применения фильтра при поиске любого ИНН, содержащегося в таблице, макрос изменяет превоначальный ИНН на ИНН, указанный в ячейке A2, соответствующей каждому листу, это категорически не приветствуется :-)

Будьте добры, помогите подправить, что бы искомое значение не менялось при выполнении макроса
С уважением, Артем

 

Ответить

KuklP

Дата: Пятница, 21.07.2017, 07:39 |
Сообщение № 9

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

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010

Выполните это один раз в своем первоначальном файле:
[vba]

Код

Sub Одновременный_фильтр_на_нескольких_листах_книги()
    Dim sh As Worksheet, r As Range, j&
    For Each sh In ThisWorkbook.Worksheets
        If sh.Visible <> xlSheetHidden Then

            For j = 1 To 10
                If sh.Cells(1, j) = «ИНН» Then
                    With Intersect(sh.UsedRange, sh.Columns(j))
                        .TextToColumns Destination:=.Range(«A1»), DataType:=xlDelimited, _
                           TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                           Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
                        :=Array(1, 2), TrailingMinusNumbers:=True
                    End With
                    Exit For
                End If
            Next
        End If
    Next
End Sub

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

KuklP

Дата: Пятница, 21.07.2017, 07:54 |
Сообщение № 10

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

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010

И кстати, исправьте в своем макросе этот блок так:
[vba]

Код

            If Sheets(i).Cells(1, j) = «ИНН» Then
                ‘если существует стобец «ИНН», то задаем фильтрацию по значению переменной FILTRSTRING
                Sheets(i).Cells(1, j).AutoFilter j, «=*» & FILTRSTRING & «*»
                Exit For
            End If

[/vba]
И эту строку исправьте так:
[vba]

Код

     If Sheets(i).Visible = -1 Then

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPПятница, 21.07.2017, 07:57

 

Ответить

RAN

Дата: Пятница, 21.07.2017, 08:00 |
Сообщение № 11

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

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

Хотел код приложить, да в крынку не лезет

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

8244907.xlsm
(57.2 Kb)


Быть или не быть, вот в чем загвоздка!

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 08:02 |
Сообщение № 12

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

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

Спасибо Вам

 

Ответить

KuklP

Дата: Пятница, 21.07.2017, 08:06 |
Сообщение № 13

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

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010

идет подмена значений в ячейке.

О чем это Вы? Ни мой, ни Ваш старый код никаких значений не меняет. Вернее мой код превращает числа в текст, поэтому его достаточно выполнить один раз.
Вот Ваш файл. Мой макрос уже выполнен. Стоит фильтр по «66». Уберите фильтр — все значения на месте.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPПятница, 21.07.2017, 08:13

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 08:23 |
Сообщение № 14

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

KuklP, Спасибо. Вы вернули файл, с ним вообще не смог отработать. При первой попытке снять фильтр «CTrl+w» в Вашем файле выскакивает Compile Error^Variable not defined, толи столбцы поменяны, не понимаю….

 

Ответить

KuklP

Дата: Пятница, 21.07.2017, 08:29 |
Сообщение № 15

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

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

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


2003-2010

И столбцы и переменные не объявлены. Руками никак нельзя было снять? Вопрос-то был не о снятии. Замените свой макрос:
[vba]

Код

Sub Снятие_одновременной_фильрации()

‘ Снятие_одновременной_фильрации Макрос

‘ Сочетание клавиш: Ctrl+w

‘для снятие фильтрации на всех листах книги
‘начало нужного кода (снятие фильтров)
Dim i&, J&
Dim nam As Integer
nam = Excel.ActiveSheet.Index
Application.ScreenUpdating = False
For i = 1 To Excel.Sheets.Count
    If Excel.Sheets.Item(i).Visible <> xlSheetHidden Then
        Excel.Sheets.Item(i).Select
        For J = 1 To 10
            If Excel.Sheets.Item(i).Cells(1, J) = «ИНН» Then
                Excel.Sheets.Item(i).Cells(1, J).Select
                Excel.Sheets.Item(i).Cells(1, J).AutoFilter Field:=J
                Selection.AutoFilter
            End If
        Next J
    End If
    Next i
    Excel.Sheets.Item(nam).Select
    Application.ScreenUpdating = True
    ‘конец кода
End Sub

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

RAN

Дата: Пятница, 21.07.2017, 08:38 |
Сообщение № 16

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Числовой фильтр по условию «содержит»
[vba]

Код

Sub мяу()
    Dim sh As Worksheet, ar, arkey, a
    Dim i&, j&
    a = Array(48953, 320)
    Set sh = Sheets(1)
    If sh.AutoFilterMode Then
        With sh.AutoFilter
            ar = .Range.Columns(1).Value
            With CreateObject(«Scripting.Dictionary»)
                For i = LBound(ar) To UBound(ar)
                    For j = LBound(a) To UBound(a)
                        If InStr(CStr(ar(i, 1)), CStr(a(j))) Then .Item(CStr(ar(i, 1))) = 1
                    Next
                Next
                arkey = .keys
            End With
            .Range.AutoFilter Field:=1, Criteria1:=arkey, Operator:=xlFilterValues
        End With
    End If
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 08:45 |
Сообщение № 17

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

KuklP, , спасибо.
Но, будьте добры, объясните , пожалуйста. В Вашем файле возвратном: (я по шагам.)
Ctrl+q . Ввел часть любого ИНН , 100% имеюсемся в ячейке , Enter
Вижу строку, в которой имелся этот ИНН, а САМ ИНН другой. снимаю ctrl+w. нет больше искомого ранее инн на листе.
У Вас , прошу прощения, не так?

 

Ответить

_Boroda_

Дата: Пятница, 21.07.2017, 09:07 |
Сообщение № 18

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

artika2000, У Вас явно что-то с файлом. Вы же, надеюсь, не думаете, что мы кладем свои решения, их не проверив у себя? Другими словами — у троих человек все работает, а у Вас …
Поэтому положите сюда свой файл, причем именно тот, в котором происходит замена. Возможно, у Вас там объединенные ячейки или еще что-нибудь. Если там конф. инфориация, то уберите ее или замените. Если файл не влезает по размеру — удалите часть строк снизу.
Но обязательно перед тем, как класть файл, убедитесь, что именно в том файле, который Вы сюда кладете, происходит замена всех ИНН на первое


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 09:12 |
Сообщение № 19

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

RAN, спасибо и Вам за внимание к вопросу. Но именно и в Вашем файле, попробуйте два раза найти один и тот же ИНН…. У меня не получается…. После снятия фильтра Идет подзамена искомого значения. Или это может у меня что?

 

Ответить

artika2000

Дата: Пятница, 21.07.2017, 09:15 |
Сообщение № 20

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

Ранг: Участник

Сообщений: 66


Репутация:

0

±

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


Excel 2013

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

 

Ответить

Like this post? Please share to your friends:
  • Vba excel умные таблицы
  • Vba excel удалить одну строку
  • Vba excel фильтр по значению ячейки
  • Vba excel умножить ячейки
  • Vba excel удалить объект excel