Notifications
Clear all

Extrair cadeia de caracteres

9 Posts
1 Usuários
0 Reactions
1,174 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Pessoal, boa tarde.

Recebi uma planilha onde na coluna 'U' tenho preenchido para cada linha, vários endereços.
Exemplo: VIOLETA DE MELO 593 - JARDIM SAO JOSE - 30820-650
Onde:
- "VIOLETA DE MELO" é o nome do logradouro;
- "593" é o numero predial/casa;
- "JARDIM SAO JOSE" é o BAIRRO;
- "30820-650" é o cep;

Esse é so um exemplo. Pois tenho mais de 8mil linhas com varios nomes, numeros, bairro e cep diferentes. Porem, segue o mesmo padrao (nome da rua, numero da casa e cep).

Gostaria da ajuda dos colegas, se possível, como posso extrair o nome do logradouro em uma coluna, numero predial em outra coluna e o cep e outra?

Nao entendo muito de VBA e ate espero que tenha criado o topico no lugar certo.
Desde ja agradeço a atenção de todos. Muito obrigado.

 
Postado : 26/09/2016 10:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Use as formulas

B2=ESQUERDA(A2;LOCALIZAR(CARACT(53);SUBSTITUIR(A2;" ";CARACT(53);NÚM.CARACT(A2)-NÚM.CARACT(SUBSTITUIR(A2;" ";""))-0))-2)
C2=ARRUMAR(ESQUERDA(MUDAR(A2;1;NÚM.CARACT(F2);"");5))

, altere o número 5 para o número de caracteres desejado.

D2=ARRUMAR(ESQUERDA(DIREITA(SUBSTITUIR(" - "&A2;" - ";REPT(" ";999));2*999);999))
E2=ARRUMAR(DIREITA(DIREITA(SUBSTITUIR(" - "&A2;" - ";REPT(" ";99));297);99))

Att

 
Postado : 26/09/2016 1:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Contribuindo, experimente

Sub Separando()
Dim Str_Texto As String, Str_Logr As String
Dim X As Integer
Dim Separa() As String, StrSep() As String

For X = 3 To 7
    Str_Texto = Sheets("Plan1").Range("A" & X).Value
    Separa = Split(Str_Texto, " - ", -1, vbTextCompare)
    StrSep = Split(Separa(0), " ", -1, vbTextCompare)
        
    For y = LBound(StrSep) To (UBound(StrSep) - 1)
        If y = LBound(StrSep) Then
            Str_Logr = StrSep(y)
        Else
            Str_Logr = Str_Logr & " " & StrSep(y)
        End If
    Next
    
    Sheets("Plan1").Range("B" & X).Value = Str_Logr
    Sheets("Plan1").Range("C" & X).Value = StrSep(UBound(StrSep))
    Sheets("Plan1").Range("D" & X).Value = Separa(1)
    Sheets("Plan1").Range("E" & X).Value = Separa(2)
Next
End Sub
 
Postado : 26/09/2016 2:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo e Alexandrevba,

Muito obrigado pela respostas.

Ambos chegram muito proximo do desejado.

Alexandre, o codigo para a coluna C2 nao retorna o valor esperado. É quase isso.

Reinaldo, acredito que estamos quase perto de atender o que preciso. Vou anexar a planilha, casos o colegas tiver um tempinho para analisar.

Novamente, meu muito obrigado.

Um otimo dia a todos.

 
Postado : 27/09/2016 5:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Voçe disse que não atendeu, mas não o que está divergente, o que não está coerente, qual o criterio?

 
Postado : 27/09/2016 6:09 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Voçe disse que não atendeu, mas não o que está divergente, o que não está coerente, qual o criterio?

Olá Reinaldo!

Obrigado pelo retorno.

Então, na planilha exemplo que disponibilizei temos 8576 linhas na coluna "A".

No codigo que voce enviou, na linha "For X = 3 To 7" alterei para "For X 2 To 8576" (me corrija se eu estiver errado). Em seguida rodei o comando, ele retorna a msgs "Erro em tempo de execução '9': Subscrito fora do intervalo". Após rodar o comando, a planilha vejo que ele retorna o resultado ate na linha (apoximado) 3389.

Os critérios são os mesmos que informei, acho que ajustando a leitura em todas as quase 9mil linhas, acredito que ja atenderá.

 
Postado : 27/09/2016 7:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia!!
Para formulas tente.

' B2  =ESQUERDA(A2;MÍNIMO(PROCURAR({0;1;2;3;4;5;6;7;8;9;"-"};A2&"0123456789"))-1)
' C2  =PROC(99^99;--("0"&EXT.TEXTO(A2;MÍNIMO(LOCALIZAR({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));LIN($1:$10000))))
' D2  =ARRUMAR(ESQUERDA(DIREITA(SUBSTITUIR(" - "&A2;" - ";REPT(" ";999));2*999);999))
' E2  =ARRUMAR(DIREITA(DIREITA(SUBSTITUIR(" - "&A2;" - ";REPT(" ";99));297);99))

Att

 
Postado : 27/09/2016 8:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Segue uma forma usando VBA.

Sub AleVBA_21995()
    Dim lr As Long
    Const sFormula1 As String = "=LEFT(A2,MIN(FIND({0,1,2,3,4,5,6,7,8,9,"" - ""},A2&""0123456789""))-1)"
    Const sFormula2 As String = "=LOOKUP(99^99,--(""0""&MID(A2,MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A2&""0123456789"")),ROW($1:$10000))))"
    Const sFormula3 As String = "=TRIM(LEFT(RIGHT(SUBSTITUTE("" - ""&A2,"" - "",REPT("" "",999)),2*999),999))"
    Const sFormula4 As String = "=TRIM(RIGHT(RIGHT(SUBSTITUTE("" - ""&A2,"" - "",REPT("" "",99)),297),99))"
     
    With Sheets("Plan1")
        lr = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .Range("B2").Resize(lr).Formula = sFormula1
        .Range("C2").Resize(lr).Formula = sFormula2
        .Range("D2").Resize(lr).Formula = sFormula3
        .Range("E2").Resize(lr).Formula = sFormula4
        .Range("B2").Resize(lr, 4).Value = .Range("B2").Resize(lr, 4).Value
    End With
End Sub

Att

 
Postado : 27/09/2016 9:49 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Prezados AlexandreVBA e Reinaldo.

Obrigadíssimo pela disposição em ajudar.

Parabéns a vocês e tantos outros que dedicam um pouco do tempo para ajudar, compartilhando o conhecimento e experiencias!!

Obrigado!

 
Postado : 27/09/2016 10:31 am