Página 1 de 1

Mudando de coluna ao chegar à linha 1048576

Enviado: 29 Dez 2018 às 22:21
por Domingsp
Olá, gostaria de criar uma rotina onde, a cada vez que eu executar a macro, a macro deverá escrever até a ultima linha da coluna P, que é a linha 1048576. Se houverem mais dados a serem escritos, a macro deverá escreve-los na coluna seguinte, coluna Q, começando pela linha 2. E de novo, a cada vez que executo a macro, deverá escrever ate a ultima linha dessa nova coluna e passando para a proxima, se houver necessidade. E assim por diante. Não sei por onde começar, não tenho nem um esboço de codigo pra apresentar. Se alguém tiver alguma ideia, fico grato.

Mudando de coluna ao chegar à linha 1048576

Enviado: 30 Dez 2018 às 07:21
por gfranco
Bom dia.

Sugiro postar um modelo de sua planilha (com dados fictícios mas mesma estrutura)
Poste um modelo em Excel (não uma imagem) de preferência com uma demonstração manual do resultado pretendido.
Para anexar o arquivo, clique em +Resposta e localize a opção de "adicionar um anexo" logo abaixo da janela de digitação de mensagens.

Re: Mudando de coluna ao chegar à linha 1048576

Enviado: 31 Dez 2018 às 13:05
por Domingsp
Boa tarde. Na planilha que anexei, a cada vez que é executada a macro gera 100.000 numeros aleatorios e escreve na proxima linha vazia, de modo que vai acumulando esses numeros na coluna C.
Quando houverem 1.000.000 numeros, a proxima execução vai dar erro porque seriam 1.100.000 numeros, sendo que o limite de linhas do excel é de até 1048576. Não cabem 1.100.000 numa coluna.
Eu quero que a macro continue escrevendo, na coluna D, o que não coube na coluna C. E depois quando a coluna D estiver cheia, continue escrevendo na Coluna E. Assim por diante.
Mudando de coluna.xlsm

Re: Mudando de coluna ao chegar à linha 1048576

Enviado: 02 Jan 2019 às 07:29
por Jimmy
Olá Domingsp,

Tente a macro abaixo.

Obs. Quando a coluna é completada, a macro pula para a seguinte ASSUMINDO que ela está necessariamente vazia. Se não for esse o caso, é necessário definir qual procedimento deve ser adotado, e alterar a macro.

Sub Teste()
Limite = Rows.Count
LinIni = 2
For Ucol = 3 To 16384
If Cells(Limite, Ucol).Value = "" Then Exit For
Next
Ulin = Cells(Limite, Ucol).End(xlUp).Row + 1
If Ulin < LinIni Then Ulin = LinIni
For m = 1 To 100000
If Ulin > Limite Then Ucol = Ucol + 1: Ulin = LinIni
Cells(Ulin, Ucol) = Int((340 - 16 + 1) * Rnd)
Ulin = Ulin + 1
Next
End Sub


Jimmy San Juan

Re: Mudando de coluna ao chegar à linha 1048576

Enviado: 02 Jan 2019 às 19:54
por osvaldomp
Experimente:
Código: Selecionar todos
Sub ColunaCheia()
 Dim S(), i As Long, LR As Long, LC As Long, k As Long
  LC = Cells(2, Columns.Count).End(1).Column
  If LC < 3 Then LC = 3
  LR = Cells(Rows.Count, LC).End(3).Row
  
  If Rows.Count - LR >= 100000 Then
   ReDim S(1 To 100000, 1 To 1)
    For i = 1 To 100000
     S(i, 1) = Int((340 - 16 + 1) * Rnd + 0)
    Next i
   Cells(LR + 1, LC).Resize(100000).Value = S
  Else
   k = LR + 1
   ReDim S(1 To (Rows.Count - LR), 1 To 1)
    For i = 1 To (Rows.Count - LR)
     S(i, 1) = Int((340 - 16 + 1) * Rnd + 0)
    Next i
   Cells(k, LC).Resize(Rows.Count - LR).Value = S
   LC = LC + 1: k = 2
   ReDim S(1 To 100000 - (Rows.Count - LR + 1), 1 To 1)
    For i = 1 To 100000 - (Rows.Count - LR + 1)
     S(i, 1) = Int((340 - 16 + 1) * Rnd + 0)
    Next i
   Cells(k, LC).Resize(100000 - (Rows.Count - LR + 1)).Value = S
  End If

End Sub


Re: Mudando de coluna ao chegar à linha 1048576

Enviado: 03 Jan 2019 às 23:22
por Domingsp
Muito obrigado, amigos! Ambas soluções resolvem a questão.