none
Quebra de texto VBA

    Question

  •  

    Boa tarde pessoal.

    Novamente venho pedir ajuda a vocês para tentar resolver mais um probleminha, é o seguinte:

    Tenho um arquivo que pego do sistema que copio e colo no Excel, o arquivo fica da seguinte forma :

    Coluna A

    1

    BGE A K7  5B C1  J>BSCJ6C7335599BFZB55N3C8733559>CFABSPCG770LCWLWWJU0GB0AFMJ4560

    2

    3YAP000A04P00T0C12C00PD000000F0E000M0F04000000000003YAP000000000000AA00000000000

    3

    0000000000000000>DCN15MA000000000000000000000000000000000>E000000000000000000000

    4

    0>F000000CN15VB0CN15BA0A00000000000000000000000000000000000000000000000000000000

    5

    00000000000000000000000000000000>G00000000000000000>

    Quero um código que formate este arquivo de modo que sempre cada linha se inicie com as letras marcadas em vermelho. Para o sistema que trabalho, todo este código é como se fosse uma única linha, ou seja, se a linha começar em  >C ela só ira terminar quando encontrar a próxima letra "D". Considerando o exemplo acima, isso significa que deveria ter uma quebra onde a letra C iria para outra linha e seria complementada com a linha 2 e parte da linha 3, onde haveria uma outra quebra.

    Friday, February 17, 2012 3:58 PM

Answers

  • Abaixo segue trecho de código que pode lhe ajudar na solução do seu problema

    obs.: Fiz uma alteração no seu exemplo que é adicionar tambem a letra >A no início dos dados

    Sub main()
    
    ' Função para unir as linhas
    ' em só uma linha
    
    Call unirLinhas(1, 1, 1, 2)
    
    ' Utilização da função Split
    ' separando todo o texto quando encontrado ">"
    quebralinha = Split(Cells(1, 2), ">")
    
    
    ' Descarregamnto do vetor de palavras
    ' nas células abaixo dos dados de origem
    
    For i = 0 To UBound(quebralinha)
    
        If Len(quebralinha(i)) > 1 Then
        Cells(i + 3, 2).Select
        Selection.NumberFormat = "@"
        Cells(i + 3, 2) = Right(quebralinha(i), Len(quebralinha(i)) - 1)
        End If
    
    Next i
    
    End Sub
    
    ' Função para unir as linhas
    ' em só uma linha
    
    Function unirLinhas(linhaOrigem As Integer, colunaOrigem As Integer, _
            linhaDestino As Integer, colunaDestino As Integer)
    
    Do While Cells(linhaOrigem, colunaOrigem) <> ""
        Cells(linhaDestino, colunaDestino) = Cells(linhaDestino, colunaDestino) & Cells(linhaOrigem, colunaOrigem)
        linhaOrigem = linhaOrigem + 1
    Loop
    
    End Function

    Qualquer estou á disposição

    Abrç

    • Marked as answer by rsant Friday, February 24, 2012 9:25 AM
    Friday, February 17, 2012 11:34 PM
  • Altere a linha onde está descarregando o valor para a planilha por este

    ...   

    Cells(i + 3, 2) = ">" & quebralinha(i)

    ...

    • Marked as answer by rsant Friday, February 24, 2012 9:25 AM
    Thursday, February 23, 2012 6:27 PM

All replies

  • Abaixo segue trecho de código que pode lhe ajudar na solução do seu problema

    obs.: Fiz uma alteração no seu exemplo que é adicionar tambem a letra >A no início dos dados

    Sub main()
    
    ' Função para unir as linhas
    ' em só uma linha
    
    Call unirLinhas(1, 1, 1, 2)
    
    ' Utilização da função Split
    ' separando todo o texto quando encontrado ">"
    quebralinha = Split(Cells(1, 2), ">")
    
    
    ' Descarregamnto do vetor de palavras
    ' nas células abaixo dos dados de origem
    
    For i = 0 To UBound(quebralinha)
    
        If Len(quebralinha(i)) > 1 Then
        Cells(i + 3, 2).Select
        Selection.NumberFormat = "@"
        Cells(i + 3, 2) = Right(quebralinha(i), Len(quebralinha(i)) - 1)
        End If
    
    Next i
    
    End Sub
    
    ' Função para unir as linhas
    ' em só uma linha
    
    Function unirLinhas(linhaOrigem As Integer, colunaOrigem As Integer, _
            linhaDestino As Integer, colunaDestino As Integer)
    
    Do While Cells(linhaOrigem, colunaOrigem) <> ""
        Cells(linhaDestino, colunaDestino) = Cells(linhaDestino, colunaDestino) & Cells(linhaOrigem, colunaOrigem)
        linhaOrigem = linhaOrigem + 1
    Loop
    
    End Function

    Qualquer estou á disposição

    Abrç

    • Marked as answer by rsant Friday, February 24, 2012 9:25 AM
    Friday, February 17, 2012 11:34 PM
  •  

    O código está funcionando, porem não está da forma que imaginei. Tinha pensado em um código que encontrando ">" ele quebrasse o texto no sinal. O que está acontecendo é que ele está quebrando o texto após as letras. Exemplo. >A500000>B300000 – quando ele quebra o texto, está ficando da seguinte forma:

    500000

    300000

     E eu tinha imaginado que ficaria assim:

    >A500000

    >B300000

    Tem como ficar desta forma?

    Grato,

    • Marked as answer by rsant Friday, February 24, 2012 9:25 AM
    • Unmarked as answer by rsant Friday, February 24, 2012 9:25 AM
    Thursday, February 23, 2012 3:54 PM
  • Altere a linha onde está descarregando o valor para a planilha por este

    ...   

    Cells(i + 3, 2) = ">" & quebralinha(i)

    ...

    • Marked as answer by rsant Friday, February 24, 2012 9:25 AM
    Thursday, February 23, 2012 6:27 PM
  • Muito obrigado pela ajuda.

    Friday, February 24, 2012 9:53 AM