Notifications
Clear all

VBA - Selecionar dados a cada duas linhas vazias

14 Posts
3 Usuários
0 Reactions
1,934 Visualizações
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Boa tarde galera.

Sou meio novo em VBA e preciso de uma ajuda de vocês.

Na minha coluna ("A"), eu tenho uma sequencia de dados, mais ou menos nesse formato:

[Linha 1] Attention
[Linha 2]
[Linha 3]you sell Xmm usd to banco X
[Linha 4]rate 8.0000 01Feb2016-03Feb2016
[Linha 5]USI # 11111111111111111111111111
[Linha 6]you buy Xmm usd from banco X
[Linha 7]rate 9.0000 29Feb2016-02Mar2016
[Linha 8]USI # 11111111111111111111111111
[Linha 9]
[Linha 10]
[Linha 11]you buy Xmm usd from banco Y
[Linha 12]rate 9000 29Jan2016-02Feb2016
[Linha 13]USI # 333333333333333333333333
[Linha 14]you sell Xmm usd to Banco Y
[Linha 15]rate 9000 29Feb2016-02Mar2016
[Linha 16]USI # 4444444444444444444444444
[Linha 17]
[Linha 18]On Shore @ corretora Z
[Linha 19]You buy 1 x @ 9999 ( base 9999 ) [Z]
[Linha 20]
[Linha 21]
[Linha 22]you sell Xmm usd to banco W
[Linha 23]rate 8.0000 01Feb2016-03Feb2016
[Linha 24]USI # 666666666666666666666
[Linha 25]you buy Xmm usd from banco W
[Linha 26]rate 9.0000 29Feb2016-02Mar2016
[Linha 27]USI # 7777777777777777777777
....

O que separa cada negociação, são duas linhas em branco na sequencia, ou seja, a cada duas linhas seguidas em branco, é uma negociação diferente, como mostra no exemplo as linhas 9,10 e 20,21.

O que eu preciso fazer, é uma macro que identifique e selecione cada negociação separadamente e cole na primeira linha da coluna ao lado.

Por exemplo:
Da [Linha 3] à [Linha 8], a macro manteria na coluna ("A").
Da [Linha 11] à [Linha 19], a macro selecionaria e colaria na célula ("B1")
Da [Linha 22] à [Linha 27], a macro selecionaria e colaria na célula ("C1")

e assim sucessivamente...

Alguem tem alguma ideia de como eu posso fazer essa macro?

Desde ja Obrigado!

 
Postado : 01/02/2016 1:40 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

rafapmotta,

Boa tarde!

Veja se é assim.

 
Postado : 01/02/2016 2:31 pm
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Wagner, boa tarde.

É exatamente assim, mas quando eu coloco outros dados, diferente dos que eu dei no exemplo, ele copia tudo para a coluna B.

os dados variam, mas sempre seguem o raciocinio de que cada negociação está separada por duas linhas vazias seguidas.

negociação 1
Linha vazia
Linha vazia
negociação 2
Linha vazia
Linha vazia
negociação 3
Linha vazia
Linha vazia
...

Sabe me dizer como ajustar isso?

Obrigado e desculpe o incomodo.

 
Postado : 02/02/2016 9:47 am
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Por exemplo... tentei usar a macro que vc fez e funcionou perfeitamente, mas quando mudei os dados para os abaixo, nao funcionou.

Dados:

Attention Rafapmotta

you sell 10mm usd to Banco X
rate 4.0370 01Feb2016-03Feb2016
USI # 12345679321984651984651
you buy 10mm usd from Banco Y
rate 4.0693 29Feb2016-02Mar2016
USI # 1222222222233333333333333

you buy 25mm usd from Banco A
rate 4.0880 29Jan2016-02Feb2016
USI # 9999999999999999999
you sell 25mm usd to Banco B
rate 4.12185 29Feb2016-02Mar2016
USI # 777777555555555544444

On Shore @ W
You buy 5 DR1G16H16 @ 90.90 ( base 555.5 ) [Fundo]

you buy 3mm usd from Banco H
rate 4.1000 29Jan2016-02Feb2016
USI # 11155545adad848444436

On Shore @ W
You sell 6 DOLG16 @ 5555 [Fundo]

 
Postado : 02/02/2016 10:02 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Não entendi...

Aqui funcionou corretamente. Colei o novo texto que você colocou aqui como exemplo e cliquei no botão. Veja que o resultado está OK na planilha.

 
Postado : 02/02/2016 10:13 am
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Pode ser pq estou colando como texto?

 
Postado : 02/02/2016 11:14 am
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Segue o anexo que esta dando o erro.

Só para ficar claro... a sua macro está excelente, mas acho que eu estou fazendo algo errado na hora de colar os dados.

 
Postado : 02/02/2016 11:23 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

rafapmotta,

Não sei exatamente o que está ocorrendo na hora em que você cola os dados no Excel. O que observei foi que nas linhas 10, 17, 21 e 25, muito embora não contenham textos, existem espaços (" ") nelas. Isso faz com que a macro erre e execute de forma incorreta.

Veja que copiei a sua Plan1 original, que agora se chama Plan1 (2), para poder preservar os dados originais. Se você quiser saber quais os dados existem nas linhas que mencionei, basta dar um clique duplo nelas e vera que o cursor fica piscando em um ponto diferente do ponto inicial de outras linhas.

Veja agora, no arquivo anexo, que já dei um jeito nisso também. Agora, antes de verificar as linhas vazias para copiar o código para outro local, primeiramente é feita uma varredura em toda a coluna A e retirado os espaços em branco porventura existentes.

 
Postado : 02/02/2016 1:00 pm
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Wagner,

Ficou excelente a macro, nao tinha observado esses espaços nas linhas vazias. Deve ser a forma que copia do programa.

Só tenho uma ultima duvida.

Quando eu executo a macro com mais negociações, a linha 22 à linha 30, nao sao copiadas para outra coluna, elas ficam paradas na coluna A.

Vou te mandar o anexo que eu estou testando.

Obrigado por toda ajuda que voce esta me dando.

 
Postado : 02/02/2016 1:32 pm
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Parece que a cada 2 negociações, a macro deixa de copiar uma e copia só as proximas duas.

voce tem idéia do que possa ser?

Nesse anexo aqui eu coloquei mais negociações para ficar mais claro.

 
Postado : 03/02/2016 8:21 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Cara... infelizmente, não consegui resolver.

 
Postado : 03/02/2016 1:57 pm
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Wagner, bom dia.

Consegui fazer de um outro jeito aqui, mas está dando um outro erro agora...

A macro está copiando a primeira negociação para a coluna "B" e nao está copiando a ultima.

Tem alguma ideia do que eu estou errando?

Segue a planilha e a macro é o botao 2.

 
Postado : 04/02/2016 6:27 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Nessa situação a rotina interrompe por ter "chegado" ao fim da range determinada.
Experimente na definição da variavel lr acrecescendo duas linhas
lr = Range("A" & Rows.Count).End(xlUp).Row + 2

 
Postado : 04/02/2016 6:47 am
(@rafapmotta)
Posts: 0
New Member
Topic starter
 

Reinaldo, muito obrigado!

Funcionou perfeitamente.

 
Postado : 04/02/2016 6:49 am