Página 1 de 1

Macro para separação de texto em colunas.

Enviado: 06 Ago 2018 às 09:39
por edualmeida06
Bom dia pessoal,

Tenho uma planilha com 993 linhas de endereço, rua, numero, bairro,cep,estado, preciso desmembrar essa informação em varias colunas para deixar os dados de forma estruturada, já tentei com texto para colunas, e com formulas, =esquerda, = direita,=ext.texto e não consegui o resultado esperado, por que cada linha tem uma quantidade de caracteres diferentes em cada linha e acho que com um código em VB iria resolver o problema.

AV MARACANA 987 BL 01 - 7 ANDAR TIJUCA 20511-000 RIO DE JANEIRO
R FARME DE AMOEDO 86 IPANEMA 22420-020 RIO DE JANEIRO
R ANA NERI 190 JARDIM 25 DE AGOSTO 25070-420 DUQUE DE CAXIAS
R CONSTANTE RAMOS 173 COPACABANA 22051-010 RIO DE JANEIRO
R CORONEL MOREIRA CESAR 117 CENTRO 24440-400 SÃO GONÇALO

Obrigado.

Re: Macro para separação de texto em colunas.

Enviado: 06 Ago 2018 às 11:50
por osvaldomp
edualmeida06 escreveu:... para deixar os dados de forma estruturada,
O que você quer dizer com "forma estruturada" ?

Sugiro que você disponibilize uma amostra do seu arquivo Excel com algumas linhas com dados que representem todas as variações possíveis de ocorrer, sem repetição, e com o resultado desejado em cada caso.

Re: Macro para separação de texto em colunas.

Enviado: 06 Ago 2018 às 16:20
por edualmeida06
Disse forma estruturada porque o endereço completo fica somente em uma unica linha e célula, mas a ideia é colocar as informações de endereço, numero, bairro, estado, etc, em células e colunas separadas.

Re: Macro para separação de texto em colunas.

Enviado: 06 Ago 2018 às 17:56
por osvaldomp
osvaldomp escreveu: Sugiro que você disponibilize uma amostra do seu arquivo Excel com algumas linhas com dados que representem todas as variações possíveis de ocorrer, sem repetição, e com o resultado desejado em cada caso.

Re: Macro para separação de texto em colunas.

Enviado: 07 Ago 2018 às 08:25
por edualmeida06
Bom dia;

Fiz um exemplo rápido de como eu preciso que seja feito, coloquei em worksheet separada, "Resultado Esperado".

Obrigado

Re: Macro para separação de texto em colunas.

Enviado: 10 Ago 2018 às 13:03
por osvaldomp
Ative a planilha Exemplo e rode o código abaixo.

Código: Selecionar todos
Sub DesdobraEndereço()
 Dim i As Long, k As Long, m As Long, x As Long, c As Range
  Application.ScreenUpdating = False
  For Each c In Range("A2:A" & Cells(Rows.Count, 1).End(3).Row)
   i = InStr(1, c.Value, "-")
   c.Offset(, 4).Value = Mid(c.Value, i - 5, 9)
   c.Offset(, 5).Value = Right(c.Value, Len(c.Value) - i - 4)
   c.Offset(, 1).Value = Evaluate("LOOKUP(LEFT(" & c.Address & ",FIND("" ""," & c.Address & ")),{""AL"";""EST"";""LARGO"";""PC"";""R"";""TRAV""},{""ALAMEDA"";""ESTRADA"";""LARGO"";""PRAÇA"";""RUA"";""TRAVESSA""})")
   For m = i - 6 To 1 Step -1
    If IsNumeric(Mid(c.Value, m, 1)) Then Exit For
   Next m
   c.Offset(, 3).Value = Trim(Mid(c.Value, m + 2, (i - 7) - (m + 1)))
   For m = 7 To Len(c.Value)
    If IsNumeric(Mid(c.Value, m, 1)) And Not IsNumeric(Mid(c.Value, m + 1, 1)) Then
     x = x + 1: Exit For
    ElseIf IsNumeric(Mid(c.Value, m, 1)) Then
     x = x + 1
    End If
   Next m
   c.Offset(, 2).Value = Mid(c.Value, m - x + 1, x)
   i = InStr(1, c.Value, " ")
   If InStr(1, c.Value, "S/N") > 0 Then
    c.Offset(, 1).Value = c.Offset(, 1).Value & " " & Mid(c.Value, i + 1, InStr(1, c.Value, "S/N") - 2 - i)
   Else: c.Offset(, 1).Value = c.Offset(, 1).Value & " " & Mid(c.Value, i + 1, (m - x - 1) - i)
   End If
   x = 0
  Next c
  Application.ScreenUpdating = True
End Sub
obs.
1. o resultado do código será diferente do seu para as linhas 4, 5 e 7
2. seria conveniente introduzir uma coluna COMPLEMENTO para receber informações adicionais sobre o endereço (sala, apto, andar, quadra, ...) e assim torná-lo completo, pois da forma que você fez o endereço está truncado
3. a última coluna é CIDADE e não ESTADO, como você colocou