Notifications
Clear all

macro para substituir fórmula

15 Posts
4 Usuários
0 Reactions
3,061 Visualizações
(@psyckiller)
Posts: 12
Eminent Member
Topic starter
 

preciso de uma macro que substitua a referência de célula na fórmula pelo valor de uma célula ex.:
nas células G1:BE1 está numerada de 1 a 50
nas células G2:BE2 está a fórmula abaixo:
=CONT.SE($A$9999:$F$9999;$A7)+CONT.SE($A$9999:$F$9999;$B7)+CONT.SE($A$9999:$F$9999;$C7)+CONT.SE($A$9999:$F$9999;$D7)+CONT.SE($A$9999:$F$9999;$E7)+CONT.SE($A$9999:$F$9999;$F7)

queria fazer uma macro que substituísse o número 9999 na fórmula pelo número de cada célula de G1:BE1 como:
a fórmula de G2 ficaria assim
=CONT.SE($A$1:$F$1;$A7)+CONT.SE($A$1:$F$1;$B7)+CONT.SE($A$1:$F$1;$C7)+CONT.SE($A$1:$F$1;$D7)+CONT.SE($A$1:$F$1;$E7)+CONT.SE($A$1:$F$1;$F7)

a fórmula de H2 ficaria
=CONT.SE($A$2:$F$2;$A7)+CONT.SE($A$2:$F$2;$B7)+CONT.SE($A$2:$F$2;$C7)+CONT.SE($A$2:$F$2;$D7)+CONT.SE($A$2:$F$2;$E7)+CONT.SE($A$2:$F$2;$F7)

substituindo os "9999" da fórmula pelo valor da célula de cima. tem uma maneira de fazer isto no excel?

 
Postado : 19/10/2013 9:57 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

psyckiller,

Creio que não entendi a sua solicitação, pois, se é possível usar da forma que você mesmo colocou com exemplo (fazendo referência à própria célula) porque utilizar VBA?

 
Postado : 19/10/2013 10:56 am
(@psyckiller)
Posts: 12
Eminent Member
Topic starter
 

psyckiller,

Creio que não entendi a sua solicitação, pois, se é possível usar da forma que você mesmo colocou com exemplo (fazendo referência à própria célula) porque utilizar VBA?

porque são muitas células... e não tem como puxar pois a fórmula contém referência absoluta $A$1:$F$1; por isso eu copiei a fórmula com $A$9999:$F$9999 para substituir os 9999 pelo valor que está na célula superior, será que não tem jeito de criar uma macro para fazer isso? eu tentei fazer uma macro copiando o conteúdo da célula superior, mas não deu certo, se alguém puder ajudar eu agradeço.

 
Postado : 21/10/2013 5:53 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Eu ainda não entendi o desejado. O que considera "valor que está na célula superior" ??

 
Postado : 21/10/2013 8:07 am
(@gtsalikis)
Posts: 2373
Noble Member
 

... e não tem como puxar pois a fórmula contém referência absoluta $A$1:$F$1

Igual aos outros, eu ainda não consegui entender. Porque vc simplesmente não tira a referência absoluta, ou seja, deixa como relativa e arrasta?

 
Postado : 21/10/2013 11:05 am
(@psyckiller)
Posts: 12
Eminent Member
Topic starter
 

Eu ainda não entendi o desejado. O que considera "valor que está na célula superior" ??

o que eu quero é bem simples... uma macro que copie o conteúdo de uma célula e cole em parte do conteúdo de outra célula ex.:

na célula "A1" tem o número "1"
na célula "A2" tem uma fórmula com referência absoluta "$A$9999:$F$9999"

o que eu preciso é de uma macro que pegue o "1" da célula "A1" e cole no lugar dos "9999" na célula "A2"... não sei se é possível... desde já agradeço

 
Postado : 23/10/2013 5:47 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente:

