Notifications
Clear all

Extrair uma sequência numérica em qualquer parte de uma fras

10 Posts
4 Usuários
0 Reactions
2,058 Visualizações
(@vandb)
Posts: 5
Active Member
Topic starter
 

Prezados foristas, boa tarde!

É possível a extração de uma sequência numérica em qualquer parte de uma expressão, para uma nova coluna?

Na planilha anexada, preciso extrair, para uma nova coluna, a primeira sequência numérica que aparecer em cada frase da coluna H.

Algumas frases da coluna H são iniciadas pelos números 1, 2 ou 3. Estes não devem ser considerados como uma sequência numérica válida para a extração.

Segue link da planilha:

https://www.sendspace.com/file/im4op2

Desde já, muito obrigado a quem puder ajudar.

 
Postado : 11/11/2019 1:56 pm
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
 

.
VandB, o grande problema é que não existe um padrão na coluna H ... se tivesse um padrão, esta fórmula faria o serviço ... =EXT.TEXTO(H10;MÍNIMO(SE(ÉERROS(LOCALIZAR({0;1;2;3;4;5;6;7;8;9};H10));"";LOCALIZAR({0;1;2;3;4;5;6;7;8;9};H10)));6)
.

 
Postado : 11/11/2019 3:29 pm
(@vandb)
Posts: 5
Active Member
Topic starter
 

Boa noite, JSCOPA10,

É fato, realmente, não há um padrão na coluna H desse relatório.

Obrigado!

 
Postado : 11/11/2019 5:06 pm
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
 

.
E se não há um padrão, fica difícil !!!
.
Veja que esse é um caso bem parecido com seu problema, mas veja que existe, pelo menos um padrão de quantidade de números ... https://www.youtube.com/watch?v=flQzXYD6CrM
.
Veja que dica também existe um padrão ... https://www.extendoffice.com/pt/documen ... tring.html
.
OPS!! EDITANDO ... Como meu Excel é em português, não funcionou, mas fica essa dica, a ser ajustada ... https://www.guiadoexcel.com.br/funcao-p ... e-celulas/
.

 
Postado : 11/11/2019 10:10 pm
deciog
(@deciog)
Posts: 0
Trusted Member
 

VandB , Bom Dia.

Tenta desta forma

=SE(H10="";"";SE(ÉNÚM(VALOR(EXT.TEXTO(H10;1;1)));SEERRO(-PROC(1;-(EXT.TEXTO(EXT.TEXTO(H10;2;100);MÍNIMO(PROCURAR({123456789};H10&1/17));LIN(ÍNDICE(A:A;1):ÍNDICE(A:A;NÚM.CARACT(H10))))&"**0"));"");SEERRO(-PROC(1;-(EXT.TEXTO(H10;MÍNIMO(PROCURAR({123456789};H10&1/17));LIN(ÍNDICE(A:A;1):ÍNDICE(A:A;NÚM.CARACT(H10))))&"**0"));"")))

Se foi útil, clique na mãozinha é uma forma de agradecimento

Decio

Marque o tópico como Resolvido se foi solucionado seu problema.
Brasil, São Paulo - SP
Décio Gassi

 
Postado : 12/11/2019 6:47 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Vc. também poderia usar uma função personalizada para isso. Num módulo normal, insira o seguinte código:

Dim rgx As Object
Const ER = "^[^1-3].*?(d+).*"
Function ExtraiNF(txt As String) As String
  Application.Volatile
  If rgx Is Nothing Then Set rgx = CreateObject("VBScript.Regexp")
  rgx.Pattern = ER
  If rgx.Test(txt) Then
    ExtraiNF = rgx.Execute(txt)(0).SubMatches(0)
  End If
End Function

Agora na planilha, use a UDF acima como se fosse uma fórmula normal do Excel. Por exemplo, na célula S10 coloque a fórmula:

= ExtraiNF(H10)

 
Postado : 12/11/2019 10:00 am
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
 

.
Não entendi ... no 2007 do trabalho a solução do EdsonBR ficou PERFEITA, e a do deciog não funcionou ... aqui, no 2010 de casa, ambas as soluções não funcionaram direito (???????????)!!!
.
A solução do EdsonBR no 2010 deixou várias células em branco, e a do deciog não deixou em branco, mas em várias células só retornou o último número da NF!!
.
PS: só postando a título de curiosidade!!!
.
Vejam o print imagem ... https://www.sendspace.com/file/rmp7f0 ............ e do arquivo https://www.sendspace.com/file/5vnyde
.

 
Postado : 12/11/2019 8:00 pm
deciog
(@deciog)
Posts: 0
Trusted Member
 

JSCOPA10, Bom Dia tudo em ordem

Se você olhar na imagem, está funcionando, pois as formulas são para 2007 e funciona para todas as versões.

Porem nota que trouce na linha 51 o numero 1 que no texto é 001 porem não coloquei formatação para mostrar zeros a esquerda

Mas ele não queria essa extração ai o meu erro então a formula ficaria assim

=SE(H10="";"";SE(ÉNÚM(VALOR(EXT.TEXTO(H10;1;1)));" ";SEERRO(-PROC(1;-(EXT.TEXTO(H10;MÍNIMO(PROCURAR({123456789};H10&1/17));LIN(ÍNDICE(A:A;1):ÍNDICE(A:A;NÚM.CARACT(H10))))&"**0"));"")))

Abraços

Decio

Marque o tópico como Resolvido se foi solucionado seu problema.
Brasil, São Paulo - SP
Décio Gassi

 
Postado : 13/11/2019 4:57 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

.
...A solução do EdsonBR no 2010 deixou várias células em branco...

Bem observado, JSCOPA. Isso ocorre por que interpretei assim o pedido do VandB :

...Algumas frases da coluna H são iniciadas pelos números 1, 2 ou 3. Estes não devem ser considerados como uma sequência numérica válida para a extração...

Entendi que se começasse com de 1 a 3 não deveria ser extraída qualquer numeração.

Mas querendo trazê-las também, é só alterar a Expressão Regular para:

^(?:(?:[^1-3]D+)|(?:[1-3] ?))(d+).*

O código ficaria:

Dim rgx As Object
  Const ER = "^(?:(?:[^1-3]D+)|(?:[1-3] ?))(d+).*"
Function ExtraiNF(txt As String) As String
   Application.Volatile
   If rgx Is Nothing Then Set rgx = CreateObject("VBScript.Regexp")
   rgx.Pattern = ER
   If rgx.Test(txt) Then ExtraiNF = rgx.Execute(txt)(0).SubMatches(0)
End Function

 
Postado : 13/11/2019 12:29 pm
JSCOPA10
(@jscopa10)
Posts: 344
Reputable Member
 

.
EdsonBR, agora ficou TOP!! ... deciog, suas 2 soluções não funfam não!! ... Gente, isso é só a título de curiosidade, e para deixar o tópico mais completo!! ... Se o dono do tópico deu como resolvido, é porque a solução do deciog é o que ele precisava!!
.
https://www.sendspace.com/file/vpb8s1
.

 
Postado : 13/11/2019 12:57 pm