Você está na página 1de 2

Excel: Dicas de VBA - WorksheetFunction

01 setembro 2011 Tags: Microsoft Excel, VBA

Em artigos anteriores iniciei algumas dicas sobre programao em Visual Basic for Applications
(VBA), aplicado ao Microsoft Excel, de forma a clarificar e a mostrar algumas das melhores
prticas.
Excel: Dicas de VBA - Eventos O que so e como utilizar eventos no Microsoft Excel
Excel: Dicas de VBA - Performance Como melhorar a performance de execuo do cdigo
com mtodos simples e fceis de utilizar.
Excel: Dicas de VBA - Ciclos Como efectuar ciclos da forma correcta
Irei em prximos artigos explorar mais algumas funcionalidades e mostrar algumas dicas que
julgo importantes, mas para j o objecto WorksheetFunction.
O objecto WorksheetFunction permite utilizar frmulas que j utilizamos directamente nas
clulas, atravs de mtodos, que esto disponveis no Microsoft Excel. Tem ainda algumas
propriedades (Application, Creator e Parent), embora menos utilizadas.
Esta possibilidade de utilizar frmulas no cdigo simplifica bastante inmeras operaes e
sem dvida um objecto muito importante. Podem ser utilizadas formulas simples como o
Sum(), Min(), Max(), Count(), etc, at formulas mais complexas, como o SumProduct(),
Index(), VLookup(), DCount(), etc. E se em alguns casos simplifica apenas a leitura do cdigo,
em outros, a sua utilizao resolve-nos alguns problemas mais complexos.
Quando colocamos o ponto (.) a seguir ao objecto WorksheetFunction, mostrada a lista dos
mtodos e propriedades disponveis e podemos aqui encontrar uma lista muito extensa.

NOTA: De referir que as formulas que podemos usar (e apresentadas na lista) so apenas as
que esto disponveis na verso utilizada, ou seja, a verso do Excel 2003 tem menos funes
disponveis do que o Excel 2007 ou 2010. Isto importante tambm por questes de
compatibilidade.
Por exemplo, quando queremos gerar um nmero aleatrio entre dois valores, podemos fazer
da forma tradicional:
Dim resultado As Integer
Randomize
resultado = Int((10 * rnd) + 1)
MsgBox resultado

Neste caso chamada a funo Randomize e depois gerado um nmero entre 1 e 10. Mas
vejamos como fazer utilizando a funo RandBetween(), disponvel na verso 2007 ou
superior, atravs do objecto WorksheetFunction:
Dim resultado As Double
resultado = WorksheetFunction.RandBetween(1, 10)
MsgBox resultado

Alm de ser utilizada menos uma linha, que pouco importante obviamente, o cdigo mais
simples de analisar.
Mas existem casos mais complexos em que se no utilizarmos o objectoWorksheetFunction, o
cdigo mais extenso. Por exemplo, para somar os valores do seguinte range (como mostra a
figura seguinte) da clula A1 clula A10, teramos de fazer um ciclo e somar o valor de cada

clula para uma varivel.


Utilizando o objecto WorksheetFunction podemos fazer da seguinte forma:
Dim rng As Range
Set rng = Range("a1:a10")
MsgBox WorksheetFunction.Sum(rng)

Neste simples cdigo, onde o resultado ser 55, define-se um range que depois ser indicado
como argumento da funo. O range poderia ser indicado directamente, mas desta forma
mais simples ler o cdigo. Pode-se utilizar mais argumentos (agora indicado directamente
os ranges):
MsgBox WorksheetFunction.Sum(Range("a1:a10"), Range("b1:b10"))

Outro exemplo, utilizando a mesma tabela, poder ser o de contar quantas linhas tm o valor
maior ou igual a 8. Neste caso, sem utilizar este objecto, teramos de fazer um ciclo, verificar
o valor e contando apenas os que estivessem de acordo com o critrio definido. Com o
objecto WorksheetFunction podemos fazer muito facilmente utilizando a formula CountIf():
Dim rng As Range
Set rng = Range("a1:a10")
MsgBox WorksheetFunction.CountIf(rng, ">=8")

Estes so alguns exemplos simples de como o objecto WorksheetFunction simplifica e muito o


cdigo e certamente existem muito mais aplicaes prticas onde o podemos utilizar.
Uma das desvantagens deste objecto de utilizar sempre as funes em Ingls, o que no
ser problema para quem j conhece e utiliza as formulas no traduzidas.
3 comentrios:

Você também pode gostar