Classificar tabela dinâmica Excel automaticamente

Objetivo: Como classificar uma tabela dinâmica automaticamente no Excel.

Classificar automaticamente tabela dinâmica

A tabela dinâmica no Excel é uma poderosa ferramenta de análise.

Com ela o usuário pode unir grandes massas de dados, criando os seus próprios relatórios com os campos desta base, inclusive criando cálculos. Tudo muito rápido e prático.

No entanto uma das funcionalidades desta ferramenta não é muito prática. A classificação de dados nas tabelas dinâmicas podem ser bastante trabalhosas, principalmente quando se trata de valores.

Para se classificar os dados em uma tabela dinâmica, basta você clicar no botão sobre a coluna e clicar em classificar:

Classificar automaticamente tabela dinâmica Excel

O problema consiste em quando queremos que a tabela dinâmica seja organizada por um determinado campo e este não é o primeiro campo, sendo necessário que todos os campos sejam classificados por este. Para isto deve-se clicar em uma coluna e clicar no botão de classificação e na opção Mais Opções de Classificação, selecionar se será classificado de forma crescente ou decrescente e o campo.

Classificar automaticamente tabela dinâmica Excel 1

Esta operação tem que ser repetida para todos os campos da esquerda para a direita até o campo definido. O que gera um grande trabalho.

Os códigos VBA Excel criados abaixo realizam a classificação de forma crescente ou de forma decrescente, bastando clicar no título da coluna da tabela Excel e clicar no botão Classificar.

insta

Para utilizar o código siga o passo-a-passo deste artigo: Habilitar a guia desenvolvedor no Excel e copiar códigos VBA da internet.

Sub lsClassificarTabelaDinamicaMaiorMenor()
 
'Baseado no site chandoo.org
'   Programmer:     Jeff Weir
'   Contact:        weir.jeff@gmail.com or jeff.weir@HeavyDutyDecisions.co.nz

'Formata a tabela dinâmica com sua formatação preferida, formatação default

'Configurações realizadas
'   1.  Mostrar de forma tabulada os dados
'   2.  Ligar a opção de repetir linhas
'   3.  Desliga os subtotais
'   4.  Liga o total final de coluna
'   5.  Desliga a opção de ajustar a tabela dinâmica
'   7.  Desliga a opção de salvar os dados da tabela dinâmica como arquivo
'   8.  Formata os campos de soma de valor no formato decimal separado por ponto
'   9.  Ajusta as colunas da tabela dinâmica
'   10. Retira do nome dos valores as descrições Contagem, Soma

    Dim pc As PivotCache
    Dim pf As PivotField
    Dim pt As PivotTable
    Dim lo As ListObject
    Dim rng As Range
    Dim strLabel As String
    Dim strFormat As String
    Dim i As Long
    Dim wksSource As Worksheet
    Dim lRange As String
 
 
    'Verifica se estamos lidando com uma versão do Excel que suporta ListObjects
    'Versões superiores ao Excel 2007
    If Application.Version >= 14 Then
 
 
        On Error Resume Next
        Set pt = ActiveCell.PivotTable
        On Error GoTo errhandler

        If pt Is Nothing Then
            MsgBox "Selecione o campo da tabela dinâmica pelo qual quer classificar!"
            GoTo errhandler
        End If
        
        pt.PivotCache.Refresh
        
        lCampo = pt.PivotFields(ActiveCell.Value).Name

        lRange = ActiveCell.Address

        'Limpa a classificação da tabela
        With pt
            If ActiveCell.CurrentRegion.Cells.Count > 1 Then
                For i = 1 To .PivotFields.Count - .DataFields.Count
                    Set pf = .PivotFields(i)
                    With pf
                        .AutoSort xlManual, pf.SourceName
                        On Error Resume Next
                        On Error GoTo errhandler
                    End With
                Next i
            End If
        End With

        'Classifica a tabela pelo campo desejado
        With pt
            If ActiveCell.CurrentRegion.Cells.Count > 1 Then
                For i = .PivotFields.Count - .DataFields.Count - 1 To 1 Step -1
                    Set pf = .PivotFields(i)
                    With pf
                        If pf.Name <> "Values" Then
                            .AutoSort xlDescending, lCampo
                            On Error Resume Next
                            On Error GoTo errhandler
                        End If
                    End With
                Next i
            End If
        End With
 
        'Calcula e atualiza a tela
         With Application
            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = xlAutomatic
        End With
 
        With pt
            .ManualUpdate = False
            .TableRange2.Select
        End With
 
        pt.PivotCache.MissingItemsLimit = xlMissingItemsNone
 
        ActiveCell.CurrentRegion.EntireColumn.AutoFit
 
        Range(lRange).Select
 
    'Tratamento de erros
    Err.Clear
