Logo Hardware.com.br
ValdirJ
ValdirJ Novo Membro Registrado
2 Mensagens 0 Curtidas

[Resolvido] VBA _ procurar texto dentro de outro texto com delimitador ponto e vírgula

#1 Por ValdirJ 14/07/2017 - 23:30
Boa noite. Tenho o seguinte problema:
Suponha que tenhamos uma célula com os seguintes dados: 17;9;16;14;119;5 (Logo, tenho 6 itens na mesma célula separados por ponto e vírgula).
Preciso de um código VBA que me retorne se o número 6 (por exemplo) é um desses itens.

Minha dificuldade é que ao usar, por exemplo, a função InStr, ela me retorna que o 6 é um dos itens (Pelo fato do 6 aparecer no número 16). Mas o problema é que o 6 não está entre dois ponto e vírgula, logo não é um item.
Usando InStr eu encontro por exemplo que tenho quatro itens número 1 ( O 1 do 17, o 1 do 16 e os dois 1's do 119). Acredito que a solução é por meio de outra(s) função(ões).

Acredito que minha necessidade ficou clara, mas vou resumir:
Preciso de um código VBA que, no exemplo citado acima (Números 17;9;16;14;119;5 contidos numa única célula), para qualquer número citado (Por exemplo, 6) ele me retorne se tal número é ou não um item da sequência contida na célula (Lembrando que item é somente aquele número separado por ponto e vírgula. No caso em questão, tenho 6 itens).

Obs.: Estou criando uma ListView, se derem um norte nesse sentido me ajudaria muito mas qualquer resposta é bem vinda demais.

Muito obrigado
osvaldomp
osvaldomp Geek Registrado
753 Mensagens 558 Curtidas
#2 Por osvaldomp
15/07/2017 - 11:54
Veja se ajuda:
Sub teste1()
Dim x, i As Long
x = Split([A1], ";&quot
If Not IsError(Application.Match(CStr([A2]), x, 0)) Then
i = Application.Match(CStr([A2]), x, 0): MsgBox "encontrado na posição " & i
Else: MsgBox "não encontrado"
End If
End Sub

Sub teste2()
Dim x, i As Long
x = Split([A1], ";&quot
For i = 0 To UBound(x)
If x(i) = CStr([A2]) Then MsgBox "encontrado na posição " & i: Exit Sub
Next
MsgBox "não encontrado"
End Sub


obs.
1. considerei 17;9;16;14;119;5 em 'A1' e o número procurado em 'A2'
2. lembrando que na função "Match" o índice do primeiro elemento da matriz (x) é 1, ao passo que o Loop do segundo exemplo (Teste2) o índice do primeiro elemento é zero, em consequência os resultados dos dois exemplos serão diferentes quanto à indicação da posição do número encontrado.
Osvaldo
ValdirJ
ValdirJ Novo Membro Registrado
2 Mensagens 0 Curtidas
#3 Por ValdirJ
15/07/2017 - 23:31
osvaldomp disse:
Veja se ajuda:
Sub teste1()
Dim x, i As Long
x = Split([A1], ";&quot
If Not IsError(Application.Match(CStr([A2]), x, 0)) Then
i = Application.Match(CStr([A2]), x, 0): MsgBox "encontrado na posição " & i
Else: MsgBox "não encontrado"
End If
End Sub

Sub teste2()
Dim x, i As Long
x = Split([A1], ";&quot
For i = 0 To UBound(x)
If x(i) = CStr([A2]) Then MsgBox "encontrado na posição " & i: Exit Sub
Next
MsgBox "não encontrado"
End Sub


obs.
1. considerei 17;9;16;14;119;5 em 'A1' e o número procurado em 'A2'
2. lembrando que na função "Match" o índice do primeiro elemento da matriz (x) é 1, ao passo que o Loop do segundo exemplo (Teste2) o índice do primeiro elemento é zero, em consequência os resultados dos dois exemplos serão diferentes quanto à indicação da posição do número encontrado.



Era exatamente o que eu precisava. Muitíssimo obrigado.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal