Boa tarde,
Publiquei esta dica no fórum INFO, porém como ele não exite mais resolvi atualizá-la e republicar aqui.
*******************************************************************************************************************************
Em determinadas situações é necessário inserir muitas fórmulas numa planilha e a utilização do VBA pode facilitar a tarefa.
Em diversos fóruns noto que há dúvidas sobre como inserir fórmulas numa planilha por meio de VBA.
Algumas vezes há utilização de fórmulas em inglês onde poderiam estar em português.
Exemplo:
As fórmulas abaixo são equivalentes:
[B1].FormulaLocal = "=PROCV(A1;E1:F10;2;0)"
[B2].Formula = "=VLOOKUP(A1,E1:F10,2,0)"
A função PROCV (português) é equivalente a VLOOKUP (inglês).
Você pode escolher se quer utilizar a função em português (FormulaLocal) ou inglês (Formula).
Note o detalhe que a vírgula separa os parâmetros da fórmula em inglês, enquanto o ponto e vírgula é utilizado na versão em português.
Portanto podemos utilizar uma ou outra, o que não podemos é misturar a sintaxe de uma com a outra o que vai resultar em erro.
Nos exemplos acima temos intervalos fixos o que facilita a inclusão da fórmula de maneira direta.
E se quisermos usar variáveis?
Veja o exemplo abaixo:
[B3].FormulaLocal = "=PROCV(A1;E1:F" & j & ";2;0)"
Só não podemos esquecer de atribuir um valor a "j".
Como pode ser observado fizemos a concatenação de duas "strings" com uma variável.
E se quisermos inserir a seguinte fórmula?
=PROCV("NOME";E1:F10;2;0)
Teremos um problema com as aspas duplas. Como resolvê-lo?
Uma opção seria a seguinte:
[B4].FormulaLocal = "=PROCV(""NOME"";E1:F10;2;0)"
Onde há aspas duplas internamente, duplicamos e aí o problema está resolvido.
E se precisarmos preencher uma grande série de fórmulas onde um parâmetro vai variar?
Suponhamos a primeira fórmula:
[B1].FormulaLocal = "=PROCV(A1;E1:F10;2;0)"
Se formos colocar uma série de 10 fórmulas na mesma coluna mudando o primeiro parâmetro a segunda fórmula seria:
[B2].FormulaLocal = "=PROCV(A2;E1:F10;2;0)"
E assim por diante...
Poderíamos usar uma variável e um laço "For":
For i = 1 To 10
Range("B" & i).FormulaLocal = "=PROCV(A" & i & ";E1:F10;2;0)"
Next
Há outra maneira, usando auto preenchimento:
[B1].FormulaLocal = "=PROCV(A1;E$1:F$10;2;0)"
[B1].AutoFill [B1:B10]
Mas a maneira que prefiro é a seguinte:
[B1:B10].FormulaLocal = "=PROCV(A1;E$1:F$10;2;0)"
Desta maneira você coloca de uma vez todas as fórmulas e a sua macro vai ficar bem mais rápida, caso a quantidade de fórmulas seja grande.
E as fórmulas matriciais? Como inserí-las?
Segundo a Microsoft (FormulaArray), é necessário inserir a fórmula utilizando o estilo de referência L1C1.
Portanto a fórmula "=SOMA(1/CONT.SE($A$1:$A$20;$A$1:$A$20))", bem conhecida e utilizada para contar os valores exclusivos de um intervalo deveria ser inserida assim:
[E1].FormulaArray = "=SUM(1/COUNTIF(R1C1:R20C1,R1C1:R20C1))"
Para miha surpresa, consegui inserir a fórmula no estilo de referência A1:
[E2].FormulaArray = "=SUM(1/COUNTIF($A$1:$A$20,$A$1:$A$20))"
O detalhe é que a fórmula tem de ser inserida em inglês, porém com uma pequena "gambiarra" dá para contornar a situação:
[E2].FormulaLocal = "=SOMA(1/CONT.SE(A1:A20;A1:A20))"
[E2].FormulaArray = [E2].Formula
Acredito que o texto possa ajudar muita gente que precisa, por um motivo ou outro, inserir fórmulas via VBA.
Abraço
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 07/10/2014 1:18 pm