Notifications
Clear all

Macro filtrar dados com base em valor de células

10 Posts
3 Usuários
0 Reactions
3,840 Visualizações
(@wagner-aft)
Posts: 28
Eminent Member
Topic starter
 

Boa noite pessoal

Pesquisei no forum, no google e não encontrei algo exatamente como preciso.

Tenho uma planilha com diversas colunas (data, horario, setor, nº processo, autor, etc...). Sei utilizar o autofiltro do excel, mas como a planilha será utilizada por diversas pessoas quero facilitar a utilização dos filtros na tabela. Preciso filtrar apenas em 3 colunas, a principio.

O cabeçalho da tabela começa mais ou menos na linha 10, de modo que nas linhas superiores gostaria de destinar 3 linhas/células (digamos A1, A2 e A3) em que se digitado algum valor a macro aplique o referido valor digitado como filtro da tabela na coluna especificamente a que se refere aquela célula, combinando os filtros caso mais de uma das células específicas seja preenchida.

Enfim, espero que tenha conseguido explicar.

Desde já agradeço!!

 
Postado : 22/11/2017 10:20 pm
gfranco
(@wzxnet7)
Posts: 653
Honorable Member
 

Bom dia.
Sugiro postar um modelo de seu arquivo.
Pode ser com dados fictícios mas mesma estrutura e uma demonstração manual do resultado pretendido.

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 23/11/2017 2:28 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Use o Gravador de Macros

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/11/2017 4:59 am
(@wagner-aft)
Posts: 28
Eminent Member
Topic starter
 

wzxnet7

Segue uma planilha modelo em anexo.

 
Postado : 23/11/2017 7:38 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Tente algo desse tipo.

Sub teste()
    Dim LastRow As Long

    LastRow = Range("A" & Rows.Count).End(xlUp).Row
    
    If Range("E2").Value <> "" And Range("E3").Value = "" And Range("E4").Value = "" Then
        ActiveSheet.Range("A7:H" & LastRow).AutoFilter Field:=2, Criteria1:="=" & Range("E2")
    ElseIf Range("E2").Value <> "" And Range("E3").Value <> "" And Range("E4").Value = "" Then
        ActiveSheet.Range("A7:H" & LastRow).AutoFilter Field:=2, Criteria1:="=" & Range("E2")
        ActiveSheet.Range("A7:H" & LastRow).AutoFilter Field:=5, Criteria1:="=" & Range("E3")
    Else
        ActiveSheet.Range("A7:H" & LastRow).AutoFilter Field:=2, Criteria1:="=" & Range("E2")
        ActiveSheet.Range("A7:H" & LastRow).AutoFilter Field:=5, Criteria1:="=" & Range("E3")
        ActiveSheet.Range("A7:H" & LastRow).AutoFilter Field:=8, Criteria1:="=" & Range("E4")
    End If
End Sub

Veja mais:
https://cse.google.com.br/cse?cx=partne ... valor+de+células&siteurl=www.planilhando.com.br%2Fforum%2Findex.php&ref=www.planilhando.com.br%2F&ss=928j241664j6&oq=vba+filtrar+dados+com+base+em+valor+de+células&gs_l=partner.3...7928.8843.0.9191.5.5.0.0.0.0.286.1002.1j1j3.5.0.gsnos%2Cn%3D13...0.928j241664j6..1ac.1.25.partner..4.1.22.i7FyHUjJwao#gsc.tab=0&gsc.q=vba%20filtrar%20dados%20com%20base%20em%20valor%20de%20c%C3%A9lulas&gsc.page=1

Outra forma seria:

Sub teste()
'Fitra baseado em criétio
Dim LastRow As Long

    LastRow = Range("A" & Rows.Count).End(xlUp).Row

    With ActiveSheet
        .Range("A7:H" & LastRow).AutoFilter Field:=2, Criteria1:=IIf(Trim(.Range("E2").Text) = "", "<>", "=") & .Range("E2").Text
        .Range("A7:H" & LastRow).AutoFilter Field:=5, Criteria1:=IIf(Trim(.Range("E3").Text) = "", "<>", "=") & .Range("E3").Text
        .Range("A7:H" & LastRow).AutoFilter Field:=5, Criteria1:=IIf(Trim(.Range("E8").Text) = "", "<>", "=") & .Range("E8").Text
    End With
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/11/2017 8:37 am
(@wagner-aft)
Posts: 28
Eminent Member
Topic starter
 

