Pages

sexta-feira, 13 de janeiro de 2012

Dicas de VBA – WorksheetFunction

Em artigos anteriores iniciei algumas dicas sobre programação em Visual Basic for Applications (VBA), aplicado ao Microsoft Excel, de forma a clarificar e a mostrar algumas das melhores práticas.
• Excel: Dicas de VBA – Eventos – O que são e como utilizar eventos no Microsoft Excel
• Excel: Dicas de VBA – Performance – Como melhorar a performance de execução do código com métodos simples e fáceis de utilizar.
• Excel: Dicas de VBA – Ciclos – Como efectuar ciclos da forma correcta
Irei em próximos artigos explorar mais algumas funcionalidades e mostrar algumas dicas que julgo importantes, mas para já o objecto WorksheetFunction.



O objecto WorksheetFunction permite utilizar fórmulas que já utilizamos directamente nas células, através de métodos, que estão disponíveis no Microsoft Excel. Tem ainda algumas propriedades (Application, Creator e Parent), embora menos utilizadas.
Esta possibilidade de utilizar fórmulas no código simplifica bastante inúmeras operações e é sem dúvida 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 código, em outros, a sua utilização resolve-nos alguns problemas mais complexos.
Quando colocamos o ponto (.) a seguir ao objecto WorksheetFunction, é mostrada a lista dos métodos e propriedades disponíveis e podemos aqui encontrar uma lista muito extensa.



NOTA: De referir que as formulas que podemos usar (e apresentadas na lista) são apenas as que estão disponíveis na versão utilizada, ou seja, a versão do Excel 2003 tem menos funções disponíveis do que o Excel 2007 ou 2010. Isto é importante também por questões de compatibilidade.
Por exemplo, quando queremos gerar um número aleatório entre dois valores, podemos fazer da forma tradicional:
Dim resultado As Integer
Randomize
resultado = Int((10 * rnd) + 1)
MsgBox resultado
Neste caso é chamada a função Randomize e depois é gerado um número entre 1 e 10. Mas vejamos como fazer utilizando a função RandBetween(), disponível na versão 2007 ou superior, através do objecto WorksheetFunction:
Dim resultado As Double
resultado = WorksheetFunction.RandBetween(1, 10)
MsgBox resultado
Além de ser utilizada menos uma linha, que é pouco importante obviamente, o código é mais simples de analisar.
Mas existem casos mais complexos em que se não utilizarmos o objectoWorksheetFunction, o código é mais extenso. Por exemplo, para somar os valores do seguinte range (como mostra a figura seguinte) da célula A1 à célula A10, teríamos de fazer um ciclo e somar o valor de cada célula para uma variável.



Utilizando o objecto WorksheetFunction podemos fazer da seguinte forma:
Dim rng As Range
Set rng = Range(“a1:a10″)
MsgBox WorksheetFunction.Sum(rng)
Neste simples código, onde o resultado será 55, define-se um range que depois será indicado como argumento da função. O range poderia ser indicado directamente, mas desta forma é mais simples ler o código. 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 têm o valor maior ou igual a 8. Neste caso, sem utilizar este objecto, teríamos de fazer um ciclo, verificar o valor e contando apenas os que estivessem de acordo com o critério 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 são alguns exemplos simples de como o objecto WorksheetFunction simplifica e muito o código e certamente existem muito mais aplicações práticas onde o podemos utilizar.
Uma das “desvantagens” deste objecto é de utilizar sempre as funções em Inglês, o que não será problema para quem já conhece e utiliza as formulas não traduzidas.digo em VBA!

Escrito por: Jorge Paulino
Homepage: Página Autor: Jorge Paulino

Nenhum comentário:

Postar um comentário