Notifications
Clear all

Separar dados específicos sem padrão

5 Posts
2 Usuários
0 Reactions
1,070 Visualizações
(@vidoti)
Posts: 4
New Member
Topic starter
 

Pessoal, estou quebrando a cabeça para fazer uma formação de dados, eu recebo um dado em uma célula que vem concatenada sem padrão algum no dados e eu preciso separar esses blocos de dados, alguém teria uma ideia de como fazer essa separação??

Obrigado!!

Exemplo da planilha com os dados a ser separados no ondrive:

https://1drv.ms/x/s!AnI027ZTw6hbjEdCz26 ... r?e=HE9bzb

 
Postado : 27/11/2019 8:48 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Bom dia Vidoti

Não está muito claro para mim o que vc pretende extrair. Também tem algumas inconsistências entre o texto a ser extraído e o texto que vc extraiu. Por exemplo, no campo "Separação Localidade", por que o último item extraído começa com "L-br" e não "e-br"? Também nesse item, de onde surgiu o "-ba-"? Ainda no mesmo campo, em todas as linhas daquela coluna, está inserido uma partícula de dois caracteres estranhos ao contexto: depois de br- ou bra- aparece ir ou rt ou ti. De onde surgiram ou qual a regra?

Enquanto isso, teste o seguinte código inserindo-o em um módulo no VBA:

Option Explicit
Const ER = "^.*? (w w{2} w{2,} w{2,} w{2,} d{2}) (ex d/d/d) ([A-Z]+.d{2}) (CE d+) (IEDL d+) ?$"
Dim rgx As Object
Function Separação(ByVal Texto As String, TipoInfo As Byte) As String
'      Para retornar cada informação, use os valores abaixo para TipoInfo:
'        Localidade: 1
'        Interface: 2
'        Trans Endereço: 3
'        Trans CE: 4
'        Trans IEDL: 5
  If rgx Is Nothing Then Set rgx = CreateObject("VBScript.RegExp")
  With rgx
    .Global = True: .Pattern = "-": Texto = .Replace(Texto, " ")
    .Global = False: .IgnoreCase = False: .Pattern = ER
    If .Test(Texto) Then Separação = .Execute(Texto)(0).SubMatches(TipoInfo - 1)
  End With
End Function

Use a Função acima como se fosse uma função normal do Excel. Por exemplo,
na célula B2 insira a fórmula =Separação(A2;1)
na célula C2 insira a fórmula =Separação(A2;2)
e assim por diante até F2 com a fórmula =Separação(A2;5)

depois arraste as fórmulas para baixo.

 
Postado : 02/12/2019 10:24 am
(@vidoti)
Posts: 4
New Member
Topic starter
 

então a base de dados não tem padrão, esses dados extraídos são nomes de localidades/escritórios por isso que sempre muda um detalhe seria o nome próprio da localidade.

Essa base de dados eu recebo apenas, não tenho controle sobre ela, eu preciso pegar esses dados e tratar, por isso as vezes tenho e-br-sp-spo-bra-ir-01 e outras L-br-sp-spo-br-ir-01 por exemplo.

 
Postado : 02/12/2019 4:14 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

...Essa base de dados eu recebo apenas, não tenho controle sobre ela, eu preciso pegar esses dados e tratar, por isso as vezes tenho e-br-sp-spo-bra-ir-01 e outras L-br-sp-spo-br-ir-01 por exemplo.

Sim, esse entendimento eu já havia tido. Mas ao postar as linhas de exemplo, vc deveria manter a consistência linha a linha exibindo o que estaria sendo extraído, em cada campo, relativo àquela linha. Também deveria enriquecer com mais linhas de exemplos. Vc incluiu apenas 6 linhas!

 
Postado : 02/12/2019 7:10 pm
(@vidoti)
Posts: 4
New Member
Topic starter
 

o maior problema é exatamente esse não tem consistência de dados, por isso que eu disse que não tem padrão nos dados, o exemplo enviado é real, geralmente recebo exatamente uma tabela com essa quantidade de informação exatamente nessa configuração.
eu consegui automatizar bastante coisa, mas infelizmente ainda preciso interagir e separar alguns dados manualmente, vou dar o tópico como resolvido pois creio que mais que isso só se mudar o processo desde começo e não apenas no final da esteira, mas obrigado!!!

 
Postado : 05/12/2019 7:28 am