alexandrevba,

Utilizei aqui o segundo código e funcionou perfeitamente!!

Porém, vi aqui que preciso adicionar mais um filtro, que seria referente ao horário. Anexei novamente a planilha modelo, já com seu código e com o novo filtro.
O novo filtro o usuário poderá selecionar numa caixa de seleção MANHÃ ou TARDE. Manhã corresponde ao horário entre 08:00 e 12:00 e TARDE entre 14:00 e 23:00.
Veja se consegue filtrar a coluna horário utilizando os intervalos decorrentes da seleção MANHÃ ou TARDE.

Desde já, muitissimo obrigado!

 
Postado : 23/11/2017 2:22 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!

Veja se ajuda...

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/11/2017 6:11 am
(@wagner-aft)
Posts: 28
Eminent Member
Topic starter
 

Boa noite Alexandrevba e demais,

Cara, achei que seu último código havia resolvido meu problema, mas acabei descobrindo agora que não.
Percebi agora que se eu quiser realizar alguma filtragem e não utilizar o horário (não selecionar MANHÃ ou TARDE) a macro executa porém não retorna nenhum valor. Acho que a macro coloca como pesquisa algum valor em branco e aí retorna nenhum dado.
Com o seu primeiro código eu conseguia por exemplo executar a filtragem utilizando apenas 1 opção de filtro ou 2 ou todas as opções. Da forma como está agora (é obrigatório escolher o filtro com o horário).
Tem como corrigir isso?
Obrigado mais uma vez!

 
Postado : 25/11/2017 9:40 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Considerando que os dados de horas na coluna D estão com formatos corretos e as células F5 e G5 também (para que o filtro possa entender isso...).

Use uma condição de estrutura IF.
Tente algo assim:

Sub teste()
'Fitra baseado em criétio
Dim LastRow As Long
Dim strStart As String, strEnd As String

    LastRow = Range("A" & Rows.Count).End(xlUp).Row
    strStart = Range("F5").Value
    strEnd = Range("G5").Value
    If Range("F5").Value = "" Or Range("G5").Value = "" Then
        With ActiveSheet
            .Range("A7:H" & LastRow).AutoFilter Field:=2, Criteria1:=IIf(Trim(.Range("E2").Text) = "", "<>", "=") & .Range("E2").Text
            .Range("A7:H" & LastRow).AutoFilter Field:=5, Criteria1:=IIf(Trim(.Range("E3").Text) = "", "<>", "=") & .Range("E3").Text
            .Range("A7:H" & LastRow).AutoFilter Field:=8, Criteria1:=IIf(Trim(.Range("E4").Text) = "", "<>", "=") & .Range("E4").Text
            .Range("A7:H" & LastRow).AutoFilter Field:=4, Criteria1:=IIf(Trim(.Range("F5").Text) = "", "<>", "=") & .Range("F5").Text
        End With
    Else
        With ActiveSheet
            .Range("A7:H" & LastRow).AutoFilter Field:=2, Criteria1:=IIf(Trim(.Range("E2").Text) = "", "<>", "=") & .Range("E2").Text
            .Range("A7:H" & LastRow).AutoFilter Field:=5, Criteria1:=IIf(Trim(.Range("E3").Text) = "", "<>", "=") & .Range("E3").Text
            .Range("A7:H" & LastRow).AutoFilter Field:=8, Criteria1:=IIf(Trim(.Range("E4").Text) = "", "<>", "=") & .Range("E4").Text
            .Range("A7:H" & LastRow).AutoFilter Field:=4, Criteria1:=IIf(Trim(.Range("F5").Text) = "", "<>", "=") & .Range("F5").Text
            .Range("A7:H" & LastRow).AutoFilter Field:=4, Criteria1:=">=" & strStart, Operator:=xlAnd, Criteria2:="<=" & strEnd
        End With
    End If
End Sub

Eu espero que eu tenha entendi.

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/11/2017 7:30 am
(@wagner-aft)
Posts: 28
Eminent Member
Topic starter
 

Valeu, cara! Muito obrigado!!!

 
Postado : 27/11/2017 9:24 pm