Jump to content
amss1976

Inserir fórmulas em excel através de vba

Recommended Posts

amss1976

Bom dia,

Estou com um problema: não consigo/sei inserir as seguintes fórmulas nas células do excel através de VBA. Se alguém me pudesse ajudar... :P

  • =SE(OU(E4="";F4="");"";F4*E4)
  • =SE(OU(G4="";$B$19="");"";ARRED(I4/E4;2))
  • =SE(OU(G4="";$B$19=0);"";ARRED(G4/$B$19;2))    [nesta fórmula no "$B$19", o 19 estaria de pendente do n.º de linhas ocupadas e vai variar de ficheiro para ficheiro]
  • =SE(I4="";"";ARRED(I4/$I$19;4))    [nesta fórmula no "$I$19", o 19 estaria de pendente do n.º de linhas ocupadas e vai variar de ficheiro para ficheiro]
  • =SE(OU(J4="";$E$181="");"";ARRED(J4*$E$181;2))    [nesta fórmula no "$E$181", o 181 estaria de pendente do n.º de linhas ocupadas e vai variar de ficheiro para ficheiro]
  • =SE(OU(I4="";K4="");"";ARRED(M4/E4;2))

Consigo introduzir por exemplo =ARRED(I4/E4;2), mas se tento usar o "SE" ou o "OU", dá-me erro (Run-time error '1004').

Se for preciso disponibilizar o ficheiro posso faze-lo.

O mais certo é ser um erro de "principiante".

Obrigado desde já pela ajuda.

Share this post


Link to post
Share on other sites
jpaulino

Não tenho a certeza, porque uso sempre a formula em Inglês, mas podes definir em inglês desta forma

Range("a1").Formula = "=IF(..."

Podes também tentar em Português usando a propriedade FormulaLocal:

Range("a1").FormulaLocal = "=SE(..."

Esta última não tenho a certeza se funciona :P

Share this post


Link to post
Share on other sites
amss1976

Não tenho a certeza, porque uso sempre a formula em Inglês, mas podes definir em inglês desta forma

Range("a1").Formula = "=IF(..."

Podes também tentar em Português usando a propriedade FormulaLocal:

Range("a1").FormulaLocal = "=SE(..."

Esta última não tenho a certeza se funciona ;)

Já tentei quer com formula (com o se) quer com formulalocal (com o if) e dá-me sempre o mesmo erro...  :P

Share this post


Link to post
Share on other sites
jpaulino

Ao contrário ... formula = "IF(..." e formulalocal="SE(...". Até indicando como value deve dar.

Atenção que o separador é a virgula :P

Share this post


Link to post
Share on other sites
amss1976

Ao contrário ... formula = "IF(..." e formulalocal="SE(...". Até indicando como value deve dar.

Sim era isso que queria dizer. :D

Atenção que o separador é a virgula ;)

Não percebi a virgula ser o separador...  :P

Share this post


Link to post
Share on other sites
amss1976

Mostra lá como fizeste com o "if" e com o "se"

Fiz assim:

Row = 4
Col = 9
Cells(Row, Col).FormulaLocal = "=SE(OU(G4="";$B$19=0);"";ARRED(G4/$B$19;2))"
Cells(Row, Col).Select
Selection.Copy
For Row = 4 To Row + Nartigos - 1
    Cells(Row, Col).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Selection.Copy
Next Row

e assim:

Row = 4
Col = 9
Cells(Row, Col).Formula = "=IF(OR(G4="";$B$19=0);"";ROUND(G4/$B$19;2))"
Cells(Row, Col).Select
Selection.Copy
For Row = 4 To Row + Nartigos - 1
    Cells(Row, Col).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Selection.Copy
Next Row

E dá o erro que disse no post anterior. :wallbash:

Share this post


Link to post
Share on other sites
jpaulino

Atenção que o separador é a virgula ;)

Cells(Row, Col).Formula = "=IF(OR(G4="",$B$19=0),"",ROUND(G4/$B$19,2))"

e não

Cells(Row, Col).Formula = "=IF(OR(G4="";$B$19=0);"";ROUND(G4/$B$19;2))"

Share this post


Link to post
Share on other sites
amss1976

Cells(Row, Col).Formula = "=IF(OR(G4="",$B$19=0),"",ROUND(G4/$B$19,2))"

Mesmo usando dessa forma continua a dar o mesmo erro... 😡

Share this post


Link to post
Share on other sites
jpaulino

Mesmo usando dessa forma continua a dar o mesmo erro... 😡

O problema é das aspas ... é preciso duplicar para que ele entenda como aspas. Assim deve dar:

Cells(1, 1).Formula = "=IF(OR(G4="""",$B$19=0),"""",ROUND(G4/$B$19,2))"

Share this post


Link to post
Share on other sites
amss1976

O problema é das aspas ... é preciso duplicar para que ele entenda como aspas. Assim deve dar:

Cells(1, 1).Formula = "=IF(OR(G4="""",$B$19=0),"""",ROUND(G4/$B$19,2))"

:cheesygrin:

Era mesmo esse o problema, a falta de aspas. No entanto em vez de vírgulas, usei ";". Obrigado pela ajuda.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.