Filtrando tabelas dinâmicas com critérios de filtro em vários campos

0

Estou criando uma planilha de marketing para o escritório. Há duas coisas principais que estou tendo dificuldade em realizar:

1) Criando um painel de gráficos dinâmicos a partir de dados de origem (~ 3000 linhas)   2) Filtrar os dados por representante de vendas, mês e trimestre

Eu tenho trabalhado no excel e com tabelas por cerca de 6 meses, e estou bastante confortável trabalhando com tabelas, tabelas dinâmicas e gráficos para o acima mencionado; mas só recentemente comecei a aprender scripts em VBA para criar macros.

Minha pergunta é: como posso aplicar mais de um filtro por tabela usando os botões. Em outras palavras, quero poder clicar em button A que filtra as vendas de Jim. Então, quero poder clicar em outro botão, button B , que, além de filtrar as vendas para Jim, também filtra as vendas da Janet.

Outra ideia que tive foi usar caixas de seleção para criar vários filtros para cada gráfico, mas não sei como usar caixas de seleção com tabelas dinâmicas.

Não posso usar segmentações de dados devido a problemas de compatibilidade (Mac, Excel anteriores a '07, etc.) Isso pode ser feito?

Obrigado antecipadamente.

    
por Wesley Koerber 18.01.2018 / 06:45

1 resposta

0

Eu gostaria de sugerir-lhe uma solução que é muito mais fácil e rápida. Se você usar este código VBA, não precisará criar muitos botões.

Tudo o que você precisa fazer.

  1. Selecione o intervalo de dados inteiro, incluindo as linhas de cabeçalho, e vá para a caixa de nome ou pressione a aba de fórmulas e selecione Definir nome e NOME o intervalo de dados .

  2. Copie este código VBA usando o VBE (Editor do Visual Basic).

  3. Se tudo estiver pronto, clique duas vezes no nome do vendedor.

O Excel filtrará registros, usando o NAME clicado.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim rgTable As Range
    Dim rgData As Range
    Dim xColumn As Integer

    On Error Resume Next

    Application.ScreenUpdating = False

    Set rgTable = Range("SALES")

    With rgTable
        Set rgData = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)

        If Not Application.Intersect(ActiveCell, rgData.Cells) Is Nothing Then
            xColumn = ActiveCell.Column - .Column + 1

            If ActiveSheet.AutoFilterMode = False Then
                .AutoFilter
            End If

            If ActiveSheet.AutoFilter.Filters(xColumn).On = True Then
                .AutoFilter Field:=xColumn
            Else
                .AutoFilter Field:=xColumn, Criteria1:=ActiveCell.Value
            End If
        End If

    End With

    Set rgData = Nothing
    Set rgTable = Nothing

    Application.ScreenUpdating = True

End Sub

NB:

1.Este Código foi testado por mim antes de publicar aqui como Solução.

2. Estou sugerindo o método de clique duplo, com base em suas necessidades.

3. Na verdade, usando esse código, o Excel filtra os registros apenas no NOME DO HOMEM DE VENDAS, o que significa que é um filtro de CRITÉRIOS SIMPLES. Se você quiser adicionar mais Critérios, o Código precisará ser REVISADO.

Espero que isso ajude você.

    
por 18.01.2018 / 09:42