Notifications
Clear all

Intervalo de Células Composto

6 Posts
4 Usuários
2 Reactions
1,224 Visualizações
(@anderson)
Posts: 203
Reputable Member
Topic starter
 

Tenho código abaixo:

 

Sub salvar()

Dim intervalo As Range

Dim intervalo2 As Range

Dim linha As Long

linha = 2

Set intervalo = Plan1.Range("A2, A4, A6, A8, A10")

While Plan2.Range("A" & linha).Value <> ""

linha = linha + 1

Wend

Plan2.Range("A" & linha & ":E" & linha).Value = intervalo.Value

End Sub



Ele não apresenta mensagem de erro, mas coloca em todas as células de destino na Plan2 o mesmo valor da célula A2 da Plan1.

Eu preciso de uma forma de montar o intervalo de destino em apenas uma linha de código, sem ficar percorrendo célula a célula do intervalo.

Algo que fosse muito parecido com isto:

 


Plan2.Range("A" & linha & ":E" & linha).Value = intervalo.Value

 

 

Mas que colocasse os valores corretos em cada célula.

Este tópico foi modificado 4 anos atrás 2 vezes by Anderson

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 08/09/2020 7:57 pm
Raygsson
(@raygsson)
Posts: 68
Trusted Member
 
Anderson
Deu pra resumir o código nestas linhas:

Sub salvar()
  Dim Linha As Long: Linha = Plan2.Range("A1048576").End(xlUp).Row + 1
  Plan2.Range("A" & Linha).PasteSpecial Paste:=xlPasteAll, Transpose:=True = Plan1.Range("A2,A4,A6,A8,A10").Copy
End Sub
 
Postado : 08/09/2020 9:32 pm
Anderson reacted
(@anderson)
Posts: 203
Reputable Member
Topic starter
 

Obrigado.

Vou aguardar para ver se alguém conhece uma forma que não usa Copy Paste.

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 08/09/2020 10:08 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Boa noite, @anderson

O método Copy/Paste como proposto pelo colega @raygsson é o único que pode transferir o conteúdo de todas as células de intervalos não-adjacentes em uma só operação para outro intervalo. Fora isso, vc teria que fazer loop não em cada célula, mas em cada grupo de células contíguas de seu intervalo (cada área). Por exemplo, se seu intervalo fosse:

Set intervalo = Plan1.Range("A2:A5,A7,A9:A10")

Vc teria que fazer pelo menos 3 loops (intervalo.Areas.Count = 3) embora ele tenha (intervalo.Cells.Count) = 7 células. Para esses 3 grupos de células, cada um admite transferir seu valor ou fazer outro processamento em bloco em uma só operação (por ex. propriedades Value, Value2, atribuir a uma matriz, etc.).

Como seu intervalo do exemplo é composto só por células únicas não adjacentes, sendo 5 células serão 5 entradas no loop mesmo.

 
Postado : 08/09/2020 10:32 pm
Anderson reacted
(@anderson)
Posts: 203
Reputable Member
Topic starter
 

@edsonbr Obrigado, Edson.

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 09/09/2020 7:06 am
(@herikalwp)
Posts: 10
Active Member
 

@anderson pelo que entendi você quer copiar os dados de um intervalo na planilha 1 e colar na planilha 2.

Há várias formas de fazer isso. Na minha opinião a mais simples é utilizar uma referência estruturada, o que facilita a identificação de um intervalo dinâmico. Para fazer isso, selecione o intervalo e formate como tabela. A referência a esse intervalo é feita assim no VBA: "Range("Tabela1[Coluna1]")" (lembrando de colocar o nome correto da tabela e da coluna de dados).

Se não quer utilizar o método copy paste, terá que utilizar um array para capturar os dados na primeira planilha e depois percorrer as células do intervalo de destino, igualando cada uma a um elemento do array (aqui tem o que você precisa saber sobre arrays: http://www.macoratti.net/arrays.htm).

Outra coisa: podes utilizar o método End(xlDown) para localizar a primeira linha em branco, em vez de um loop. Assim:

Range("A2").Select
linha=Selection.End(xlDown).Offset(1,0).Row

Espero ter ajudado.

 
Postado : 09/09/2020 6:00 pm