Usuário com melhor resposta
Quebra de texto VBA

Pergunta
-
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.
Respostas
-
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ç
- Marcado como Resposta rsant sexta-feira, 24 de fevereiro de 2012 09:25
-
Todas as Respostas
-
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ç
- Marcado como Resposta rsant sexta-feira, 24 de fevereiro de 2012 09:25
-
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,
-
-