Notifications
Clear all

Filtrar com 2 critérios e extrair conteúdo

9 Posts
3 Usuários
0 Reactions
1,366 Visualizações
(@rafamestre)
Posts: 13
Active Member
Topic starter
 

Boa tarde pessoal, to quebrando a cabeça e não consegui incorporar dois critérios, funciona apenas com 1 critério, numa plan (3) tem critério em duas colunas, filtra na plan (2) e copia para a plan (1) aCrit funciona quando ativo o bCrit que criei não funciona segue código, com certeza montei errado para dois critérios.

Sub Filter_Inter()

Dim rCrit As Range
Dim sCrit As Range
Dim aCrit
Dim bCrit

Application.ScreenUpdating = 0
With Sheets("Plan3")
  Set rCrit = .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
  'Set sCrit = .Range("E2", .Range("E" & .Rows.Count).End(xlUp))
  aCrit = Split(Join(Application.Transpose(rCrit), Chr(1)), Chr(1))
  'bCrit = Split(Join(Application.Transpose(sCrit), Chr(1)), Chr(1))
End With
With Sheets("Plan2")
   
    
  .Range("$Y$1:$Y$50000").AutoFilter Field:=1, Criteria1:=aCrit, Operator:=xlFilterValues
  '.Range("$X$1:$X$50000").AutoFilter Field:=1, Criteria1:=bCrit, Operator:=xlFilterValues
  .Activate
  .Range(.Cells(2, "A"), .Range("Y" & Rows.Count).End(xlUp)).Copy Destination:=Sheets("Plan1").Range("B" & Rows.Count).End(xlUp).Offset(1)
  .ShowAllData
  End With
  Application.ScreenUpdating = 1

End Sub
 
Postado : 18/05/2018 12:26 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Não tenho acesso à sua Planilha mas, até onde sei, Field é um argumento nomeado referente à area(coluna) onde se encontra o critério.

Como você disse que os critérios estão em colunas diferentes , logo o valor de field tem de ser diferente entre os dois. Da forma como está, os dois estão referenciando a coluna.

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 18/05/2018 12:37 pm
(@rafamestre)
Posts: 13
Active Member
Topic starter
 

Não entendi em como aplicar esse field que você citou, segue em anexo. Quando eu mantenho apenas 1 critério ele realiza, ao tentar combinar 2 critérios já não consegui executar. Aguardo ajuda, obrigado.

 
Postado : 18/05/2018 1:56 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Boa tarde, Rafamestre

Vc não pode ter dois Auto-filtros independentes numa mesma planilha. Vc deve considerar o intervalo das colunas Y e Z juntos e aplicar os critérios aos Fields 1 e 2 (colunas Y e Z respectivamente), cada um com seu(s) critérios... Ex.:

Sub Filter_Inter()
...
With Sheets("Plan2")
  .AutoFilterMode = False
  .Range("$Y$1:$Z$50000").AutoFilter Field:=1, Criteria1:=aCrit, Operator:=xlFilterValues
  .Range("$Y$1:$Z$50000").AutoFilter Field:=2, Criteria1:=bCrit, Operator:=xlFilterValues
...
  End With
...
End Sub

Lembrando que Auto-Filtro não faz filtragem com condição OU entre colunas, apenas E.
Se sua intenção era essa, a alternativa mais aproximadas é usar o AdvancedFilter.

 
Postado : 18/05/2018 3:03 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Não consegui acompanhar seu código, daí fiz minha própria versão. veja se te ajuda:

Sub copiar_para_plan1()
Dim ul3, ul2, ul1, ul As Long
ul = Plan1.Range("H" & Rows.Count).End(xlUp).Row
ul2 = Plan2.Range("Y" & Rows.Count).End(xlUp).Row
ul3 = Plan3.Range("A" & Rows.Count).End(xlUp).Row
Plan1.Range("H3:I" & ul).Clear
For j = 2 To ul3
ul1 = Plan1.Range("H" & Rows.Count).End(xlUp).Row
For k = 2 To ul2
If Plan3.Range("A" & j).Value = Plan2.Range("Y" & k).Value And _
Plan3.Range("E" & j).Value = Plan2.Range("Z" & k).Value Then
Plan1.Range("H" & ul1 + 1).Value = Plan2.Range("Y" & k).Value
Plan1.Range("I" & ul1 + 1).Value = Plan2.Range("Z" & k).Value
End If
Next k
Next j
End Sub

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 18/05/2018 3:14 pm
(@rafamestre)
Posts: 13
Active Member
Topic starter
 

xlarruda, é quase isso esqueci de mencionar que se na plan2 conter 10, 20 ou mais linhas repetidas ele deve copiar todas, no caso do seu código ele copia apenas uma e para....ou seja, se ele encontrar a condição quantas vezes for ele vai copiar todas de acordo com o critério estabelecido na plan3.

 
Postado : 21/05/2018 11:15 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Segue Corrigido:

Sub copiar_para_plan1()
Dim ul3, ul2, ul1 As Long
ul2 = Plan2.Range("Y" & Rows.Count).End(xlUp).Row
ul3 = Plan3.Range("A" & Rows.Count).End(xlUp).Row
Plan1.Range("H3:Z1000").Clear
For j = 2 To ul3
For k = 2 To ul2
ul1 = Plan1.Range("H" & Rows.Count).End(xlUp).Row
If Plan3.Range("A" & j).Value = Plan2.Range("Y" & k).Value And _
Plan3.Range("E" & j).Value = Plan2.Range("Z" & k).Value Then
Plan1.Range("H" & ul1 + 1).Value = Plan2.Range("Y" & k).Value
Plan1.Range("I" & ul1 + 1).Value = Plan2.Range("Z" & k).Value
End If
Next k
Next j
End Sub

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 21/05/2018 11:48 am
(@rafamestre)
Posts: 13
Active Member
Topic starter
 

Caraca !!!!! Show de bola, isso mesmo. Muito obrigado pela atenção. Grande abraço.

 
Postado : 21/05/2018 12:39 pm
(@rafamestre)
Posts: 13
Active Member
Topic starter
 

xlarruda, me confundi aqui, no caso se eu quiser copiar a linha inteira que foram encontrados os critérios daí esta fórmula já não se aplica né..

Ele encontra os dois critérios em duas células porém ele leva apenas as células, se ele encontra em y e z ele copia desde a coluna "a" até "z" para a plan1

Devia ser esta etapa que copiava a linha inteira no outro código

.Range(.Cells(2, "A"), .Range("Y" & Rows.Count).End(xlUp)).Copy Destination:=Sheets("Plan1").Range("B" & Rows.Count).End(xlUp).Offset(1)
 
Postado : 21/05/2018 12:59 pm