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!!
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.
Bom dia!!
Use o Gravador de Macros
Att
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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
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!
Bom dia!
Veja se ajuda...
Att
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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!
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
Valeu, cara! Muito obrigado!!!