Classificação automática no Excel

Classificação automática no Excel

Objetivo: Demonstrar como realizar o filtro automático ao dar um duplo clique em uma coluna utilizando VBA Excel.

Introdução

Muitas vezes utilizamos uma planilha diariamente e temos que classificar os dados várias vezes, o que significa que você terá que realizar esta classificação pelo caminho natural do Excel de selecionar a planilha, clicar na guia Dados->Classificar e escolher a coluna.

Neste artigo foi criado um exemplo de como aliar o Excel e o VBA para realizar esta classificação automaticamente ao dar um duplo clique sobre a coluna que se deseja classificar.

Como foi feito

Foi inicialmente criada uma lista de dados Excel com os títulos descritos sobre cada uma das colunas.

Esta será a nossa lista de exemplo.

Após isso é necessário algum conhecimento de VBA para realizar a tarefa, mas o exemplo pode ser replicado para outras planilhas.

Foi criado então um evento de escuta da planilha intitulada “Lista”, que ficará aguardando o duplo clique do mouse e se o mesmo for realizado na primeira linha e se esta estiver preenchida com alguma palavra então o VBA irá desativar os eventos e chamar  oprocedimento VBA que realiza a classificação automática de dados.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Row = 1 And Target.Value  "" Then
        Application.EnableEvents = False
        lsClassificarAutomatico Target
        Application.EnableEvents = True
    End If
    Cancel = True
End Sub

Realizando a classificação automática com Excel e VBA

Para realizar a classificação automática foi criado o seguinte código VBA Excel que está com seu código devidamente comentado:

Sub lsClassificarAutomatico(ByVal vTarget As Range)

    Dim lUltimaLinahAtiva   As Long
    Dim lColuna             As String
    Dim lUltimaColuna       As String
    
    'Desabilita a atualização visual da tela
    Application.ScreenUpdating = False
       
    'Identifica a última coluna ativa
    lUltimaColuna = Left(Replace(Cells(1, Cells.Columns.Count).End(xlToLeft).Address, "$", ""), Len(Replace(Cells(1, Cells.Columns.Count).End(xlToLeft).Address, "$", "")) - 1)
    
    'Identifica a última linha ativa
    lUltimaLinhaAtiva = Worksheets(vTarget.Worksheet.Name).Cells(Worksheets(vTarget.Worksheet.Name).Rows.Count, vTarget.Column).End(xlUp).Row
    
    'Identifica a coluna clicada
    lColuna = Left(Replace(vTarget.Address, "$", ""), Len(Replace(vTarget.Address, "$", "")) - 1)
    
    'Seleciona a lista de dados
    Columns("A:" & lUltimaColuna).Select
    
    'Limpa os campos classificados
    ActiveWorkbook.Worksheets(vTarget.Worksheet.Name).Sort.SortFields.Clear
    
    'Realiza a nova classificação pela coluna selecionada
    ActiveWorkbook.Worksheets(vTarget.Worksheet.Name).Sort.SortFields.Add Key:=Range(lColuna & "2:" & lColuna & lUltimaLinhaAtiva) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(vTarget.Worksheet.Name).Sort
        .SetRange Range("A:" & lUltimaColuna)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    vTarget.Select
    
    'Habilita a atualização visual da tela
    Application.ScreenUpdating = True
End Sub

Funcionamento

Ao dar o duplo clique na coluna que deseja classificar, o código VBA Excel que está aguardando que seja realizado o duplo clique na primeira coluna irá identificar esta ação e realizar a chamada ao procedimento lsClassificarAutomatico que por sua vez irá limpar a classificação atual e aplicar a nova classificação pela coluna selecionada.
[saiba_mais]

Você pode achar interessante também este outro artigo aonde os campos são tratados com auto filtros automáticos ao digitar:

http://guiadoexcel.com.br/planilha-com-filtro-automatico

Abraço

Marcos Rieper