Você está na página 1de 7

xek.

me
Dicas, informaes, anlises e curiosidades sobre Informtica

Funo Definida pelo Usurio


(UDF) no Excel 2010
Posted on 12/05/2013 by Victor SantAnna
Tw eet

Curtir

Em nossa ltima postagem, onde falarmos sobre Anlise Combinatria (Anlise


Combinatria no Excel 2010: Combinao, Arranjo ou Permutao) mencionamos sobre
criao de Funo Definida pelo Usurio. Conforme prometemos, mostraremos como criar
uma funo personalizada para calcular a combinao com repetio no final desta
postagem.
Existem muitas funes prontas no EXCEL, mas nem todas as frmulas do mundo esto
implementadas na forma de funo. Entretanto, possvel criar nossas prprias funes,
uma funo definida pelo usurio (UDF User Defined Functions ou Custom Excel
Functions). Este tpico descrito pela Microsoft como
Escrevendo um procedimento Function
Se houver um clculo complexo a ser reutilizado com freqncia no Microsoft Excel, voc
pode criar sua prpria funo de planilha para executar o clculo.
Para criar suas prprias funes personalizadas, utilize o Microsoft Visual Basic for
Applications (VBA). O VBA uma linguagem de programao interna do Excel que est
acessvel pelo atalho ALT+F11.
Vamos comear com uma frmula simples de ser implementada como funo
Funo Definida pelo Usurio
Problema: um termmetro americano marca 68 graus Fahrenheit. Ser que est quente ou
frio?
A fim de manter o exemplo simples, escolhemos implementar uma funo calcula o

nmero de graus Celsius a partir dos graus Fahrenheit. Quando a funo for chamada a
partir de uma clula do EXCEL, o resultado do clculo retornado e mostrado na clula.
Antes de comear, crie a seguinte planilha colocando os valores numricos nas clulas
A2, A3 e A4:

O procedimento a seguir ensina, em apenas 5 passos, como criar e usar uma funo
definida pelo usurio:
I) O atalho ALT+F11 abre a janela do VBA (Microsoft Visual Basic For Applications)
II) Procure pela guia Inserir e selecione a opo Mdulo:

III) Na janela que abriu, digite o cdigo de sua funo. Por exemplo, uma funo para
calcular graus Celsius a partir dos graus Fahrenheit:

Function Celsius(grausF)
Celsius = (grausF - 32) * 5 / 9
End Function

Digite a funo acima na janela Mdulo 1 aberta:

IV) No menu Arquivo do VBA, clique em Fechar e voltar para Microsoft Excel (ou use
o atalho Alt+Q) e Volte para a planilha Excel .
V) Teste sua funo. Digite na planilha a funo que voc acabou de implementar (no
esquea de comear com o sinal de igualdade) colocando entre parnteses o argumento
desejado (neste caso um nmero ou uma clula que contm um nmero). Neste exemplo
voc deve digitar =CELSIUS(A2) na clula B2 (ou outra clula qualquer) do Excel.
Observe que o Excel reconhece a existncia da funo CELSIUS medida que est
sendo digitada:

Na planilha, se os valores numricos estiverem nas clulas A2, A3 e A4, use sua funo
para frmulas do mesmo modo que usaria qualquer funo de planilha. Por exemplo, a
funo Celsius pode ser usada na planilha assim:

Importante: Uma funo criada dessa maneira somente se encontra disponvel para uso
na pasta de trabalho onde tiver sido criada e, se quiser ser usada posteriormente,
precisar ser salva como Pasta de Trabalho Habilitada Para Macro Do Excel.
Dica: se quiser usar essa funo em outro local, voc pode copiar o cdigo da funo para
mdulos do VBA situados em outras pastas de trabalho.
Detalhes da funo definida pelo usurio Celsius
Eis, novamente, a listagem de nossa funo, vamos examin-la em detalhes:

Function Celsius(grausF)

Celsius = (grausF - 32) * 5 / 9


End Function

O nome da funo que ser usada pelo usurio, Celsius no exemplo acima, deve receber
dentro do corpo da funo o resultado do clculo realizado com o argumento grausF, que,
neste caso foi subtrado de 32 e depois multiplicado por cinco nonos (5/9). As quatro
operaes bsicas (soma, subtrao, multiplicao e diviso) mais a potncia utilizam os
mesmos operadores que usamos dentro de uma planilha Excel: +, -, *, / e ^.
Outros operadores bem como algumas funes esto disponveis, mas usam uma forma
diferente dos operadores e funes que usamos dentro de uma planilha. Outros
operadores disponveis dentro do VBA: \ (diviso inteira), Mod (para obter o resto da
diviso inteira), & (para concatenar texto). Existem ainda vrias funes , mas isso fcil
de achar na Internet e foge do escopo da nossa postagem.
O exemplo de FUNO DEFINIDA PELO USURIO (UDF) usado nesta postagem foi
bastante simplificado, apenas para demonstrar o funcionamento bsico de uma funo
definida pelo usurio. Para criar funes complexas no VBA, preciso conhecer um
pouco o modelo de objetos do VBA para Excel, a estrutura da linguagem do Visual Basic
(VB) e o ambiente VBA.
Exemplo de outra Funo Definida pelo Usurio

