locked
VBA EXCEL - Excluir linhas com critérios RRS feed

  • Pergunta

  • Olá,

    estou com um pequeno problema, pois não consigo escrever um código que atenda à minha necessidade. Preciso de uma macro em uma planilha de trabalho onde preciso manter certas linhas e excluir outras. A coluna a qual o código vai analisar contém um padrão de informação o qual preciso manter que é, por exemplo: P14733;2;1 - Sempre inicia-se com a letra P, depois uma sequência de números, ";" (ponto e vírgula" e números... Enfim, será sempre assim... As outras informações, as quais preciso excluir são nomes e células em branco. Portanto, preciso excluir tudo o que não tiver este padrão P14733;2;1...

    Escrevi um código baseado numa gravação com um filtro que apliquei, mas parece que não está funcionando, ele está excluindo todas as linhas do relatório, sem deixar nenhuma....

    A intenção do código é funcionar de baixo para cima, varrendo linha a linha até a segunda linha da planilha, pois a primeira é o cabeçalho.

    Dim linhas As Long

    linhas = Plan1.UsedRange.Rows.Count

            For c = linhas To 2 Step -1

    If Range("A" + Cstr(c)).Value <> "P*" And Range("A" + Cstr(c)).Value <> "*;*" Then

    Cells(i, "A").EntireRow.Delete

    End If

    Neste código queria que ele procurasse as células que comecem com "P" e contenham ";" no meio, de acordo com o padrão que mostrei antes aqui...

    Se alguém puder ajudar agradeço!

    Abraços!

    terça-feira, 18 de setembro de 2012 17:23

Respostas

  • Por que não usar a ferramenta de Autofiltro e excluir os dados indesejados? Era o que eu faria.

    Se quiser usar mesmo o VBA,

    Sub Exemplo()
        
        Dim lRow As Long
        Dim lLast As Long
    
        lLast = Plan1.UsedRange.Rows.Count
    
        For lRow = lLast To 2 Step -1
            If Not Cells(lRow, "A") Like "P*;*" Then
                Rows(lRow).Delete
            End If
        Next lRow
    End Sub
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Albarracim quinta-feira, 20 de setembro de 2012 12:28
    terça-feira, 18 de setembro de 2012 20:53
    Moderador
  • Sugiro aproveitar a macro mostrada caso deseja utilizar mais de dois critérios:

    Sub Exemplo()
        
        Dim lRow As Long
        Dim lLast As Long
    
        lLast = Plan1.UsedRange.Rows.Count
    
        For lRow = lLast To 2 Step -1
            If _
              Cells(lRow, "B") Like "*SHP*" Or _
              Cells(lRow, "B") Like "*RTS*" Then
            Else
                Rows(lRow).Delete
            End If
        Next lRow
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Albarracim segunda-feira, 24 de setembro de 2012 18:14
    quinta-feira, 20 de setembro de 2012 20:58
    Moderador

Todas as Respostas

  • Por que não usar a ferramenta de Autofiltro e excluir os dados indesejados? Era o que eu faria.

    Se quiser usar mesmo o VBA,

    Sub Exemplo()
        
        Dim lRow As Long
        Dim lLast As Long
    
        lLast = Plan1.UsedRange.Rows.Count
    
        For lRow = lLast To 2 Step -1
            If Not Cells(lRow, "A") Like "P*;*" Then
                Rows(lRow).Delete
            End If
        Next lRow
    End Sub
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Albarracim quinta-feira, 20 de setembro de 2012 12:28
    terça-feira, 18 de setembro de 2012 20:53
    Moderador
  • Gênio!

    Muito obrigado!

    quinta-feira, 20 de setembro de 2012 12:28
  • Cara,

     caso eu queira utilizar múltiplos critérios para excluir linhas da mesma maneira que fez acima, por exemplo:

    Eu quero excluir as linhas que contém tanto "SHP" quanto "RTS" na coluna B... Como faço para utilizar autofiltro para multiplos critérios?

    Obrigado!

    quinta-feira, 20 de setembro de 2012 13:28
  • Sugiro aproveitar a macro mostrada caso deseja utilizar mais de dois critérios:

    Sub Exemplo()
        
        Dim lRow As Long
        Dim lLast As Long
    
        lLast = Plan1.UsedRange.Rows.Count
    
        For lRow = lLast To 2 Step -1
            If _
              Cells(lRow, "B") Like "*SHP*" Or _
              Cells(lRow, "B") Like "*RTS*" Then
            Else
                Rows(lRow).Delete
            End If
        Next lRow
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Albarracim segunda-feira, 24 de setembro de 2012 18:14
    quinta-feira, 20 de setembro de 2012 20:58
    Moderador
  • Sugiro aproveitar a macro mostrada caso deseja utilizar mais de dois critérios:

    Sub Exemplo()
        
        Dim lRow As Long
        Dim lLast As Long
    
        lLast = Plan1.UsedRange.Rows.Count
    
        For lRow = lLast To 2 Step -1
            If _
              Cells(lRow, "B") Like "*SHP*" Or _
              Cells(lRow, "B") Like "*RTS*" Then
            Else
                Rows(lRow).Delete
            End If
        Next lRow
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br


    Bom dia,

    Tenho uma planilha com varias linhas que preciso eleminar mas preciso considerar que, são em intervalos variados e têm como criterio ao menos 5 colunas que devem ser verificadas ao mesmo tempo. Todas as soluções que encontrei utilizavam apenas uma coluna como criterio. Como deve ser a logica para que isso ocorra?

    Já tentei utilizar If..then. com varios "and" na condição, mas a rotina não conclui assim.

    A planilha que tenho é assim:

    Preciso eliminar todas as linhas quando suas celulas das colunas c,d,e,f,g estejam vazias.

    Só preciso de uma explicação.

    Obrigado!

    quinta-feira, 6 de dezembro de 2012 12:58
  • Usei a seguinte estrutura, mas ele para no segundo item da lista:
        Dim lin As Long
        Dim last As Long
        last = Plan1.UsedRange.Rows.Count
        lin = 5
        With Worksheets("SFP")
            While lin < last
                If (Cells(lin, 7)) = "" Then
                    .Rows(lin).Delete
                Else
                    lin = lin + 1
                End If
            Wend
        End With

    quinta-feira, 6 de dezembro de 2012 13:45
  • Resolvido
        Dim tam2 As Integer
        Dim wsSFP As Worksheet
        Set wsSFP = Sheets("SFP")
        tam2 = wsSFP.Cells.SpecialCells(xlCellTypeLastCell).Row
        Dim lin As Long
        lin = tam2
        With Worksheets("SFP")
            While lin > 5
                If Cells(lin, "G") = "" Then
                    .Rows(lin).Delete
                Else
                    lin = lin - 1
                End If
            Wend
        End With

    • Sugerido como Resposta Fábio D. Medina quinta-feira, 6 de dezembro de 2012 14:01
    • Não Sugerido como Resposta Fábio D. Medina quinta-feira, 6 de dezembro de 2012 14:18
    quinta-feira, 6 de dezembro de 2012 14:01
  • Resolvido
        Dim tam2 As Integer
        Dim wsSFP As Worksheet
        Set wsSFP = Sheets("SFP")
        tam2 = wsSFP.Cells.SpecialCells(xlCellTypeLastCell).Row
        Dim lin As Long
        lin = tam2
        With Worksheets("SFP")
            While lin > 5
                If Cells(lin, "G") = "" Then
                    .Rows(lin).Delete
                Else
                    lin = lin - 1
                End If
            Wend
        End With


    Ainda sim, só esta usando uma coluna como critério.
    quinta-feira, 6 de dezembro de 2012 14:35
  • Fábio,

    Favor criar um novo tópico para suas perguntas e nele, referenciar tópicos semelhantes para as pessoas que forem responder terem uma ideia do que pretende.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 7 de dezembro de 2012 20:25
    Moderador
  • sei que estou 4 anos atrasados mas pode fazer sem usar vba assim:

    insira uma coluna na planilha do lado esquerdo

    preencha a coluna com numeros de 1 a 999999 ou seja até a ultima linha com dados

    entao vai criar um indice para cada linha que sera esse numero.

    ordene a planilha pela coluna que quer eliminar os dados repetidos, depois de ordenados os textos ficaram juntos.

    exclua todas as linhas repetidas

    oredene pela coluna que criou o numero e pronto a planilha volta ao normal sem as linhas repetidas

    quando terminar tudo exclua a coluna da numeracao que foi criada no inicio

    abraços

    marcelo

    quinta-feira, 18 de agosto de 2016 17:30