VBA Установить несколько фильтров - PullRequest
0 голосов
/ 05 августа 2020

Я использовал фильтры вручную, но никогда с VBA.

У меня есть следующее:

K2 - Item 1
L2 - Item 2
M2 - Item 3
N2 - Item 4
O2 - Item 5
P2 - Item 6
Q2 - Item 7
R2 - Item 8
S2 - Item 9
T2 - Item 10

затем под каждым пользователем с его элементом. У некоторых может быть несколько элементов (например, P, R, S и T).

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

В настоящее время это делается вручную, но для 10 разных элементов становится Голова болит!

Просто хочу посмотреть, сможет ли кто-нибудь указать мне в правильном направлении, прежде чем я спущусь вниз по кроличьей норе? 1017 * Начали пробовать этот код, и он работает, но обработка занимает вечность (обратная сторона - более 20 тысяч строк данных, которые нужно просеять!)

Sub FilterMasks(mask As String)
    Dim LastRow, RunningNum
    
    LastRow = Sheets("Output").Range("A" & Rows.Count).End(xlUp).Row + 1

    For RunningNum = 3 To LastRow
        Sheets("Output").Rows(RunningNum).EntireRow.Hidden = False
        If mask = "Type" Then
            If Application.WorksheetFunction.CountA(Range("K" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
    
        If mask Like "Item 1" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum)) = 1 Or Application.WorksheetFunction.CountA(Range("L" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 2" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":K" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("M" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 3" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":L" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("N" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 4" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":M" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("O" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 5" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":N" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("P" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 6" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":O" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("Q" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "item 7" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":P" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("R" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 8" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":Q" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("S" & RunningNum & ":T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 9" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":R" & RunningNum)) > 0 Or Application.WorksheetFunction.CountA(Range("T" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
        
        If mask Like "Item 10" Then
            If Application.WorksheetFunction.CountA(Range("J" & RunningNum & ":S" & RunningNum)) > 0 Then
                Sheets("Output").Rows(RunningNum).EntireRow.Hidden = True
            End If
        End If
    Next
    
End Sub````

But I have Filters on all the Headers, was wondering if it'd be smarter to use the Filters rather than the above code!

If so, where would I look at to play around with filters?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...