1) Como calcular atravs de uma UDF o processo inverso, transformao de Celsius para
Fahrenheit?
Neste caso, siga os mesmos passos anteriores, mas a funo digitada em mdulo 1
ficar assim (pode ser digitada abaixo da funo anterior, se no quiser apagar a outra
funo j digitada):

Function Fahrenheit(grausC) ' de graus C para graus F


Fahrenheit = grausC * 9 / 5 + 32
End Function

Para usar a funo acima dentro de uma planilha, escreva =FAHRENHEIT(100) dentro de
uma clula no Excel para saber, por exemplo, a temperatura em que a gua ferve (100C)
em um termmetro com a escala Fahrenheit. Dever surgir o nmero 212.
2) Eis aqui um outro exemplo de funo definida pelo usurio para calcular centmetros a
partir de valores em polegadas:

Function cm(pol) ' transformar polegadas em centmetros

cm = pol * 2.54

End Function

A funo acima, quando digitada em Mdulo 1 (conforme fizemos com a funo anterior),
permite calcular na planilha a converso de polegadas para centmetros, bastando para
isso digitar =CM(A2) na planilha Excel, caso o nmero em polegadas esteja na clula A2,
por exemplo.
3) A funo que faz o contrrio, transforma centmetros em polegadas est aqui:

Function pol(cm) ' transformar centmetros em polegadas


pol = cm / 2.54
End Function

Para usar, basta digitar, por exemplo, =POL(12) na planilha Excel e saberemos quanto
mede, em polegadas, a medida 12 centmetros. Deve dar 4,724409 polegadas.
Como criar uma funo para calcular a combinao com repetio

Seguindo os passos acima, mostrados aqui de forma resumida:


I) Tecle o atalho ALT+F11 para abrir a janela do VBA
II) V na guia Inserir e selecione a opo Mdulo
III) Digite o seguinte cdigo:

Function CombinRep(ByVal n As Long, ByVal p As Long) As Double


If (n > 0 And p > 0) Then
CombinRep = factorial(n + p - 1) / (factorial(p) * factorial(n - 1))
Else
CombinRep = Error()
End If
End Function
Function factorial(ByVal n As Long) As Double
factorial = 1
Dim a As Double
For a = 1 To n
factorial = factorial * a
Next a
End Function

IV) Tecle o atalho ALT+Q para sair do VBA e voltar planilha


V) Teste a funo entrando com algum valor, como por exemplo, digitando na planilha
Excel, =CombiRep(4,2) em alguma clula qualquer. Se tudo estiver funcionando como
deveria, deve aparecer programagicamente o nmero 10, conforme previsto em nossa
ltima postagem (http://xek.me/?p=1099).
Acabamos de criar, conforme prometido, uma funo para clculo de Combinao com
Repetio.
Em nossa prxima postagem veremos como fazer funes que permitam usar intervalos

como argumentos ou entrar com nmero varivel de argumentos, exatamente como faz a
funo SOMA do Excel e assim poderemos implementar a PERMUTAO com
ELEMENTOS REPETIDOS.

SHARE THIS:

Facebook

Twitter

LinkedIn

Google

Email

This entry was posted in Dicas Excel and tagged como fazer, excel 2010, funo, udf
by Victor SantAnna. Bookmark the permalink [http://xek.me/?p=1100] .

About Victor SantAnna


Professor de Informtica e blogueiro, adoro esclarecer as dvidas - quando
posso - de alunos, ex-alunos e pblico em geral.
View all posts by Victor SantAnna

ONE THOUGHT ON FUNO DEFINIDA PELO USURIO (UDF) NO EXCEL 2010

Frantchesco Andrade
on 30/06/2014 at 23:36 said:

Fala doutor, tima publicao.


Nunca mexi no UDFs, porm gostaria de ver se voc consegue me ajudar.
Problema: Quero buscar um valor X da coluna A PROCV, porm com uma
condio SE na coluna B for = Lista de pea. E me traz o valor da coluna D.
Contudo o PROCV procura na tabela o primeiro valor X da coluna A deixando de
buscar os seguintes. J fiz SOMARPRODUTO com as matrizes para encontrar as
linhas que tenho o valor X descontei os zeros ordenei MENOR fiz NDICE para
retornar o valor, ou seja, ficou uma equao muito grande e est dando erro.
Conseguimos fazer no UDFs ou at VBA?
Abrao.

Você também pode gostar