Ir ao conteúdo
  • Cadastre-se

Excel VBA - como fazer um IF que tenha a condição de uma certa palavra


Ir à solução Resolvido por AfonsoMira,

Posts recomendados

Tenho essa tabela que a aba "Produto" recebe informações de outra planilha e então eu precisava que fosse criado a frente dessa coluna uma outra coluna chamada "Tamplate" como mostrado abaixo. porém essa coluna template precisava ser basicamente o CTRL C CTRL V da Produto mas quando a informação viesse com numeros e letras igual "Z4G4 - PIKE" fosse retirado todos os caracteres antes do "-" e assim colocado na coluna "template" e os que não tivem igual o "PETROF" apenas desse o CTRL C CTRL V.

 

Acredito que isso possa ser feito pelo IF do vba, tenho um conhecimento básico de VBA e faço alguns códigos inclusive essecodigo que preciso vai ser inserido dentro de uma macro que funciona para outras 3 planilhas ja. 

 

ps. Existe uma planilha da qual recebe novos produtos sempre, então a coluna "produtos" precisa ser baseada em quantidade de linhas preenchidas porque pode ter mais informaçoes futuramente. E ela tem que ter o codigo de .RemoveDuplicates que ja esta inserido nela porque pode vir dois "Z4G4 - PIKE", por exemplo.

 

image.png.fe8c8f79376b1289196cc98b17b1a4f6.png

Link para o comentário
Compartilhar em outros sites

@isabela queiroz

Seria assim que você gostaria? Caso você já tenha alguma macro de copiar e cola, é só adpatar a segunda fórmula abaixo. 

 

Fórmula: =SEERRO(SE(EXT.TEXTO(A1;PROCURAR("-";A1;1);1)="-";EXT.TEXTO(A1;PROCURAR("-";A1;1)+2;30);A1);A1)

 

Fórmula VBA:

"=IFERROR(IF(MID(RC[-1],FIND(""-"",RC[-1],1),1)=""-"",MID(RC[-1],FIND(""-"",RC[-1],1)+2,30),RC[-1]),RC[-1])"

 

image.thumb.png.e9abacb171c5b851687395d50cca76d8.png

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Boas @Scofieldgyn ,
Veja se isto ajuda:
 

Sub CriarTemplate()

    'Declara Variaveis de Livro e Folha
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets("Produto")

    'Declara Variavel ultima Linha
    Dim ultLinha As Long
    ultLinha = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    'Desde a linha 2 até a ultima
    For i = 2 To ultLinha

        valor = ws.Cells(i, 1)

        'Se "-" existir então
        If InStr(valor, "-") Then

            'Divide
            valor = Split(valor, "-")(1)
            'Remove espaços em branco
            valor = Trim(valor)
            'Define o valor na célula
            ws.Cells(i, 2) = valor
        Else
            ws.Cells(i, 2).Value = valor
        End If
    Next i
End Sub

 

  • Amei 2
Link para o comentário
Compartilhar em outros sites

@Scofieldgyn Obrigada pela ajuda dos pois! 

 

@AfonsoMira seu codigo funcionou perfeitamente aqui! muito obrigada!!

 

41 minutos atrás, AfonsoMira disse:

Boas @Scofieldgyn ,
Veja se isto ajuda:
 

Sub CriarTemplate()

    'Declara Variaveis de Livro e Folha
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets("Produto")

    'Declara Variavel ultima Linha
    Dim ultLinha As Long
    ultLinha = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    'Desde a linha 2 até a ultima
    For i = 2 To ultLinha

        valor = ws.Cells(i, 1)

        'Se "-" existir então
        If InStr(valor, "-") Then

            'Divide
            valor = Split(valor, "-")(1)
            'Remove espaços em branco
            valor = Trim(valor)
            'Define o valor na célula
            ws.Cells(i, 2) = valor
        Else
            ws.Cells(i, 2).Value = valor
        End If
    Next i
End Sub

 

 

 

Só notei uma coisa agora na verdade, o "MALDIVES 6U" existem dois um que é 250 e outro 256 

 

tem como fazer um codigo que caso seja "maldives 6u" ele copiar os 3 primeiros numeros por exemplo o 250G8 - MALDIVES 6U fique MALDIVES 6U 250?

image.png.0c9c293108287be64a4876e4b5fd7c5a.png

Link para o comentário
Compartilhar em outros sites

Recentemente criei este tópico e foi resolvido parcialmente.

 

Agora necessito que o item MALDIVES 6U 250 e 256 sejam copiados com seus 3 primeiros caracteres, deixando de ser "250G8 - MALDIVES 6U" para "MALDIVES 6U 250" 

 

