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.