Sei sulla pagina 1di 10

Criando funes personalizadas no Excel

Saiba como obter mais de sua planilha eletrnica com recursos de programao.
Por Ladislau Freitas em 27/Jun/2012

O Microsoft Excel, assim como diversos outros programas de planilha eletrnica, est repleto de funes
prontas para uso. Tais funes podem ser acessadas facilmente pressionando-se [SHIFT]+F3 em
qualquer clula da planilha. So centenas, divididas em vrias categorias: cientficas, contbeis,
matemticas, engenharia, etc..
A cada nova verso do programa, mais e mais recursos so adicionados visando automatizar tarefas e
facilitar a vida do usurio. No entanto, pode ser que voc, usurio do Excel, se depare com situaes em
que o programa talvez no tenha a soluo que voc necessita pronta para uso ou que talvez voc
imagine uma soluo diferente ou mais prtica para o problema.
Nessas horas, o melhor a fazer arregaar as mangas e resolver tudo no velho e bom estilo "Do it
yourself!" , ou "faa voc mesmo!"
Desde a verso 5, o Excel disponibiliza um recurso de programao interessante: o VBA (Visual Basic
for Applications). O VBA uma verso da linguagem de programao Visual Basic especfica para os
aplicativos da famlia Office. Com o VBA, possvel automatizar tarefas e definir funes personalizadas
conhecidas como UDF (user defined functions). Funes personalizadas podem ser usadas como
qualquer outra funo do Excel. Aps a criao, aparecem listadas no assistente de funes do Excel
juntamente com todas as outras, porm numa categoria especfica denominada "Definida pelo usurio".
Mos massa!
Para trabalhar com o VBA, o Excel dispe de um IDE (Integrated Developement Enviroment, ou
Ambiente de Desenvolvimento Integrado) semelhante ao encontrado no ambiente de desenvolvimento
do Microsoft Visual Basic. Quem j est acostumado com este tipo de ambiente de programao e,
principalmente, com a linguagem, se sentir em casa.
O Visual Basic relativamente fcil. Sua estrutura e modo de escrita muito semelhante ao Ingls
bsico, no requerendo identificadores como ";" (ponto e vrgula) ou "{ }" (chaves) para delimitar ou
finalizar instrues, como ocorre em linguagens como "C" e "Java".
Tambm no faz distino de comandos escritos com letra minscula ou maiscula como ocorre em
outras linguagens "mais burocrticas" ou de baixo nvel.
O Visual Basic uma linguagem de alto nvel, orientada a eventos e de fcil compreenso. Um pouco de
noo de lgica de programao e entendimento sobre escopo de variveis e funes so os requisitos
mnimos necessrios para poder trabalhar com ela. Requisitos estes que com certeza no faltam a um
operador experiente de Excel.
Para acessar o IDE do VBA, em verses do Office anteriores a 2007, basta ir ao menu "Ferramentas" e,
em seguida, "Macro / Editor do Visual Basic".

Acesso ao Editor do Visual Basic no Excel 2003


Para quem migrou o pacote Office para a Verso 2007, por padro o acesso ao IDE vem desativado.
Para ativ-lo, abra o Excel e clique no menu do Office (boto redondo no canto superior esquerdo).


Ativando acesso ao Editor do Visual Basic no Excel 2007 (1/2)

Em seguida, clique no boto "Opes do Excel". Na caixa de dilogo que se abrir, ative a opo
descrita como "Mostrar guia Desenvolvedor na Faixa de Opes".

Ativando acesso ao Editor do Visual Basic no Excel 2007 (2/2)

Feito isso, voc notar um novo item de menu ao lado de "Exibio" no seu Excel 2007. Clicando nele
voc ser levado as opes de desenvolvimento e uma delas o boto "Visual Basic".
Agora, se voc estiver utilizando o Excel 2010, clique na aba "Arquivo" e, em seguida, "Opes". Na
caixa de dilogo que ir abrir, marque o item "Desenvolvedor" na listagem direita. Desta forma, uma
nova aba ser adicionada ao Excel, na qual possvel acessar o ambiente de desenvolvimento do Visual
Basic.

No Excel 2010, o acesso ao ambiente de desenvolvimento ligeiramente diferente da verso 2007.


