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.
Você pode achar interessante também este outro artigo aonde os campos são tratados com auto filtros automáticos ao digitar:
Abraço
Marcos Rieper