condicional para va...
 
Notifications
Clear all

condicional para valor em "mascara"

Página 1 / 2

cimerio
Posts: 39
Registered
Topic starter
(@cimerio)
Eminent Member
Entrou: 1 ano atrás

pessoal, tem alguma forma de fazer uma condicional pra procurar um valor que tenha um determinado formato em mascara?

assim, eu uso a função (ou seria metodo) InStr pra procurar valores nas celulas, mas no caso agora, não eh pra procurar uma determinada string, e sim um valor no formato de cnpj.

ou seja, eu teria que por em InStr um parametro que buscasse valores no formato 00.000.000/000-00.     é  possível?

Responder
6 Respostas
EdsonBR
Posts: 895
Moderator
(@edsonbr)
Prominent Member
Entrou: 6 anos atrás

A propriedade Text do objeto Range recupera o conteúdo exato como está sendo apresentado na célula, independentemente se o conteúdo for numérico puro mas com formato personalizado para exibir CNPJ como se for texto respeitando o formato de CNPJ.

Já o operador Like faz as vezes de verificar se aquele conteúdo realmente casa com o padrão de números e pontos exigidos. Exemplo:

 If Range("A1").Text Like "##.###.###/####-##" Then MsgBox "A1 é CNPJ."

Logicamente funciona para Strings também:

If MinhaString Like "##.###.###/####-##" Then MsgBox "O conteúdo da variável é CNPJ."
Responder
cimerio
Posts: 39
Registered
Topic starter
(@cimerio)
Eminent Member
Entrou: 1 ano atrás

Oi, Edson.

sim, mas acho que não se aplica ao meu caso, porque as celulas que quero recuperar, tem mais de uma informação.

por exemplo.

 BANCO COOPERATIVO DO BRAS  02.038.232/0001-64                6         4.029,13

nem todas as celulas tem cnpj. e a posição, quando tem, as vezes muda.

por isso pensei no InSrt, mas como não aceita wildcards, não tem como usar, aparentemente. ocorre que não estou procurando um cnpj especifico, mas sim qualquer cnpj. se a célula tem cnpj, eu preciso extrair esse cnpj ou pelo menos armazenar numa variável.

 

estava estudando a função regex, mas é meio complicado

Sub FindCnpj(ByVal inputString)
Dim regex, match, matches
Set regex = New RegExp
regex.Pattern = "\d{2}.\d{3}.\d{3}/\d{4}-\d{2}"
' (###)###-####
regex.Global = True
Set matches = regex.Execute(inputString)
For Each match In matches
Debug.Print match.Value
Next
End Sub

Sub buscaNovaConsignataria()
Call FindCnpj(inputString)
Dim y, i, a, b
For i = 1 To 1100
a = Worksheets("plan2").Cells(i, 1).Value
If InStr(1, a, regex) Then
Debug.Print regex
End If
Next
End Sub

não funcionou

Responder
EdsonBR
Posts: 895
Moderator
(@edsonbr)
Prominent Member
Entrou: 6 anos atrás
Postado por: @cimerio

...nem todas as celulas tem cnpj. e a posição, quando tem, as vezes muda.

Com certeza com Expressões Regulares é bem mais tranquilo de extrair do texto. E nesse caso, é melhor uma pequena UDF pra isso.

Uma pergunta: numa única célula pode ter mais de um CNPJ no conteúdo? Se tiver, vc quer extrair todos? Pergunto isso pq. vc usou a propriedade Global para a regex, que só tem sentido se ocorrer mais de uma vez naquela string (estou considerando cada célula uma inputString).

Responder
cimerio
Posts: 39
Registered
Topic starter
(@cimerio)
Eminent Member
Entrou: 1 ano atrás

não, sempre vai ter só um cnpj. 😕

Responder
Página 1 / 2