Notifications
Clear all

FILTRO AVANÇADO - Ajuda

42 Posts
2 Usuários
0 Reactions
17.1 K Visualizações
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Olá pessoal, venho pedir vossa ajuda novamente!

Tenho uma planilha de banco de dados com o nome MOVCAIXA2 e preciso criar um filtro de pesquisa avançada em outra planilha.

Os filtros que preciso são: Ano Exercício, Nº OP e Transação de Origem.

Neste tópico o assunto é muito semelhante ao meu, porem não consegui aplicar a solução de lá em meu problema. Lá é para apenas 1 filtro, eu preciso de 3.

É possivel usar a mesma lógica da planilha disponibilizada lá para meu propósito?
É possivel, por exemplo, colocar o ano de exercício 2002 e a planilha buscar todos os registros de 2002, ou colocar Nº OP 500 e ele busca todas as OPs 500 de todos os anos, ou ainda Ano 2002, OP 500, Transação de Origem OPB e ele busca exatamente este registro?

Gostaria de aprender como fazer este filtro avançado para mais adiante acrescentar um período de datas, CPF/CNPJ etc.

Obrigado!

 
Postado : 27/03/2012 1:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!!

Poderia disponibilizar um modelo COMPACTADO, de sua necessidade?

Att

 
Postado : 27/03/2012 1:19 pm
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Segue anexa a planilha.

 
Postado : 27/03/2012 1:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Danyaho0,

Repare que vc pode fazer filtros e selecionar registros de acordo com quaisquer condições.

Neste exemplo montei as consultas para as 10 primeiras colunas de seu arquivo. Vc pode estender se quiser. Basta entender a lógica aplicada.

Sem macro. Só fórmula. Selecione nos combos que montei e veja o resultado. Qq coisa é só falar.

Abs,

 
Postado : 27/03/2012 6:15 pm
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Danyaho0,

Repare que vc pode fazer filtros e selecionar registros de acordo com quaisquer condições.

Neste exemplo montei as consultas para as 10 primeiras colunas de seu arquivo. Vc pode estender se quiser. Basta entender a lógica aplicada.

Sem macro. Só fórmula. Selecione nos combos que montei e veja o resultado. Qq coisa é só falar.

Abs,

Caramba... rebolou com o Excel agora ein???? heheh gostei do resultado.

Só demora a carregar um pouquinho.

Será que na base original vai pesar? 65k de linhas....

 
Postado : 27/03/2012 9:06 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Para enxugar basta vc restringir os combos (adequar às suas necessidades).Coloquei muitas opções para vc ver como é feito.

Qq coisa me fala.

Abs,

 
Postado : 27/03/2012 11:34 pm
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Para enxugar basta vc restringir os combos (adequar às suas necessidades).Coloquei muitas opções para vc ver como é feito.

Qq coisa me fala.

Abs,

Gostaria de implementar uma mudança:

Ordenar os dados que aparecem a partir da coluna BA, é possível incluir na fórmula?

 
Postado : 28/03/2012 6:01 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Veja uma versão mais Rápida e Leve!!!

Você só precisa adaptar exatamente para o que vai usar!!

Qualquer coisa é só retornar

 
Postado : 28/03/2012 11:06 am
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Boa tarde!!

Veja uma versão mais Rápida e Leve!!!

Você só precisa adaptar exatamente para o que vai usar!!

Qualquer coisa é só retornar

Obrigado Alexandre, fiquei hoje deste 8 da matina ajustando meu objetivo em cima do exemplo que o grande Mandrix disponibilizou, porem esta bastante lento e isso não coloquei nem 5% do banco para rodar....

Parece que em VBA a solução será melhor.

Pelo teste rápido que fiz seu exemplo busca apenas se os 3 critérios estiverem preenchidos. Tem como a planilha buscar sendo preenchidos somente 2 critérios ou até 1?

 
Postado : 28/03/2012 11:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Preciso de tudo nos mínimos detalhes.
Na sua primeira postagem, você disse que precisava buscar 3 critérios. :?

Quando você diz buscar 2 ou a até, é...ter a opções de buscar 1, 2, 3 critérios de forma que se não digitar os outros 2 critérios buscaria 1 deles assim mesmo?

Explique de forma detalhada.

Att

 
Postado : 28/03/2012 11:44 am
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Boa tarde!!

Preciso de tudo nos mínimos detalhes.
Na sua primeira postagem, você disse que precisava buscar 3 critérios. :?

Quando você diz buscar 2 ou a até, é...ter a opções de buscar 1, 2, 3 critérios de forma que se não digitar os outros 2 critérios buscaria 1 deles assim mesmo?

Explique de forma detalhada.

