Notifications
Clear all

Arrastar Fórmula até a última linha

8 Posts
3 Usuários
0 Reactions
4,099 Visualizações
(@davidcont)
Posts: 4
Active Member
Topic starter
 

Pessoal,
bom dia!

Estou desenvolvendo uma macro no GM (Gravador de Macro), o objetivo aqui é ajustar um arquivo que é extraido por um sistema para ele ficar no layout exato para impute em um outro sistema.

Entretanto, me deparei com um problema que não consegui resolver. Uma das etapas desta macro é copiar a fórmula de uma célula e arrastar até a ultima linha, mas o que está ocorrendo é que ele sempre limita à linha 70 e quando o arquivo tem mais de 70 linhas a fórmula sempre pára na linha 70.

Enfim, o que quero é simplesmente que a formula seja arrastada até a última linha do arquivo, independentemente do número de linhas que ele tenha (70, 80, 150, etc).. Conseguem me ajudar??? :(

Sub teste5()
'
' teste5 Macro
'

'
ActiveCell.Offset(0, 18).Columns("A:A").EntireColumn.Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Select
ActiveCell.FormulaR1C1 = "=IF(RC[-12]=""c"",-1*RC[-1],RC[-1])"
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A70")
ActiveCell.Range("A1:A70").Select
ActiveWindow.SmallScroll Down:=45
End Sub

 
Postado : 20/01/2014 8:04 am
(@gtsalikis)
Posts: 2373
Noble Member
 

o problema está nessas linhas:

Selection.AutoFill Destination:=ActiveCell.Range("A1:A70")
ActiveCell.Range("A1:A70").Select

note que ele só seleciona mesmo o range A1:A70

Tente assim:

Sub teste5()
'
' teste5 Macro
'
Dim Ultimalinha As Long 
Ultimalinha = Range("A" & Rows.Count).End(xlUp).Row

ActiveCell.Offset(0, 18).Columns("A:A").EntireColumn.Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Select
ActiveCell.FormulaR1C1 = "=IF(RC[-12]=""c"",-1*RC[-1],RC[-1])"
ActiveCell.Select
Selection.AutoFill Destination:=ActiveCell.Range(Cells(1,1), Cells(Ultimalinha, 1))
ActiveCell.Range(Cells(1,1), Cells(Ultimalinha, 1)).Select
ActiveWindow.SmallScroll Down:=45
End Sub
 
Postado : 20/01/2014 8:11 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

David, em primeiro lugar, recomendaria que utilizasse o gravador apenas como referência, pois gera códigos bastante 'sujos' e que, numa mínima modificação, pode deixar de atender o pretendido.

Seria melhor se disponibilizasse um modelo, pois é necessário determinar até que linha irá a fórmula. Provavelmente a referência esteja em outra coluna.

De qualquer maneira, seguem sugestões:

Supondo que a fórmula esteja em A1 e que os dados estejam até a linha 85 (coluna B como referência):

f = Range("B65536").End(xlUp).Row 'determina a última linha de dados

Range("A1").Copy 'copia a fórmula

Range("A2:A" & f).Select

ActiveSheet.Paste

Observações: é apenas um exemplo, pois não estou certo quanto às referências em sua planilha; em rpincípio, não vejo necessidade de 'arrastar' a fórmula; veja se, antes de rodar a macro, não é necessário apagar a área com os dados; ref: versão 2003.

Veja se ajuda e qualquer coisa, reporta ou disponibilize um modelo (compactado) com dados fictícios.

 
Postado : 20/01/2014 8:19 am
(@davidcont)
Posts: 4
Active Member
Topic starter
 

Tentei, quase deu mas deu Bug... dá uma olhada no anexo.

 
Postado : 20/01/2014 8:21 am
(@davidcont)
Posts: 4
Active Member
Topic starter
 

Ok Pessoal,

Segue o arquivo com a "macro7" que faz a função que preciso, no entanto limitada à linha da gravação original.

 
Postado : 20/01/2014 8:29 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

davidcont,

Você esqueceu as duas linhas que o gtsalikis colocou no início.

Dim Ultimalinha As Long 
Ultimalinha = Range("A" & Rows.Count).End(xlUp).Row

Dentre outras como o Edson disse... O gerador de macros gera algumas informações sem necessidade, e muitos select's.

Qualquer coisa da o grito.
Abraço

 
Postado : 20/01/2014 8:34 am
(@davidcont)
Posts: 4
Active Member
Topic starter
 

Funcionou amigos com a resposta do Edson.. muito obrigado a todos.

 
Postado : 21/01/2014 10:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Caso seja necessário reabrir o tópico, o autor poderá enviar uma MP para um dos moderadores solicitando o desbloqueio.

 
Postado : 21/01/2014 11:07 am