VBA no Excel: Noes Bsicas
Para programar em VBA no Excel, a primeira coisa a se fazer criar um mdulo. Este mdulo o local
onde seu cdigo fonte ficar armazenado. Para criar um mdulo clique no menu "Inserir" do IDE do VBA
e, em seguida, "Mdulo".
Aps fazer isso, voc ver que, no painel esquerdo do IDE, um novo item denominado "Modulo1" foi
criado. Voc poder renome-lo se desejar. Clique duas vezes sobre ele para que, no painel direito, o
mdulo seja aberto para edio.
A criao de funes dentro de mdulos uma maneira de organizar seu cdigo fonte, principalmente se
voc criar muitas funes. Por exemplo, voc pode criar um mdulo s para funes financeiras, outro
para funes estatsticas, etc. Cada mdulo pode armazenar vrias funes.

Ambiente de desenvolvimento do Visual Basic for Applications (VBA)

H tambm, os Mdulos de Classe. Tais mdulos so usados para implementao de tcnicas bsicas
de programao Orientada a Objetos. Mas isso um assunto para outra matria. Vamos nos ater a
programao padro.
No Excel, possvel escrever macros na forma de procedimentos (Sub) ou funes (Function).
A diferena bsica entre um e outro que os procedimentos no retornam valores e so mais indicados
para realizar tarefas automticas. J as funes podem retornar um valor e so mais indicados para
realizar tarefas onde seja necessrio obter um dado aps um processamento de dados, ou seja, para a
criao de frmulas personalizadas.
Alm disso, macros escritas na forma de procedimento no podem ser executadas automaticamente
dentro das clulas como uma frmula normal. Elas devem ser executadas a partir de uma ao do
usurio ou atravs do menu "Ferramentas / Macro / Macros...".
No entanto, um procedimento pode ser chamado de dentro de uma funo e vice-versa, como acontece
em qualquer outro ambiente de programao.

Procedimento VS. Funo
No exemplo seguir, criaremos um procedimento que escreve a frase "Isso um teste" na clula "A1" da
planilha ativa. Em seguida, voc poder comparar o cdigo fonte com o de uma funo que faz
exatamente a mesma coisa.
Dentro do mdulo, escreva:
Sub Teste1()
ActiveSheet.Range(A1).Value = "Isso um teste"
End Sub
No exemplo acima, criamos um procedimento denominado "Teste1". A palavra chave "ActiveSheet"
refere-se a um objeto do Excel, cuja propriedade Range (que identifica uma faixa ou intervalo de clulas)
tem seu valor (Value) alterado para "Isso um teste".
Para executar este procedimento, em verses do Excel anteriores a 2007, volte sua planilha do Excel
(no necessrio salvar o procedimento) e v ao menu "Ferramentas /Macro / Macros...". Para quem
tem o Excel 2007, basta ir ao menu "Desenvolvedor' e clicar no boto "Macros".
Ao executar o procedimento, a clula "A1" da planilha ativa receber o valor definido na macro.
Compare agora, com a verso "Funo" da macro. No mdulo, escreva:
Function Teste2()
Teste2 = "Isso um teste"
End Function
Agora, volte a sua planilha do Excel. Pressione [SHIFT]+F3 e, na caixa de rolagem de categoria de
funes, escolha "Definidas pelo usurio". Voc ver o nome de sua funo l.

Pressionando [SHIFT]+F3

Alternativamente, voc pode simplesmente digitar em qualquer clula:
=teste2()

No nosso exemplo de funo, escrevemos que o nome dela, "Teste2", igual "Isso um teste". Igualar
o nome da funo alguma coisa a forma como o Visual Basic tem de fazer com que a funo retorne
algo. Se voc fizer isso com uma Sub, um erro em tempo de execuo ser gerado, porque
procedimentos no podem retornar valor.
A princpio, o procedimento parece ser algo burocrtico e que a funo mais prtica. Mas isso no
verdade. Cada modo melhor para determinado tipo de programao, e isso voc perceber com o
tempo. O problema do nosso exemplo que quisemos demonstrar a diferena bsica entre uma Sub e
uma Function de uma forma muito simplria.
Como procedimentos no retornam valor, para que o resultado desejado pudesse ser escrito, tivemos
que recorrer a um determinado objeto do Excel e alterar seu valor. J a funo faz isso "por definio".
Para ter uma lista precisa de todos os objetos e suas respectivas propriedades, basta abrir o IDE do VBA
e ir para a ajuda, ou simplesmente pressionar F1 sobre uma palavra chave qualquer dentro do mdulo.
A no ser que voc queira criar um "verdadeiro aplicativo" dentro do Excel, acessar objetos no vai ser
algo muito corriqueiro e a palavra chave "Function" ser a que voc mais ir usar.

