Este fórum foi descontinuado. LEIA AQUI e participe da Comunidade BABOO :)

Ir para conteúdo
Rodolfo Furtado Ferreira

Macro para apagar somente linhas filtradas

Mensagem Recomendada

Boa noite,

Tenho uma planilha que contém vários dados, mas queria realizar filtros e excluir as linhas do que eu filtrar.

O filtro deveria ser feito na coluna B, primeiramente com os critérios: não contém x E não contém y. Todas as linhas que forem filtradas com esse filtro deveriam ser excluídas.

O próximo filtro seria também na coluna B, mas o critério seria: começa com xxx ou yyy. Todas as linhas que comecem com xxx ou yyy deveriam também ser excluídas.

 

Porém, quando fiz isso através de gravação de macro (para o primeiro filtro somente), o depurador acusa erro no código abaixo, já na primeira linha de selection.autofilter:

Sub Macro1()
'
' Macro1 Macro
'

'
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$M$134").AutoFilter Field:=2, Criteria1:="<>*x*" _
        , Operator:=xlAnd, Criteria2:="<>*y*"
    Rows("1:200").Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.ShowAllData
    Range("C11").Select
End Sub
 

O que posso fazer, ou alguém tem algum código que possa me ajudar com essa necessidade?

 

Obrigado,

Rodolfo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente:

Sub DeletaLinhasFiltradas()
 Dim LR As Long
  Application.ScreenUpdating = False
   With ActiveSheet
    LR = .Cells(Rows.Count, 1).End(3).Row
    .AutoFilterMode = False
    .Range("A1:M" & LR).AutoFilter Field:=2, Criteria1:="<>*x*" _
       , Operator:=xlAnd, Criteria2:="<>*y*"
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
     .Range("A2:M" & LR).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End If
     .AutoFilterMode = False
      .Range("A1:M" & LR).AutoFilter Field:=2, Criteria1:="=xxx*" _
       , Operator:=xlOr, Criteria2:="=yyy*"
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
     .Range("A2:M" & LR).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End If
    .AutoFilterMode = False
   End With
  Application.ScreenUpdating = True
End Sub

 


 

Osvaldo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puxa, Osvaldo, funcionou sim, se eu quiser continuar os filtros seria só eu copiar os If e mudar os parâmetros para o novo filtro que eu deveria fazer? 

 

Além disso, como posso fazer para deixar os botões todos em uma outra sheet, para que ele não apague o botão quando faz o delete da linha?

 

Muito obrigado pelo código!

Compartilhar este post


Link para o post
Compartilhar em outros sites
30 minutos atrás, Rodolfo Furtado Ferreira disse:

... se eu quiser continuar os filtros seria só eu copiar os If e mudar os parâmetros para o novo filtro que eu deveria fazer?  
Exato. Basta repetir a estrutura abaixo para cada novo critério
.AutoFilterMode = False
      .Range("A1:M" & LR).AutoFilter Field:=2, Criteria1:=NovoCritério1 _
       , Operator:=xlOr, Criteria2:=NovoCritério2
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
     .Range("A2:M" & LR).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End If

... como posso fazer para deixar os botões todos em uma outra sheet
Basta substituir  Active Sheet pelo nome da planilha que contém os dados (veja alternativa mais abaixo):
ficaria assim:
With Sheets("NomeDaPlanilha")

... para que ele não apague o botão quando faz o delete da linha?
É possível contornar aumentando a altura da linha 1 e colocando nela os botões.

 

 


 

Osvaldo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×
×
  • Criar Novo...