Crie sua própria função no Excel
Todos sabemos que o Excel possui um leque imenso de possibilidades e funções, se você não sabia disso provavelmente é iniciante e portanto te sugiro que clique aqui para ver o artigo básico sobre Excel.
Mas mesmo assim, com tantas funções existentes de vez em quando sentimos falta de alguma coisinha muito específica e não sabemos como resolver.
Neste artigo você vai aprender a criar suas próprias funções no Excel, do jeito que você quiser para fazer o que você quiser (inclusive sacanear algum desavisado).
Função definida pelo usuário (UDF)
As funções definidas pelos usuários, do inglês User Defined Functions (UDF), funcionam como um função qualquer do Excel. Da mesma forma que utiliza a função SOMA, por exemplo, você utilizará a função que criar.
Estas funções são criadas como macros, se você já tem alguma familiaridade com as macro certamente ficará mais fácil de entender tudo. Se você não tem mas ainda assim quer fazer sua própria função não tem problema, não é tão difícil assim e também eu darei todas as explicações passo a passo.
Como falei sobre a função SOMA do Excel vamos primeiro criar uma função que faz exatamente a mesma coisa que ela, só pra testar e ver como funciona o negócio.
Função SOMAUSUARIO
Aperte ALT + F11 para abrir a janela do VBA. No menu a esquerda aperte com o botão direito e vá em Inserir > Módulo. Conforme imagem abaixo.
Automaticamente o Excel irá selecionar o Módulo recém criado (Módulo1) e na parte direita da tela estará uma tela toda em branco. É nele que iremos escrever nossa função.
O código da função que desejo criar é:
Function SOMAUSUARIO(Números As Range) Dim Cell As Range For Each Cell In Números SOMAUSUARIO = SOMAUSUARIO + Cell.Value Next Cell End Function
Se quer saber por que minha tela de código é preta e não branca, clique aqui.
Vamos entender linha a linha.
- Function SOMAUSUARIO(Números As Range)
Escrevemos a palavra Function para que o Excel saiba que estamos criando uma função e não uma macro normal.
Em seguida o nome da função que desejamos criar, neste caso o nome é SOMAUSUARIO.
Logo após o nome escolhido abrimos um parêntese para colocar os argumentos da função. Neste caso só temos um argumento que chamei de Números e indiquei ao Excel que ele é uma variável de intervalo ao escrever As Range.
- Dim Cell As Range
Aqui declaramos um variável que dei o nome de Cell e que é do tipo intervalo. Escrevemos Dim no início para informar que é a declaração de uma variável que só existirá dentro deste código que estamos criando.
Esta variável será utilizada dentro do cálculo da função.
- For Each Cell In Números
Aqui dizemos ao Excel executar um código para cada Cell no intervalo Números. Se você sabe inglês consegue claramente ler este código que ao traduzir para português fica:
Para (For) cada (each) Cell em (in) Números
- SOMAUSUARIO = SOMAUSUARIO + Cell.Value
Aqui dizemos que o valor da nossa função SOMAUSUARIO será igual ao seu próprio valor atual + o valor da Cell atual.
Imagine que ao utilizar a nossa função escrevemos =SOMAUSUARIO(A1:A10). Este trecho do código fará o seguinte:
Para cada célula do intervalo A1:A10 iremos soma-lo ao número que já possuímos. Então, se A1 for igual a 10 e A2 = 5, acontecerá assim:
Como A1 é a primeira célula do intervalo então SOMAUSUARIO por enquanto é igual a zero.
Ao chegar nessa parte do código teremos,
SOMAUSUARIO = SOMAUSUARIO + Cell.Value
Ou seja:
SOMAUSUARIO = 0 + 10
Logo SOMAUSUARIO será igual a 10
Então quando chegarmos em na segunda célula do intervalo, A2, teremos,
SOMAUSUARIO = SOMAUSUARIO + Cell.Value
Ou seja:
SOMAUSUARIO = 10 + 5
Logo SOMAUSUARIO será igual a 15
E assim sucessivamente até acabarem todas as células do intervalo.
- Next Cell
Este código funciona para encerrar o For Each Cell in Números que abrimos mais acima, e também indica que deve ser rodado o código do For Each para a célula seguinte do intervalo (Next Cell).
- End Function
Esta linha encerra a Função que criamos.
Veja como fica no Excel quando utilizamos a função SOMA e a função recém criada SOMAUSUARIO.
A ideia básica de como criar uma função você já deve ter entendido. Mas saiba que para sua função funcionará somente no arquivo em que você a criou, sendo necessário cria-la em outros arquivos que queira utilizar.
Além disso, você criou uma macro e agora ao salvar seu arquivo terá de alterar o tipo de arquivo para Pasta de Trabalho Habilitada para Macro do Excel. Na prática você não notará diferença alguma com o formato padrão do Excel, a diferença é que agora você poderá utilizar macros.
Veja dois outros exemplo de UDF.
Função TAXACUM
Por algum tempo procurei por uma função que pudesse acumular taxas de juros compostas e informar qual seria a taxa média do período, porém não sabia qual das funções do Excel fazia isso, e portanto tive de criar minha própria.
O que ela faz é a seguinte conta matemática:
(1 + Taxa1) * (1 + Taxa2) * (1 + Taxa3) * (1+Taxa4) [….] * (1 + TaxaN) -1
Acho que já dá pra ver o quão chato é escrever isso para um intervalo muito grande de células.
O código da minha função está abaixo.
Function TAXACUM(Taxas As Range) Dim Cell As Range TAXACUM = 1 For Each Cell In Taxas TAXACUM = TAXACUM * (1 + Cell.Value) Next Cell TAXACUM = TAXACUM - 1 End Function
Ela funciona de forma semelhante a função SOMAUSUARIO que criamos acima.
As partes diferentes são que:
- Antes de entrar no For Each eu digo que o valor de TAXACUM é igual a 1. Faço isso pois dentro do código preciso multiplicar os números e caso o primeiro TAXACUM for igual a zero, daria tudo errado.
- Dentro do For Each utilizo uma conta de multiplicação.
- Depois de todas as multiplicação preciso fazer o valor encontrado -1. Como isso só pode ser feito após todas as multiplicações, então devo fazer fora do For Each.
Veja o resultado com a função TAXACUM e o trabalho que dá fazer sem ela.
Hoje sei que a função VFPLANO do Excel, consegue resolver meu problema, mas ainda assim prefiro usar a minha TAXACUM.
Função PARPERFEITO
Essa é só pra sacanear, e conseguir alguns pontinhos com a namorada.
Esta função analisa dois nomes e indica se formam o par perfeito ou não, tipo aqueles de celular.
A função é:
Function PARPERFEITO(Ele As String, Ela As String) If Ele = "Rodrigo" And Ela = "Daniela" Then PARPERFEITO = Ele & " e " & Ela & " são o casal perfeito" ElseIf Ele <> "Rodrigo" And Ela = "Daniela" Then PARPERFEITO = Ele & "??? Nunca que " & Ele & " e " & Ela & " dariam certo" ElseIf Ele = "Rodrigo" And Ela <> "Daniela" Then PARPERFEITO = Ela & "??? Nunca que " & Ele & " e " & Ela & " dariam certo" ElseIf Ele <> "Rodrigo" And Ela <> "Daniela" Then PARPERFEITO = Ele & " e " & Ela & "??? Não faço ideia de quem são" End If End Function
Esta é bem diferente das outras duas que mostrei.
A função PARPERFEITO utiliza dois argumentos, Ele e Ela sendo os dois declarados como texto (string).
A função faz alguns testes verificando qual o texto escrito em cada um de seus argumentos e exibindo um resultado diferente para cada combinação possível.
No primeiro teste:
If Ele = “Rodrigo” And Ela = “Daniela” Then
Traduzindo…
Se Ele = “Rodrigo” e Ela = “Daniela” Então
Ou seja, testa se o que está escrito em Ele é igual a Rodrigo e Ela é igual a Daniela, se for, então roda a segunda linha.
PARPERFEITO = Ele & ” e ” & Ela & ” são o casal perfeito”
Os & servem para juntar os argumentos Ele e Ela ao restante do texto que aparece sempre entre aspas. Este trecho seria exibido assim:
Rodrigo e Daniela são o casal perfeito.
As demais linhas fazem outros testes caso o anterior não seja verdadeiro (ElseIF) e retornam uma frase diferente. Até chegar na linha que encerra os testes (End IF).
Ótimo pra brincar com a namorada.
Veja o resultado.
Observações
Você vai notar que diferente das demais funções normais do Excel, aquelas criadas pelo usuário não trazem o texto de ajuda que sempre aparece para cada um dos argumentos de uma função enquanto a escrevemos.
Porém existe um jeito que pode ajudar, se o nome dos argumentos de sua função forem auto explicativos. Logo depois de abrir o parênteses quando estiver escrevendo sua função aperte CTRL + SHIFT + A e serão exibidos os nomes dos argumentos, confira na imagem.
Olá,
Obrigado pelo conteúdo disponibilizado.
Minha dúvida é se é possível documentar um “help” para as funções criadas pelo usuário, e como fazer isso.