Ir ao conteúdo
  • Cadastre-se

Verificar se dados de uma coluna estão contidos em uma string


Posts recomendados

Olá pessoal, tudo bom?

 

Estou aprendendo a pouco tempo a usar o VBA e não estou conseguindo fazer uma coisa que, a princípio, parece simples.

 

Tenho uma coluna com várias linhas, por exemplo:

Água

Maça

Pera

Banana

Uva

 

E tenho uma string que possui apenas alguns desses valores, por exemplo "Água; Pera; Uva"

Para cada um dos valores da coluna, preciso verificar se ele está contido na string e retornar 1 se sim e 0 se não.

Como faço isso? Alguém pode me ajudar?

 

PS: não dá pra ser por fórmula, pois a coluna possui muitas linhas.

 

Obrigada.

Link para o comentário
Compartilhar em outros sites

Este exemplo, cole em um modulo da sua Pasta_de_trabalho. 

E altere os dados no local indicado: 

Const strDados = ("Água; Pera; Uva")
Const SuaColuna = "D" ' * ALTERE AQUI: sua Coluna
Const LinhaInicial = 2   ' * ALTERE AQUI: Linha inicial (da coluna), que contem dados

Sub Verificar_DadosContidos_()
    Dim i As Integer, lr As Long
    Dim strArray() As String, rng As Range, intCount As Integer

    With ActiveSheet
        lr = .cells(Rows.Count, SuaColuna).End(xlUp).Row
        Set rng = .Range(.cells(LinhaInicial, SuaColuna), .cells(lr, SuaColuna))
        rng.Offset(, 1).Value = 0
    End With

    strArray = Split(strDados, ";")
    For intCount = LBound(strArray) To UBound(strArray)

        Set rng = ActiveSheet.Columns(SuaColuna).Find(Trim(strArray(intCount)))
        If Not rng Is Nothing Then
            rng.Offset(, 1).Value = 1
        End If
    Next

End Sub

 

Link para o comentário
Compartilhar em outros sites

Muito obrigada Basole!!

 Vai ajudar bastante.

:)

adicionado 40 minutos depois

Basole, deu super certo sua macro! Mas preciso de uma última ajuda. Na coluna que coloquei como exemplo podem ter várias vezes o mesmo nome, por exemplo: 

Água

Maça

Pera

Banana

Uva

Banana 

Uva

Com o código que você mandou, o 1 só é inserido na primeira vez que a fruta aparece. Preciso que ele insira todas as vezes. Pode me ajudar de novo? :)

 

Muito obrigada mais uma vez.

 

 

Link para o comentário
Compartilhar em outros sites

Tarde @Juacgomes segue abaixo as alteraçõs solicitadas: 

 

Const strDados = ("Água; Pera; Uva; Banana")
Const SuaColuna = "D" ' * ALTERE AQUI: sua Coluna
Const LinhaInicial = 2   ' * ALTERE AQUI: Linha inicial (da coluna), que contem dados

Sub Verificar_DadosContidos_()
    Dim i As Integer, lr As Long, PriEnd As String
    Dim strArray() As String, rng As Range, intCount As Integer

    With ActiveSheet
        lr = .Cells(Rows.Count, SuaColuna).End(xlUp).Row
        Set rng = .Range(.Cells(LinhaInicial, SuaColuna), .Cells(lr, SuaColuna))
        rng.Offset(, 1).Value = 0
    End With

    strArray = Split(strDados, "; ")
    For intCount = LBound(strArray) To UBound(strArray)

        Set rng = ActiveSheet.Columns(SuaColuna).Find(What:=Trim(strArray(intCount)), LookIn:=xlValues, _
                                                      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                                                      MatchCase:=False, SearchFormat:=False)

        If Not rng Is Nothing Then
            PriEnd = rng.Address
            Do
                rng.Offset(, 1).Value = 1
                Set rng = ActiveSheet.Columns(SuaColuna).FindNext(after:=rng)
                If rng Is Nothing Then Exit Do
            Loop While Not rng Is Nothing And rng.Address <> PriEnd
        End If

    Next

End Sub

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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!