Att

Desculpe a imprecisão... :oops: Na primeira postagem eu acreditei que somente 3 critérios me atenderiam, mas ficaria engessada a busca e se eu "desconhecesse" um dos critérios não conseguiria buscar a informação, ai com o exemplo do mandrix vi que poderia buscar livremente por qualquer critério.

É exatamente isso que você falou, a planilha tem 3 opções de critérios, se colocar 1 ela busca, se colocar o 1 e 2 ela também busca, se colocar somente o 3 ela também busca...

 
Postado : 28/03/2012 11:52 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Substitua a rotina atual por essa..caso queira pode usar a estrutura Case

Sub FiltroAle()
    Dim LR As Long
    Rows(6).Resize(100).Delete
    If Range("a2") = "" And Range("b2") <> "" And Range("c2") <> "" Then
    
    With Sheets("A2002").UsedRange
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With
    ElseIf Range("a2") <> "" And Range("b2") = "" And Range("c2") <> "" Then
    
    With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With
    ElseIf Range("a2") <> "" And Range("b2") <> "" And Range("c2") = "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    ElseIf Range("a2") = "" And Range("b2") = "" And Range("c2") <> "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    ElseIf Range("a2") <> "" And Range("b2") = "" And Range("c2") = "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    ElseIf Range("a2") = "" And Range("b2") <> "" And Range("c2") = "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    Else
    With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With

    End If
End Sub
 
Postado : 28/03/2012 12:16 pm
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Boa tarde!!

Substitua a rotina atual por essa..caso queira pode usar a estrutura Case

Sub FiltroAle()
    Dim LR As Long
    Rows(6).Resize(100).Delete
    If Range("a2") = "" And Range("b2") <> "" And Range("c2") <> "" Then
    
    With Sheets("A2002").UsedRange
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With
    ElseIf Range("a2") <> "" And Range("b2") = "" And Range("c2") <> "" Then
    
    With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With
    ElseIf Range("a2") <> "" And Range("b2") <> "" And Range("c2") = "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    ElseIf Range("a2") = "" And Range("b2") = "" And Range("c2") <> "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    ElseIf Range("a2") <> "" And Range("b2") = "" And Range("c2") = "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    ElseIf Range("a2") = "" And Range("b2") <> "" And Range("c2") = "" Then
     With Sheets("A2002").UsedRange
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .Copy Range("a6")
        .AutoFilter
    End With
    
    Else
    With Sheets("A2002").UsedRange
        .AutoFilter Field:=1, Criteria1:=Range("a2")
        .AutoFilter Field:=3, Criteria1:=Range("b2")
        .AutoFilter Field:=11, Criteria1:=Range("c2")
        .Copy Range("a6")
        .AutoFilter
    End With

    End If
End Sub

Perfeito Alexandre!!!

Fiz vários testes, acrescentei uma macro de limpar campos.

Deu alguns probleminhas mas depois que testo algumas vezes eles não acontecem denovo. Problemas como: coloco o Ano e Busco o resultado, coloco o nº Doc. e Busco denovo, ai ele nao filtrava por Ano e Nº doc mas mostrava vários resultados..... porem depois de algumas tentativas eu fazia o mesmo processo e funcionou normalmente.

Não entendi muito bem mas que ela ficou fina ela ficou!!!

Obrigado pela ajuda cara.

Se por ventura eu resolva adicionar mais filtros é só acrescentar novas funções IF seguinto a lógica?

 
Postado : 28/03/2012 1:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Basicamente sim!

With Sheets("A2002").UsedRange ' intervalo com dados
.AutoFilter Field:=3, Criteria1:=Range("b2")' essa parte refere se 3º coluna, pegando como critério a célula B2
.AutoFilter Field:=11, Criteria1:=Range("c2")' essa parte refere se 11º coluna, pegando como critério a célula C2

Att

 
Postado : 28/03/2012 1:52 pm
(@danyahoo)
Posts: 49
Trusted Member
Topic starter
 

Boa tarde!!

Basicamente sim!

With Sheets("A2002").UsedRange ' intervalo com dados
.AutoFilter Field:=3, Criteria1:=Range("b2")' essa parte refere se 3º coluna, pegando como critério a célula B2
.AutoFilter Field:=11, Criteria1:=Range("c2")' essa parte refere se 11º coluna, pegando como critério a célula C2

Att

Acrescentei o banco de dados integralmente (65k de linhas) e está perfeita a consulta!

Amanhã vou trabalhar para adicionar novos critérios.

No mais Obrigado a Você e ao Mandrix que me ajudaram nesta empreitada! :D

 
Postado : 28/03/2012 3:16 pm
Página 1 / 3