errhandler:
            If Err.Number > 0 Then
                With Application
                    .ScreenUpdating = True
                    .EnableEvents = True
                    .Calculation = xlAutomatic
                End With
                If Err.Number = 1004 Then
                    MsgBox "Selecione o cabeçalho do campo da tabela dinâmica que quer classificar!"
                Else
                    MsgBox "Atenção, ocorreu um erro: Error#" & Err.Number & vbCrLf & Err.Description _
                             , vbCritical, "Error", Err.HelpFile, Err.HelpContext
                End If
            End If
    End If
 
End Sub

Sub lsClassificarTabelaDinamicaMenorMaior()
 
'Baseado no site chandoo.org
'   Programmer:     Jeff Weir
'   Contact:        weir.jeff@gmail.com or jeff.weir@HeavyDutyDecisions.co.nz

'Formata a tabela dinâmica com sua formatação preferida, formatação default

'Configurações realizadas
'   1.  Mostrar de forma tabulada os dados
'   2.  Ligar a opção de repetir linhas
'   3.  Desliga os subtotais
'   4.  Liga o total final de coluna
'   5.  Desliga a opção de ajustar a tabela dinâmica
'   7.  Desliga a opção de salvar os dados da tabela dinâmica como arquivo
'   8.  Formata os campos de soma de valor no formato decimal separado por ponto
'   9.  Ajusta as colunas da tabela dinâmica
'   10. Retira do nome dos valores as descrições Contagem, Soma

    Dim pc As PivotCache
    Dim pf As PivotField
    Dim pt As PivotTable
    Dim lo As ListObject
    Dim rng As Range
    Dim strLabel As String
    Dim strFormat As String
    Dim i As Long
    Dim wksSource As Worksheet
    Dim lRange As String
 
 
    'Verifica se estamos lidando com uma versão do Excel que suporta ListObjects
    'Versões superiores ao Excel 2007
    If Application.Version >= 14 Then
 
 
        On Error Resume Next
        Set pt = ActiveCell.PivotTable
        On Error GoTo errhandler

        If pt Is Nothing Then
            MsgBox "Selecione o campo da tabela dinâmica pelo qual quer classificar!"
            GoTo errhandler
        End If
        
        pt.PivotCache.Refresh
        
        lCampo = pt.PivotFields(ActiveCell.Value).Name
        
        lRange = ActiveCell.Address

        'Limpa a classificação da tabela
        With pt
            If ActiveCell.CurrentRegion.Cells.Count > 1 Then
                For i = 1 To .PivotFields.Count - .DataFields.Count
                    Set pf = .PivotFields(i)
                    With pf
                        .AutoSort xlManual, pf.SourceName
                        On Error Resume Next
                        On Error GoTo errhandler
                    End With
                Next i
            End If
        End With

        'Classifica a tabela pelo campo desejado
        With pt
            If ActiveCell.CurrentRegion.Cells.Count > 1 Then
                For i = .PivotFields.Count - .DataFields.Count - 1 To 1 Step -1
                    Set pf = .PivotFields(i)
                    With pf
                        If pf.Name  "Values" Then
                            .AutoSort xlAscending, lCampo
                            On Error Resume Next
                            On Error GoTo errhandler
                        End If
                    End With
                Next i
            End If
        End With
 
        'Calcula e atualiza a tela
         With Application
            .ScreenUpdating = True
            .EnableEvents = True
            .Calculation = xlAutomatic
        End With
 
        With pt
            .ManualUpdate = False
            .TableRange2.Select
        End With
 
        pt.PivotCache.MissingItemsLimit = xlMissingItemsNone
 
        ActiveCell.CurrentRegion.EntireColumn.AutoFit
 
        Range(lRange).Select
 
    'Tratamento de erros
    Err.Clear
errhandler:
            If Err.Number > 0 Then
                With Application
                    .ScreenUpdating = True
                    .EnableEvents = True
                    .Calculation = xlAutomatic
                End With
                If Err.Number = 1004 Then
                    MsgBox "Selecione o cabeçalho do campo da tabela dinâmica que quer classificar!"
                Else
                    MsgBox "Atenção, ocorreu um erro: Error#" & Err.Number & vbCrLf & Err.Description _
                             , vbCritical, "Error", Err.HelpFile, Err.HelpContext
                End If
            End If
    End If
 
End Sub
Download-button

Abraço

Marcos Rieper

Curso Excel Completo – Do Básico ao VBA

Quer aprender Excel do Básico, passando pela Avançado e chegando no VBA? Clique na imagem abaixo:


Marcos Rieper

Pai, marido, professor e consultor em Excel.

Obrigado por ler este artigo, este blog foi criado para difundir o conhecimento em Excel à todos.

Divulgamos novos artigos nas redes sociais, basta clicar nos ícones abaixo.

Excel não precisa ser complicado

Assine nossa newsletter e receba dicas práticas para dominar o excel