Sub Susbstituir()
Dim x As Long
'Altere para o nome de sua planilha se necessario
With Sheets("Plan1")
'Considerando inicio na coluna G até BE
    For x = 7 To .Range("BE1").Column
        .Cells(2, x).Formula = Replace(.Cells(2, x).Formula, 9999, .Cells(1, x).Value, 1, -1, vbBinaryCompare)
    Next
End With
End Sub
 
Postado : 23/10/2013 6:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tentei montar umn exemplo baseado em suas informações, mas não me encontrei, alem de eu não ser expert em fomulas.
Acredito que a dica do Reinaldo resolverá sua questão, mas como comentou de trocar o Numero Referenciado na Formula, montei um pequeno exemplo com a Função Indireto e Cont.Se, é mais para ver se ajuda, uma vez que quer isto em macro.

Indireto Dinamico

[]a

 
Postado : 23/10/2013 11:03 am
(@psyckiller)
Posts: 12
Eminent Member
Topic starter
 

o código do Reinaldo quase resolveu o problema é que na planilha as fórmulas não estão numa mesma linha, elas estão descendo como em uma escada vou anexar a planilha pra vcs entenderem o que eu quero, desde já agradeço a todos pelo empenho.

ps.: não precisa ser por macro, se tiver uma maneira com fórmula tb serve.

 
Postado : 24/10/2013 7:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Em H2 faça a seguinte matricial:

{=SE(COLS($G1:G1)<>LIN()-1;"";SOMA(CONT.SE($A1:$F1;$A2:$F2)))}

Arraste para o lado e para baixo,

Abs,

 
Postado : 24/10/2013 10:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente:

Sub SCascata()
Dim x As Long, y As Long
y = 8 'Iniciando coluna H
With Sheets("plan1")
    'Inicia na linha 2 até a ultima linha da coluna A com valor
    For x = 2 To Cells(Cells.Rows.Count, "A").End(xlUp).Row
        .Cells(x, y).Formula = Replace(.Cells(x, y).Formula, 9999, .Cells(1, y).Value, 1, -1, vbBinaryCompare)
    'Incrementa 1 na coluna
    y = y + 1
    Next
End With
End Sub
 
Postado : 24/10/2013 10:34 am
(@psyckiller)
Posts: 12
Eminent Member
Topic starter
 

Em H2 faça a seguinte matricial:

{=SE(COLS($G1:G1)<>LIN()-1;"";SOMA(CONT.SE($A1:$F1;$A2:$F2)))}

Arraste para o lado e para baixo,

Abs,

Caro Reinaldo, ainda não deu certo para o que eu estava querendo, estou enviando novamente a planilha, quero que o restante da planilha fique como nas colunas pintadas em amarelo, elas vão descendo numa sequencia, essa é só uma parte da planilha, ela completa tem 2242 linhas e 2242 colunas eu estava substituindo os 9999 com o recurso Ctrl+U do excel, então resolvi procurar ajuda pra ver se não tem como automatizar isso.

 
Postado : 24/10/2013 12:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Em G2 faça a seguinte matricial:

{=SE(COLS($G1:G1)>LIN()-1;"";SOMA(CONT.SE(INDIRETO("$A"&COL()-6&":$F"&COL()-6);$A2:$F2)))}

Arraste para o lado e para baixo.

Me avise.

Abs,

 
Postado : 24/10/2013 12:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não é apenas substituir mas incluir formulas tambem ???
Creio que o melhor e utilizar a excelente proposta do colega Mandrix
veja no seu anexo como fica com essa proposta

 
Postado : 24/10/2013 1:11 pm
(@psyckiller)
Posts: 12
Eminent Member
Topic starter
 

Em G2 faça a seguinte matricial:

{=SE(COLS($G1:G1)>LIN()-1;"";SOMA(CONT.SE(INDIRETO("$A"&COL()-6&":$F"&COL()-6);$A2:$F2)))}

Arraste para o lado e para baixo.

Me avise.

Abs,

poderia me explicar detalhadamente como funciona essa fórmula

obrigado

 
Postado : 25/10/2013 11:06 am