Ir ao conteúdo

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


Ir à solução Resolvido por AfonsoMira,

Posts recomendados

Postado

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

Postado

@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
Postado

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
Postado

@Scofieldgyn Obrigada pela ajuda dos pois! 

 

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

 

  Em 23/09/2022 às 15:04, 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

 

Expandir  

 

 

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

Postado

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.

Postado

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
  • Solução
Postado

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
Postado

@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!

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!