Notifications
Clear all

Excluir linhas com valor diferente de "x"

4 Posts
2 Usuários
0 Reactions
1,079 Visualizações
(@scainet)
Posts: 33
Eminent Member
Topic starter
 

Bom dia,

Estou importando uma lista de um relatório.
Como ela vem com cabeçalho em cada quebra de página, eu preciso remover todos para poder aplicar meus filtros nos dados.

Eu achei uma função que exclui as linhas com determinado valor.
Mas eu gostaria de fazer o inverso. Quero excluir as linhas em que as células da coluna A contenham um valor diferente de "X".

Segue abaixo minha função.
Note que da forma que está ela exclui as linhas onde existe a palavra "teste" na coluna A.

Function ExcluiLinhasPorCriterio(ByVal linhaInicial As Integer, ByVal linhaFinal As Integer, ByVal colunaCriterio As Integer, ByVal criterio As String) As Integer
    Dim linhasExcluidas As Integer
    Dim i As Integer
    linhasExcluidas = 0
    With ActiveSheet
        i = linhaInicial
        While i < linhaFinal
            If CStr(.Cells(i, colunaCriterio).Value) = criterio Then
                .Rows(i).Delete
                linhasExcluidas = linhasExcluidas + 1
            Else
                i = i + 1
            End If
        Wend
    End With
    ExcluiLinhasPorCriterio = linhasExcluidas
End Function

Sub Executa()
    MsgBox "Foram excluídas " & ExcluiLinhasPorCriterio(1, 200, 1, "teste") & " linhas"
End Sub
 
Postado : 26/01/2016 8:01 am
(@mprudencio)
Posts: 2749
Famed Member
 

Eu posso estar enganado mas basta deixar o primerio cabeçalho fora da classificação e classificar todo o resto da tabela os demais cabeçalhos vao ficar juntos basta excluir manualmente.

Muito simples.

Exemplificando na pratica

Suponha que seu cabeçalho esteja na linha 1 entao vc seleciona da linha 2 ate a ultima linha e classifica em ordem alfabetica, e depois excluir os cabeçalhos intermediarios que eles estaram juntos.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 26/01/2016 8:32 am
(@scainet)
Posts: 33
Eminent Member
Topic starter
 

Eu consegui ajeitar a parte do critério ser "diferente de X".

Porém eu precisava que esse "X" fosse uma célula da planilha.
No codigo abaixo eu tenho que digitar no VBA o critério.
Mas eu quero deixar um campo na planilha aonde eu digito e o VBA puxa de lá.

Repare que meu critério no código abaixo é o número "285".

Como poderia fazer isso?

    'Faz a exclusão de linhas conforme critério estabelecido
    Dim lLin As Long
    Application.ScreenUpdating = False
    
    'Altere o nome da planilha abaixo:
    With Sheets("Plan1")
        For lLin = .Cells(.Rows.Count, "A").End(xlUp).Row To 2 Step -1
            If .Cells(lLin, "A") <> 285 Then .Rows(lLin).Delete
            
            'Desafoga os processos pendentes do Windows a cada 100 linhas iteradas:
            If lLin Mod 100 = 0 Then DoEvents
        Next lLin
    End With
 
Postado : 26/01/2016 12:06 pm
(@scainet)
Posts: 33
Eminent Member
Topic starter
 

Eu consegui finalizar meu código para deletar as linhas conforme critério definido.

Porém eu uso a seguinte fórmula depois de fazer a classificação:

{=SOMA(SE(DIA(Plan1!$C$1:$C$1000)=E3;Plan1!$G$1:$G$1000;0))}

Só que a cada nova classificação onde ocorre exclusão de linhas, ela altera essa fórmula reduzindo do valor "1000" a quantia de linhas deletadas.

Como faço para travar essa fórmula no G1000?

Eu tentei deixar G:G, mas trava muito a planilha.

 
Postado : 26/01/2016 12:14 pm