Ir ao conteúdo

Excel VBA - Como fazer o IF ignorar algumas celulas ja preenchidas


Ir à solução Resolvido por Midori,

Posts recomendados

Postado
Sub main ()

Dim Item    As Range
    
    Set Item = ThisWorkbook.Sheets("Carga").Cells.Find( _
        What:="Add item", LookIn:=xlValues, LookAt:=xlWhole)
        
    If Not Item Is Nothing Then
        Set Item = Item(2)
            While Item <> ""
                Item = "245897-" & Item
        Set Item = Item(2)
        Wend
    End If
    
End Sub

como adiciono a esse codigo uma função que se ja tiver o numero "245897-" na celula não precisa adicionar na frente do texto image.png.05acae79a4d2dcad3641753e710b65f6.png

Postado

@isabela queiroz Como o seu código não tem nenhuma condição no loop para concatenar "245897-" com o valor da célula, isso será feito para qualquer uma. Por isso você precisa testar antes se o valor já começa com "245897-". É isso que estrutura que postei faz.

 

Veja que usei duas funções de string, Left e Len, para verificar se o código já faz parte do início do valor da célula

Postado

@Midori Atualização:

 

Consegui arrumar um erro que tinha encontrado mas era eu que tinha colocado em ordem errada, assim ta funcionando, poderia verificar se esta tudo certo com o codigo e não aparenta apresentar erros futuros?

 

E eu notei que algumas das celulas da minha tabela original tem celulas brancas, ai o codigo acaba quando chega nela, sendo que é pra continuar para a proxima, como faço para ignorar as celulas vazias e continuar o codigo?

 

Sub main ()

Dim Item    As Range
    
    Set Item = ThisWorkbook.Sheets("Carga").Cells.Find( _
        What:="Add item", LookIn:=xlValues, LookAt:=xlWhole)
        
    If Not Item Is Nothing Then
        Set Item = Item(2)
    
                While Item <> ""
            If Left(Item.Value, Len("245897-")) <> "245897-" Then
                Item = "245897-" & Item
            End If
        
        Set Item = Item(2)
        Wend
    End If
End Sub

 

  • Solução
Postado
35 minutos atrás, isabela queiroz disse:

E eu notei que algumas das celulas da minha tabela original tem celulas brancas, ai o codigo acaba quando chega nela, sendo que é pra continuar para a proxima, como faço para ignorar as celulas vazias e continuar o codigo?

Nesse caso pode atribuir a última linha da planilha para fazer o loop até ela. Dependendo da tabela pode ser com CurrentRegion ou então UsedRange, p.ex,

 

Sub Main()
    Const PREFIXO   As String = "245897-"
    Dim Item        As Range
    Dim Linha       As Long
    
    Set Item = Cells.Find( _
        What:="Add item", LookIn:=xlValues, LookAt:=xlWhole)
    
    If Not Item Is Nothing Then
        For Linha = Item.Row + 1 To ActiveSheet.UsedRange.Rows.Count
            If Item(Linha).Value <> "" Then
                If Left(Item(Linha).Value, Len(PREFIXO)) <> PREFIXO Then
                    Item(Linha).Value = PREFIXO & Item(Linha).Value
                End If
            End If
        Next Linha
    End If
End Sub

 

  • Obrigado 1
Postado

@Midori deu certinho agora, só tirei o  + 1 daqui porque começou a pular a primiera celula da tabela depois do cabeçalho, muito obrigada!!

12 minutos atrás, Midori disse:
For Linha = Item.Row + 1 To ActiveSheet.UsedRange.Rows.Count

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...