Notifications
Clear all

Localizar parte do Texto Operador LIKE

4 Posts
2 Usuários
0 Reactions
1,471 Visualizações
(@barbosavba)
Posts: 0
New Member
Topic starter
 

Olá,

Sou novo no fórum, e programo em VBA há pouco tempo. Preciso fazer uma macro no trabalho onde, a partir de uma planilha que pego no sistema, tenho que fazer algumas alterações de layout (coisa que já fiz através do "Gravar Macro"), além de retirar as linhas onde o primeiro item dela não atenda a um critério. Neste primeiro item(na coluna A), estarão nomes de empresas, em códigos. Estes códigos podem ser nomes únicos, com "_", "." ou espaço. As únicas linhas que me interessam são as que contenham o nome "SPE X", onde "X" serão números variados. Estou com certa dificuldade de fazer esse comando, já tentei comparar os nomes das empresas usando a função Split, porém algumas empresas não saem da planilha. Envio abaixo a parte do meu código que apaga estas linhas:

Dim palavra() As String
Dim i As Integer

i = 2


Cells(i, 1).Activate

Do Until IsEmpty(ActiveCell)


palavra = Split(ActiveCell.Value)


If palavra(0) <> "SPE" Then

    Rows(i).Select
    Selection.Delete
    
    End If
    
    i = i + 1
    Cells(i, 1).Activate
    
   Loop

Agradeceria muito se alguém conseguir me ajudar.

Abs,
Gabriel Barbosa

 
Postado : 16/08/2017 4:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Gabriel, se entendi, você quer localizar se nos textos das celulas temos a palavra "SPE", se for isto, não precisa do "SPLIT", existe outras formas, mas uma delas é utilizar o Operador "LIKE" - Usado para comparar duas sequências de caracteres, e tambem em sua rotina, uma vez que está se referindo a uma coluna, o certo é começar a verificação de baixo para cima, senão, na instrução :

 i = i + 1 ... Cells(i, 1).Activate

irá somar 1 e ignorar a linha deletada e consequentemente deixar de deletar algumas linhas.
Teste a rotina abaixo e veja se é isto, a mesma não é minha, eu só fiz uns ajustes, os créditos são do benzadeus que prestou assistência no tópico - viewtopic.php?f=10&t=4821#.

Sub Exemplo()
    Dim lRow As Long
    Dim lLast As Long
    Dim sPlanilha As String 'Aba a verificar
    Dim sColBusca As String 'Coluna a verificar
    Dim SeachString 'Palavra a procurar
    
    'Procura por ...
    SeachString = "SPE"
    
    'Altere os valores abaixo, se necessário:
    sPlanilha = "Plan1"
    sColBusca = "A"
    
    With Worksheets(sPlanilha)
        'Obtém a última linha da coluna de busca:
        lLast = .Cells(.Rows.Count, sColBusca).End(xlUp).Row
        
        'Considerando que a primeira linha é o cabeçalho:
        For lRow = lLast To 2 Step -1
            'Armazena o texto da celula
            palavra = .Cells(lRow, sColBusca)
            
            'Verifica se tem a palavra no texto
            Compara = palavra Like "*" & SeachString & "*"
            
            'Se Verdadeiro deleta a linha
            If Compara Then
                .Rows(lRow).Delete
            End If
            
        Next lRow
        
    End With

End Sub

Qualquer duvida, retorne.

[]s

 
Postado : 16/08/2017 6:47 pm
(@barbosavba)
Posts: 0
New Member
Topic starter
 

Mauro, muito obrigado! Deu certo. Única coisa que alterei foi no momento de apagar as linhas, pois dessa maneira estava apagando as linhas com "SPE". Fiz a seguinte alteração:

If Compara = false Then
.Rows(lRow).Delete
End If

abs,
Barbosa

 
Postado : 17/08/2017 10:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Barbosa

Como você é novato,para facilitar a tua participação no fórum, sugiro tomar conhecimento do conteúdo dos links abaixo:
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

[]s
Patropi - Moderador

 
Postado : 17/08/2017 2:31 pm