Как отфильтровать уже отфильтрованные значения таблице Excel - VBA

Узнай цену своей работы

Формулировка задачи:

Привет. С помошью команды:
автоматически отфильтровал по первому полю таблицу с данными (UsedRange) по значению из массива filter. А теперь как мне из этого отфильтрованного объема данных отфильтровать дополнительно но уже по другому полю (например №2)?

Решение задачи: «Как отфильтровать уже отфильтрованные значения таблице Excel»

textual
Листинг программы
Sub Procedure_1()
    
    Dim mySheet As Excel.Worksheet
    Dim myAutFilter As Excel.AutoFilter
    Dim mySingleFilter As Excel.Filter
    Dim myArray() As Variant
    Dim i As Long
    
    '1. Даём VBA-имя "mySheet" активному листу для удобства написания кода:
        'когда будем ставить точку, то будет появляться список членов.
    Set mySheet = ActiveSheet
    
    '2. Даём VBA-имя автофильтру, который есть на активном листе.
    Set myAutFilter = mySheet.AutoFilter
    
    '3. Автофильтр состоит из нескольких столбцов Excel-листа.
    'Входит столбец в автофильтр или нет, можно посмотреть
        'по наличие кнопки-стрелки в столбце.
    'Дадим VBA-имя "mySingleFilter" первому столбцу в автофильтре.
    Set mySingleFilter = myAutFilter.Filters(1)
    
    '4. Смотрим, выбирал ли пользователь чего-нибудь.
    If mySingleFilter.On = False Then
        'Если ничего не выбирал.
        'Выводим результат в View - Immediate Window.
        Debug.Print "Пользователь ничего не выбрал."
        'Выходим из процедуры.
        Exit Sub
    End If
    
    '5. Выводим параметры фильтра.
    
    'Узнаём, сколько пунктов выбрано в фильтре
        '(это флажки в программе "Excel" в автофильтре).
    
    '5.1. Если выбран один флажок, то данные берутся из свойства "Criteria1".
        'Параметр "Criteria2" не существует.
    If mySingleFilter.Count = 1 Then
        Debug.Print mySingleFilter.Criteria1
    '5.2. Если выбрано два флажка, то данные берутся
        'из свойств "Criteria1" и "Criteria2".
    ElseIf mySingleFilter.Count > 0 And mySingleFilter.Count < 3 Then
    
        Debug.Print mySingleFilter.Criteria1
        Debug.Print mySingleFilter.Criteria2
        
    '5.3. Если выбрано более двух флажков, то "Criteria1" возвращает 
        'массив данных, а "Criteria2" не существует.
    ElseIf mySingleFilter.Count > 2 Then
    
        myArray() = mySingleFilter.Criteria1
            
        For i = 1 To UBound(myArray) Step 1
            
            Debug.Print myArray(i)
            
        Next i
        
    End If
    
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы