none
Macro VBA - Loop Excluir Intervalo RRS feed

  • Pergunta

  • Quem poderia me ajudar!

    Sou iniciante em VBA. Estou querendo editar uma macro via loop para excluir o intervalo "Xerife, Yasmin, " ", Kelsen", que se repete na coluna NOMES, conforme planilha exemplo abaixo. Na planilha original o intervalo a ser excluído se repete centenas de vezes na coluna.



    1  NOMES
    2  Ana
    3  Xerife
    4  Yasmin
    5
    6  Kelsen
    7  Badu
    8  Xerife
    9  Yasmin
    10
    11 Kelsen
    12 Carlos
    13 Xerife
    14 Yasmin
    15
    16 Kelsen
    17 Dudu
    18 Xerife
    19 Yasmin
    20
    21 Kelsen
    22 Eduardo
    23 Xerife
    24 Yasmin
    25
    26 Kelsen
    27 Francisco
    28 Xerife
    29 Yasmin
    30 
    31 Kelsen
    32 Gardenia
    33 Xerife
    34 Yasmin
    35
    36 Kelsen
    37 Holanda
    quinta-feira, 13 de dezembro de 2018 18:29

Respostas

  • Sub deletar()
    Dim linha As Integer, limite As Integer, X As Integer
    linha = 2
    limite = 37
    'Linha deve sempre iniciar com o 2, considerando que a primeira linha é sempre o cabeçalho
    'Limite, é o número máximo de linhas que contém os dados! No seu exemplo, foi até a linha 37! Caso a lista aumente, esse número deve ser alterado!
    'X é um auxiliar para não gerar o loop infinito, pois as células abaixo do ultimo registro são todas vazias, o que acaba gerando o loop infinito.
    
    Do Until X = limite
        If Cells(linha, 2) = "Xerife" Or Cells(linha, 2) = "Yasmin" Or Cells(linha, 2) = "Kelsen" Or Cells(linha, 2) = "" Then
            Cells(linha, 2).EntireRow.Delete
            linha = linha - 1
        End If
    
    linha = linha + 1
    X = X + 1
    Loop
    MsgBox "Fim da Rotina"
    End Sub
    

    Ao adicionar a condição da célula vazia, gerou o loop infinito! Adicionei uma variável para controlar isso! Veja se ajuda!

    Se na sua planilha, a esquerda dos nomes houver uma coluna (coluna A) com por exemplo uma sequência, da para melhorar o código tirando a variável X e a variável limite, e alterando a linha Do Until com a seguinte instrução:

    Do Until cells(linha,1)=""

    Att.

    • Marcado como Resposta BSAlmeida segunda-feira, 17 de dezembro de 2018 23:41
    segunda-feira, 17 de dezembro de 2018 10:28

Todas as Respostas

  • Não sei se entendi bem, mas se é só para remover os dados duplicados, vc pode usar a função de remover duplicatas no excel.
    quinta-feira, 13 de dezembro de 2018 18:50
  • Não. Eu gostaria de editar uma macro para deletar as linhas do intervalo, usando loop. OK!
    quinta-feira, 13 de dezembro de 2018 23:20
  • Sub deletar()
    Dim linha As Integer, limite As Integer
    linha = 2
    limite = 37
    
    Do Until linha = limite
        If Cells(linha, 2) = "Xerife" Or Cells(linha, 2) = "Yasmin" Or Cells(linha, 2) = "Kelsen" Then
            Cells(linha, 2).EntireRow.Delete
            linha = linha - 1
        End If
        
    linha = linha + 1
    Loop
    MsgBox "Fim da Rotina"
    End Sub
    
    Veja se ajuda! Em todo caso, da para adaptar.
    sexta-feira, 14 de dezembro de 2018 09:27
  • Ajuda em parte, porque a célula em branco do intervalo não foi excluída. Tem justificativa? 
    sexta-feira, 14 de dezembro de 2018 12:55
  • Não coloquei a condição para célula vazia no IF conforme você pode ver abaixo:

    Sub deletar()
    Dim linha As Integer, limite As Integer
    linha = 2
    limite = 37
    
    Do Until linha = limite
        If Cells(linha, 2) = "Xerife" Or Cells(linha, 2) = "Yasmin" Or Cells(linha, 2) = "Kelsen" Or Cells(linha, 2) = "" Then
            Cells(linha, 2).EntireRow.Delete
            linha = linha - 1
        End If
        
    linha = linha + 1
    Loop
    MsgBox "Fim da Rotina"
    End Sub
    

    sexta-feira, 14 de dezembro de 2018 18:22
  • A macro deletas as linhas, mas continua com loop infinito. Quando você interrompe a depuração indica a instrução "linha = linha -1".
    sábado, 15 de dezembro de 2018 11:07
  • Sub deletar()
    Dim linha As Integer, limite As Integer, X As Integer
    linha = 2
    limite = 37
    'Linha deve sempre iniciar com o 2, considerando que a primeira linha é sempre o cabeçalho
    'Limite, é o número máximo de linhas que contém os dados! No seu exemplo, foi até a linha 37! Caso a lista aumente, esse número deve ser alterado!
    'X é um auxiliar para não gerar o loop infinito, pois as células abaixo do ultimo registro são todas vazias, o que acaba gerando o loop infinito.
    
    Do Until X = limite
        If Cells(linha, 2) = "Xerife" Or Cells(linha, 2) = "Yasmin" Or Cells(linha, 2) = "Kelsen" Or Cells(linha, 2) = "" Then
            Cells(linha, 2).EntireRow.Delete
            linha = linha - 1
        End If
    
    linha = linha + 1
    X = X + 1
    Loop
    MsgBox "Fim da Rotina"
    End Sub
    

    Ao adicionar a condição da célula vazia, gerou o loop infinito! Adicionei uma variável para controlar isso! Veja se ajuda!

    Se na sua planilha, a esquerda dos nomes houver uma coluna (coluna A) com por exemplo uma sequência, da para melhorar o código tirando a variável X e a variável limite, e alterando a linha Do Until com a seguinte instrução:

    Do Until cells(linha,1)=""

    Att.

    • Marcado como Resposta BSAlmeida segunda-feira, 17 de dezembro de 2018 23:41
    segunda-feira, 17 de dezembro de 2018 10:28
  • Ewerton,

    Ok!. Agora deu tudo certo. Muito grato pela sua ajuda.

    segunda-feira, 17 de dezembro de 2018 23:42