com o código que foi feito no tópico acima funciona perfeitamente, fora essa minha necessidade de copiar itens que tenham o mesmo nome mas com o numero diferente.

 

sempre vai ser assim, necessitando então que se tenha MALDIVES 6U  copie os 3 primeiros caracteres..

 

pensei em fazer um if com condição de reconhecer que se for "250G8 - MALDIVES 6U" então copiar e colar "MALDIVES 6U 250" e caso não seja, vai ser o "256G8 - MALDIVES 6U" então copiaria e colaria o "MALDIVES 6U 256".

 

mas não sei se isso seria possível.

'Declara Variaveis de Livro e Folha
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets("Produtos")
     
    
    'Declara Variavel ultima Linha
    Dim ultLinha As Long
    ultLinha = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    'Desde a linha 2 até a ultima
    For i = 2 To ultLinha

        valor = ws.Cells(i, 1)

        'Se "-" existir então
        If InStr(valor, "-") Then

            'Divide
            valor = Split(valor, "-")(1)
            'Remove espaços em branco
            valor = Trim(valor)
            'Define o valor na célula
            ws.Cells(i, 2) = valor
        Else
            ws.Cells(i, 2).Value = valor
        End If
    Next i

 

teria que colocar no meio desse codigo, adicionar mais um if para caso ocorra alguma das situações e caso não apenas seguir copiando e colando em frente.

Link para o comentário
Compartilhar em outros sites

Por fórmula:

=SE(ÉERRO(LOCALIZAR("-";A2));A2;SE(CONT.SE(A:A;"*"&DIREITA(A2;NÚM.CARACT(A2)-LOCALIZAR("-";A2)-1))=1;DIREITA(A2;NÚM.CARACT(A2)-LOCALIZAR("-";A2)-1);DIREITA(A2;NÚM.CARACT(A2)-LOCALIZAR("-";A2)-1)&" "&ESQUERDA(A2;3)))

 

Por macro:

Sub ExtraiDados()
 Dim c As Range, s As String
  For Each c In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
   If InStr(c.Value, "-") = 0 Then
    c.Offset(, 1).Value = c.Value
   Else: s = Right(c.Value, Len(c.Value) - InStr(c.Value, "-") - 1)
    If Application.CountIf(Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row), "*" & s) = 1 Then
     c.Offset(, 1).Value = s
    Else: c.Offset(, 1).Value = s & " " & Left(c.Value, 3)
    End If
   End If
  Next c
End Sub

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Solução

Boas @isabela queiroz ,
Desculpe a demora na resposta

Veja se assim ajuda:
 

Sub CriarTemplate()

    'Declara Variaveis de Livro e Folha
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets("Produto")

    'Declara Variavel ultima Linha
    Dim ultLinha As Long
    ultLinha = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    'Desde a linha 2 até a ultima
    For i = 2 To ultLinha

        valor = ws.Cells(i, 1)

        'Se "-" existir então
        If InStr(valor, "-") Then

            'Divide
            valor = Split(valor, "-")(1)
            'Remove espaços em branco
            valor = Trim(valor)
            
            If valor = "MALDIVES 6U" Then
                valor = valor & " " & Left(ws.Cells(i, 1), 3)
            End If
            
            'Define o valor na célula
            ws.Cells(i, 2) = valor
        Else
            ws.Cells(i, 2).Value = valor
        End If
    Next i
End Sub

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@AfonsoMira consegui aqui, muito obrigada!

 

 

fiz assim 
   

    'Declara Variaveis de Livro e Folha
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet: Set ws = wb.Sheets("Produtos")
    Dim auxiliar() As String
    
    
    'Declara Variavel ultima Linha
    Dim ultLinha As Long
    ultLinha = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    'Desde a linha 2 até a ultima
    For i = 2 To ultLinha

        valor = ws.Cells(i, 1)

        'Se "-" existir então
        If InStr(valor, "-") Then

            'Divide
            auxiliar = Split(valor, " - ")
            'Remove espaços em branco
            'valor = Trim(valor)
            'Define o valor na célula
            If auxiliar(1) = "MALDIVES 6U" Then
            
                ws.Cells(i, 2) = auxiliar(1) & " " & Left(auxiliar(0), 3) '3 primeiras posições da esquerda
            Else
                ws.Cells(i, 2) = auxiliar(1)
            End If
            
        Else
            ws.Cells(i, 2).Value = valor
        End If
    Next i

@OreiaG obrigada!

Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!