Notifications
Clear all

condicional para valor em "mascara"

7 Posts
3 Usuários
2 Reactions
1,723 Visualizações
(@cimerio)
Posts: 47
Trusted Member
Topic starter
 

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?

 
Postado : 23/09/2020 12:58 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

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

 
Postado : 23/09/2020 2:50 pm
(@cimerio)
Posts: 47
Trusted Member
Topic starter
 

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

 
Postado : 23/09/2020 3:11 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 
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).

 
Postado : 23/09/2020 3:23 pm
(@cimerio)
Posts: 47
Trusted Member
Topic starter
 

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

 
Postado : 23/09/2020 3:32 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Melhor ainda. Então sua UDF poderia ser:

 Function FindCnpj(ByVal inputString) As String
  Application.Volatile
  With CreateObject("VBScript.RegExp")
    .Pattern = "\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}"
    If .Test(inputString) Then FindCnpj = .Execute(inputString)(0)
  End With
End Function

Alterei um pouco sua ER pois o ponto e a barra têm significado especial.

 
Postado : 23/09/2020 3:39 pm
cimerio reacted
(@anderson)
Posts: 203
Reputable Member
 
Public Function ExtrairCNPJ(t As String) As String

Dim texto As String
Dim i As Integer
Dim j As Integer

ExtrairCNPJ = ""

For i = 1 To Len(t)

If Mid(t, i, 1) = "." Then
If Mid(t, i + 4, 1) = "." Then
If Mid(t, i + 8, 1) = "/" Then
If Mid(t, i + 13, 1) = "-" Then
For j = i - 2 To i + 15

texto = texto & Mid(t, j, 1)

Next j

ExtrairCNPJ = texto
Exit Function
End If
End If
End If
End If

Next i

End Function

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 24/09/2020 6:32 pm
cimerio reacted