Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
FSoares.FCS

Procurar e Excluir via VBA

Recommended Posts

Olá galera preciso de uma ajuda estou tentando montar um função no vba para localizar um conteúdo em um planilha e excluir, com a descrição Range("A:H").Find(pula_aba2).EntireRow.Delete eu consigo localizar e excluir só não estou conseguindo montar um Loop para que encontre o próximo conteúdo e assim sucessivamente.

segue abaixo que montei:

Sub Exemplo()
Set W = Sheets("C.Custo")
            W.Select
            W.Range("L2").Select
            pula_aba2 = W.Range("L2")

Set Y = Sheets("Balancete")
            Y.Select
            Y.Range("A1").Select
  'Estrutura de Repetição
Do While W.Range("L2") <> " "
       Y.Select
   Range("A:H").Find(pula_aba2).EntireRow.Delete
  W.Select
     ActiveCell.Offset(1, 0).Select
     pula_aba2 = ActiveCell.Value

Loop
End Sub
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se é isso a macro faz varredura nas col A ate H e busca todas as correspondências e exclui a linha inteira

Sub Exemplo_1()
Dim rng As Range, rngDel As Range, sAdrs As String, j As Long

Set W = Sheets("C.Custo")
    pula_aba2 = W.Range("L2")
Set Y = Sheets("Balancete")
            
With Y
   
   For j = 1 To 8 ' faz loop nas col A ate H
     
     Set rng = .Columns(j).Find(pula_aba2)
      If Not rng Is Nothing Then
         sAdrs = rng.Address
       Do
        If rngDel Is Nothing Then
         Set rngDel = rng                'agrupa cel encontradas
         Else
         Set rngDel = Union(rngDel, rng) 'agrupa cel encontradas
        End If
       Set rng = .Columns(j).FindNext(rng)
       Loop While Not rng Is Nothing And sAdrs <> rng.Address
      
      End If
      
      If Not rngDel Is Nothing Then
        rngDel.EntireRow.Delete 'Exclui as linhas encontradas
      End If
      
      Set rngDel = Nothing
 
   Next

End With

End Sub

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Boa tarde Basole, primeiro quero lhe agradecer, muito obrigado pela explicação, sou iniciante nesta questão essa função funciona perfeitamente só preciso acrescentar a seguinte situação.

    A função irá pegar as informações contante na Plan C.Custo na Range L2 e executar a função que passou na Plan Balancete e depois precisa voltar na Plan C.Custo e descer um linha "exemplo Range L3" e executar novamente a função até que chegue em uma Range vazia da Plan C.Custo isso automaticamente.

    Tentei incluir as linhas abaixo:

     W.Select
          ActiveCell.Offset(1, 0).Select
         pula_aba2 = ActiveCell.Value
         
         If ActiveCell.Value = "" Then
         Exit Sub

     

    Desde já obrigado.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Ok entendi, veja se é isso: 

    Sub Exemplo_1()
    Dim rng As Range, rngDel As Range, sAdrs As String, j As Long, i As Long, W As Worksheet, _
    Y As Worksheet, pula_aba2 As String
    
    Set W = Sheets("C.Custo")
        pula_aba2 = W.Range("L2")
        i = 2
    Set Y = Sheets("Balancete")
    
    
    With Y
       Do While W.Range("L" & i) <> "" 'faz loop na coluna "L" ate a prx cel vazia
       
       For j = 1 To 8 ' faz loop nas col A ate H
         
         Set rng = .Columns(j).Find(pula_aba2)
          If Not rng Is Nothing Then
             sAdrs = rng.Address
           Do
            If rngDel Is Nothing Then
             Set rngDel = rng                'agrupa cel encontradas
             Else
             Set rngDel = Union(rngDel, rng) 'agrupa cel encontradas
            End If
           Set rng = .Columns(j).FindNext(rng)
           Loop While Not rng Is Nothing And sAdrs <> rng.Address
          
          End If
          
          If Not rngDel Is Nothing Then
            rngDel.EntireRow.Delete 'Exclui as linhas encontradas
          End If
          
          Set rngDel = Nothing
     
       Next
    i = i + 1
    
    Loop
    
    End With
    
    End Sub

     

    Editado por Basole
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Camarada.... ficou ótimo muito obrigado.... agora vou tentar aprimorar esse código, quando tiver a situação de não achar um conteúdo que está pesquisando da W.Range.

     

    Abraço.....e mais uma vez obrigado...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Boa noite Basole,

    Sua explicação acima foi muito boa e estou tentando usar em outra situação que pego uma coluna especifica exemplo coluna C, só que o conteúdo que estou procurando é números com pontos exemplo  5.1.1.01.0302.

    Só que a formula só pega texto!

    Se puder me ajudar ficou mais uma vez grato.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Substitua esta linha no codigo que postei: 

     

    Set rng = .Columns(j).Find(pula_aba2, LookIn:=xlValues, Lookat:=xlWhole)

     

    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Em 26/07/2017 às 15:21, Basole disse:

    Substitua esta linha no codigo que postei: 

     

    
    Set rng = .Columns(j).Find(pula_aba2, LookIn:=xlValues, Lookat:=xlWhole)

     

    Camarada mais uma vez lhe agradeço pela ajuda, tenho uma nova situação, neste código consigo colocar duas situações, exemplo: localiza "1.2.0.101" na coluna B achando o valor verifica se a coluna C está em  branco se tiver ele exclui.

    Coluna B     | Coluna C                                         | Coluna D

    5.1.3.01.02  | IMPOSTOS E TAXAS ESTADUAIS |  198,57

    1.2.0.101     |                                                          |   2.266,00

    1.2.0.101     | DIRETORIA GERAL                         |    0,00

     

    Abraço...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Com esta alteração, o código vai procurar na coluna B, por exemplo, 

    Se encontrar, verifica na mesma linha se na coluna C, contem algum dado, se estiver vazio, exclui.

    *Mas vai fazer isso com as outras colunas tambem. 

     

    Altere este trecho do código: 

     

         Do
           If rng.Offset(, 1) = "" Then
             If rngDel Is Nothing Then
               Set rngDel = rng
             Else
              Set rngDel = Union(rngDel, rng)
             End If
           End If

     

    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 13 minutos atrás, Basole disse:

    Com esta alteração, o código vai procurar na coluna B, por exemplo, 

    Se encontrar, verifica na mesma linha se na coluna C, contem algum dado, se estiver vazio, exclui.

    *Mas vai fazer isso com as outras colunas tambem. 

     

    Altere este trecho do código: 

     

    
         Do
           If rng.Offset(, 1) = "" Then
             If rngDel Is Nothing Then
               Set rngDel = rng
             Else
              Set rngDel = Union(rngDel, rng)
             End If
           End If

    No momento a é só essas colunas, deu certo obrigado.....

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×