Notifications
Clear all

Retornar últimos valores de cada linha com macro

7 Posts
2 Usuários
0 Reactions
1,014 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde a todos!

Estou precisando de ajuda com uma macro que faça um Loop e coloque todos os últimos valores de cada linha em uma coluna única.
A tentativa que elaborei deu certo. Porém com ela tenho que duplicar a macro para cada linha. Vai ficar muito grande.
Segue anexo modelo.

De antemão, muito Obrigado.

Silvio Felinto

 
Postado : 26/02/2015 11:55 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Seria isso?

Sub preenchercol()

Application.ScreenUpdating = False
'O numero 2 signfica que começará a preencher a partir da segunda linha.
For i = 2 To 20
    Cells(i, 18).Value = Cells(i, 1).End(xlToRight).Value
Next

Application.ScreenUpdating = True
End Sub
 
Postado : 26/02/2015 12:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gtsalikis,

Testei aqui e só está colocando o valor da célula A2 e, ainda assim, na coluna 17 (coluna Q) e não 18, que é a coluna R. Por que será?

Silvio Felinto

 
Postado : 26/02/2015 12:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Desculpe.

Testei a primeira macro e foi a segunda que você acertou.

Testei a segunda e foram copiados os valores de A2 até A4. Não foi copiado o valor da célula A5. Por que será?

Silvio Felinto

 
Postado : 26/02/2015 12:55 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Verdade. Isso é porque a linha 5 só tem um valor na coluna A. Então, o comando de ir até a ultima coluna -> end(xltoright) vai levar À ultima coluna da planilha, que estará vazia.

Tente asim:

Sub preenchercol()

Application.ScreenUpdating = False
'O numero 2 signfica que começará a preencher a partir da segunda linha.
For i = 2 To 20
    If Cells(i, 1).End(xlToRight).Column > 18 Then
        Cells(i, 18).Value = Cells(i, 1).Value
    Else
        Cells(i, 18).Value = Cells(i, 1).End(xlToRight).Value
    End If
Next

Application.ScreenUpdating = True
End Sub

PS: uma alternativa, mais simples, seria partir da coluna Q, indo para a esquerda (em vez de sair da coluna A para a direita:

Sub preenchercol()

Application.ScreenUpdating = False
'O numero 2 signfica que começará a preencher a partir da segunda linha.
For i = 2 To 20
    Cells(i, 18).Value = Cells(i, 18).End(xlToLeft).Value
Next

Application.ScreenUpdating = True
End Sub
 
Postado : 26/02/2015 1:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gtsalikis,

Fiz uma alteração para retornar o último valor, mesmo sendo o único da da linha na coluna A e não é que deu certo?

Mesmo assim, quero expressar meu agradecimento pela sua ajuda.

Segue a macro com a alteração que fiz.

Sub retornarultimacol()

On Error GoTo 0

'O numero 2 signfica que começará a preencher a partir da segunda linha.
For i = 2 To 20

If Cells(i, 2).Value = "" Then

Cells(i, 18).Value = Cells(i, 1).Value

Else

Cells(i, 18).Value = Cells(i, 1).End(xlToRight).Value
End If
Next

End Sub

Um abraço.
Silvio Felinto

 
Postado : 26/02/2015 1:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Gtsalikis,

Mais uma vez muito obrigado.

Agora temos mais opções para entender como funcionam as macros.

Um abraço.

Silvio Felinto

 
Postado : 26/02/2015 1:39 pm