Filtrando itens por código de grupo e retornando os subgrupos

Olá amigos. Hoje mais uma publicação da seção de Perguntas e Respostas.
Aproveitem!
Pergunta formulada:

Olá Reinaldo!
Preciso de uma grande ajuda.
Estou querendo filtrar, como em um programa windows, por código de Grupo e Subgrupo, da seguinte maneira:

Código Descrição
1 alimentos e bebidas
1.1 trigo
1.2 açúcar

Então… Eu criaria este banco de dados numa planilha e na outra eu gostaria de digitar/filtrar o cód ou nome do Grupo e gostaria que ele me trouxesse na outra coluna apenas os subitens daquele Grupo.
Ex. Eu escolheria o Grupo “Alim e Bebidas” e ele exibiria todos os subitens do grupo 1.
Consegui me fazer entender?
Muito grata,

Resposta Excel do Seu Jeito:
Muito bem!
Desenvolvi uma solução em VBA que vai dar muitas idéias a quem também tiver essa necessidade.
A planilha do excel que executará essa filtragem funcionará como um programinha de geração de relatórios mesmo. O usuário digita o código do grupo e será listado abaixo, todos os subitens desse código de produto. Bem simples.
É claro, essa função poderá tranquilamente ser adaptada para qualquer realidade de gerenciamento. Exemplo: Se você tiver uma listagem de produtos e quiser apenas pesquisar um produto pelo seu código, essa macro também atenderá. Enfim, veja o funcionamento da macro, baixando o arquivo de exemplo no final deste artigo, e entenda como a filtragem é aplicada.
Para fins de exemplo, crie uma planilha chamada “ListaCompleta” e outra chamada “Relatorio”.
O código abaixo deverá ser inserido num módulo:

Option Explicit
Sub ListarItensSubGrupo(ByVal sItem As String)
Dim i As Long
Dim iUltimaLinha As Long
Dim iTamanho As Integer
Dim shListaCompleta As Worksheet
Dim shListaResultados As Worksheet
Dim iLinhaInicial As Long
Dim iLinhaAtual As Long
Dim sItemComPonto As String
    Set shListaCompleta = Sheets("ListaCompleta")
    Set shListaResultados = Sheets("Relatorio")
    iLinhaInicial = 6
    sItemComPonto = sItem & "."
    iTamanho = Len(Trim(sItemComPonto))
    shListaResultados.Unprotect
    With shListaResultados
        .Range(.Cells(iLinhaInicial, 2), .Cells(.Range("A1").SpecialCells(xlLastCell).Row, 4)).ClearContents
    End With
    If iTamanho = 1 Then
        shListaResultados.Protect
        Exit Sub
    End If
    With shListaCompleta
        iUltimaLinha = .Range("A1").SpecialCells(xlLastCell).Row
        iLinhaAtual = iLinhaInicial + 1
        For i = 2 To iUltimaLinha
            If Left(.Cells(i, 1), iTamanho) Like sItemComPonto Then
                shListaResultados.Cells(iLinhaAtual, 2) = .Cells(i, 1).Value
                shListaResultados.Cells(iLinhaAtual, 4) = .Cells(i, 2).Value
                iLinhaAtual = iLinhaAtual + 1
            Else
                If .Cells(i, 1) Like sItem Then
                    shListaResultados.Cells(iLinhaInicial, 2) = .Cells(i, 1).Value
                    shListaResultados.Cells(iLinhaInicial, 4) = .Cells(i, 2).Value
                End If
            End If
        Next i
    End With
    shListaResultados.Protect
End Sub

O código abaixo deverá ser inserido no módulo da planilha “Relatório”:

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Row = 2 And .Column = 2 And .Rows.Count = 1 And .Columns.Count = 1 Then
            Call ListarItensSubGrupo(.Value)
        End If
    End With
End Sub

Para utilizar a ferramenta de pesquisa basta cadastrar toda a listagem na planilha “ListaCompleta” e pesquisar na planilha “Relatorio” digitando o código do grupo. Veja na figura.

Simples e funcional.
Abraços e não esqueça de nos seguir no twitter @exceldoseujeito.

Deixe um comentário