Aquecendo os motores
Agora que voc j sabe a diferena bsica entre um procedimento e uma funo, vamos entrar em
exemplos "mais funcionais".
Vamos criar uma funo que, dado um valor de entrada definido pelo usurio, calcule o fatorial de um
nmero inteiro qualquer.
Neste exemplo, alm de demonstrar como capturar um dado fornecido pelo usurio, demonstrar a
criao de variveis. Alternativamente, criaremos uma segunda verso da funo para demonstrar que
funes VBA podem ser escritas de maneira recursiva.
No mdulo digite:
' Obs: Linha de comentrio sempre inicia com uma aspa.
' Procure sempre documentar seu cdigo fonte
' Funo Fatorial, verso 1
Function Fatorial(numero As Integer)
Dim Resultado as Long
If numero <= 1 Then
Fatorial = 1
Else
Resultado = numero
Do
Resultado = Resultado * numero - 1
numero = numero - 1
Loop While numero >= 1
Fatorial = Resultado
End If
End Function
Entendendo o algoritmo do exemplo
Na matemtica, o fatorial de um nmero n (n pertence ao conjunto dos nmeros naturais) sempre
o produto de todos os seus antecessores, incluindo si prprio e excluindo o zero. O Fatorial muito
usado como base de algoritmos de encriptao e anlise combinatria.
No exemplo anterior, a funo Fatorial recebe atravs da varivel numero (sem acento, pois o VBA no
aceita nomes de variveis com acento) um nmero inteiro (integer em VB) dado pelo usurio.
Em seguida, criamos uma varivel denominada Resultado, que tem como funo acumular o resultado
das sucessivas multiplicaes necessrias para se obter o resultado final, uma espcie de acumulador.
Para fazer isso, usamos a palavra chave Dim (instruo que cria a varivel), seguida do nome da
varivel (Resultado) e das palavras chave As (que em ingls significa como) e Long (que indica um tipo
de dado inteiro longo).
Quando o nmero dado pelo usurio for menor ou igual 1, nossa funo retornar o resultado 1. Caso
contrrio, entrar no loop delimitado pelas palavras chave Do... Loop While (ou seja, Faa...Loop
Enquanto).
O resultado que foi acumulado na varivel resultado atribudo ao nome da funo, que retornar a
resposta ao usurio da planilha eletrnica.
Recursividade
O algoritmo que escrevemos anteriormente capaz de retornar com correo o Fatorial de um nmero
inteiro. Porm, h como melhor-lo para deix-lo menor e mais conciso. Para isso, apelaremos para a
recursividade. Veja:
Function Fatorial (numero as Integer)
If numero <= 1 Then
Fatorial = 1
Else
Fatorial = numero * Fatorial(numero - 1)
End If
End Function
Nesta nova verso da nossa funo Fatorial, no foi preciso criar uma varivel acumuladora, nem
mesmo criar um loop para efetuar as sucessivas multiplicaes.
Mas ento, como o computador "sabe" o resultado?
Bem... Nem sempre um algoritmo pode ser escrito dessa forma. Um objeto dito recursivo se ele
consistir parcialmente ou for definido em termos de si prprio. como dizer que a soluo do problema
est dentro do prprio problema.
No entanto, um algoritmo s poder ser escrito desta forma se houver uma condio de parada, seno
corre-se o risco de ele rodar indefinidamente. como colocar um espelho frente ao outro. Eles se
refletiro indefinidamente at o infinito.
No nosso exemplo, a condio de parada o nmero de entrada ser menor ou igual 1. Nesta condio,
a funo no chamar a si mesma para calcular o fatorial.
Algoritmos recursivos so possveis porque o computador armazena todas as chamadas funo em
uma pilha na memria. Se no houver uma condio de parada, haver um erro por estouro de pilha.
Fim de papo
Com os conhecimentos adquiridos aqui, voc ser capaz de criar uma srie de outras funes
matemticas simples para personalizar e otimizar sua planilha.
Se voc no tem conhecimento de Visual Basic, consulte a ajuda do VBA e procure principalmente pelos
termos:
"Tipos de dados"
"Palavras-chave"
At a prxima!


Fonte: http://www.superdownloads.com.br/materias/criando-funcoes-personalizadas-no-
excel.html#ixzz2wzGbKrWS

Potrebbero piacerti anche