Filtrar colunas Excel VBA

Objetivo: Como filtrar colunas Excel VBA. Realizar o filtro dos nomes das colunas a partir da digitação, da mesma forma como é utilizado o filtro de linhas no Excel a partir do Autofiltro.

Filtrar colunas Excel VBA 1Uma das funções que ainda faltam ao Excel é o filtro de colunas no Excel. Esta funcionalidade só existe para a filtragem das linhas, mas não para filtrar colunas.

Sendo assim, implementei em Excel/VBA a filtragem de colunas a partir do conteúdo digitado em elemento TextBox muito semelhante ao já utilizado no artigo Lista com Filtro de Dados Automático 3 aonde é demonstrado como realizar o filtro automático á medida em que vai sendo digitado o conteúdo para filtrar as linhas.

O código implementado funciona da seguinte forma. Na imagem seguinte vemos algumas colunas de uma planilha:

Filtrar colunas Excel VBA 2

A coluna que irá sumir é a que está em azul na planilha, ela será oculta quando forem digitadas letras que não se encontram no seu título, veja na imagem seguinte:

Filtrar colunas Excel VBA 3

Na TextBox foi digitado ship, e somente as colunas que contém esta cadeira de caracteres na planilha Excel foram mantidas em exibição, sendo ocultas as outras colunas portanto.

Para implementar esta funcionalidade primeiro tenha uma planilha com os dados dispostos em formato de lista, assim como o anexo deste artigo, e insira uma coluna á esquerda.

Filtrar colunas Excel VBA 4

Agora clique na guia Desenvolvedor, veja aqui como habilitar: Habilitar guia desenvolvedor no Excel, clique no botão Modo Design e insira um Textbox, conforme a imagem e posicione á esquerda das colunas.

Filtrar colunas Excel VBA 5

Agora ainda em modo de Edição, clique duas vezes sobre a Text Box inserida na planilha Excel, ela irá redirecionar ao ambiente Microsoft VBA Excel e conterá algo como Private Sub TextBox1_Change() que faz com que seja efetuada uma ação a cada alteração do conteúdo da Text Box.

Copie e cole o conteúdo seguinte sobrepondo o conteúdo que houver no código VBA.

Private Sub TextBox1_Change()
    Dim i As Long
    Dim lColuna As Long
    
    'Desliga a atualização automática do Excel
    Application.ScreenUpdating = False
    
    'Seleciona todas as células da  planilha
    Cells.Select
    
    'Exibe todas as colunas da planilha
    Selection.EntireColumn.Hidden = False
    
    'Determina a última coluna preenchida
    lColuna = Cells(1, Columns.Count).End(xlToLeft).Column
    
    'Seleciona a célula A1
    Cells(1, 1).Select
    
    'Faz um loop por todas as colunas preenchidas a partir da segunda
    For i = 2 To lColuna
        
        'Verifica se a célula contém a informação pesquisada
        If (UCase(Cells(1, i).Value) Like "*" & UCase(TextBox1.Text) & "*") = False Then
            'Oculta a coluna caso não tenha a informação pesquisada
            Columns(i).EntireColumn.Hidden = True
        End If
    Next i
    
    'Seleciona novamente o textbox para digitar o próximo caracter
    TextBox1.Activate
    
    'Liga a atualização automática do Excel
    Application.ScreenUpdating = True
End Sub

Agora volte ao Excel e tire a sua planilha do modo Design, desmarcando o botão na guia Desenvolvedor. Digite algo na Text Box e veja como os dados das colunas são filtrados.

Abraço

Marcos Rieper