Usuário com melhor resposta
VBA EXCEL - Excluir linhas com critérios

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:53Moderador -
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:58Moderador
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:53Moderador -
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:58Moderador -
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:25Moderador -
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