Embora o Excel inclua inúmeras funções de folha de cálculo incorporadas, é provável que não tenha uma função para cada tipo de cálculo que efetuar. Os designers do Excel não conseguiram antecipar as necessidades de cálculo de todos os utilizadores. Em vez disso, o Excel permite-lhe criar funções personalizadas, que são explicadas neste artigo.
As funções personalizadas, como macros, utilizam a linguagem de programação Visual Basic for Applications (VBA). Diferem das macros de duas formas significativas. Em primeiro lugar, utilizam procedimentos de Função em vez de Sub procedimentos. Ou seja, começam com uma instrução function em vez de uma instrução Sub e terminam com a Função End em vez de End Sub. Em segundo lugar, executam cálculos em vez de efetuar ações. Determinados tipos de instruções, como instruções que selecionam e formatam intervalos, são excluídos das funções personalizadas. Neste artigo, irá aprender a criar e utilizar funções personalizadas. Para criar funções e macros, trabalha com o Visual Basic Revisor (VBE), que é aberto numa nova janela separada do Excel.
Suponha que a sua empresa oferece um desconto de quantidade de 10 por cento na venda de um produto, desde que a encomenda seja para mais de 100 unidades. Nos parágrafos seguintes, vamos demonstrar uma função para calcular este desconto.
O exemplo abaixo mostra um formulário de encomenda que lista cada item, quantidade, preço, desconto (se existir) e o preço alargado resultante.
Para criar uma função DISCOUNT personalizada neste livro, siga estes passos:
-
Prima Alt+F11 para abrir o visual basic Revisor (no Mac, prima FN+Alt+F11) e, em seguida, clique em Inserir > Módulo. É apresentada uma nova janela do módulo no lado direito do visual basic Revisor.
-
Copie e cole o seguinte código no novo módulo.
Function DISCOUNT(quantity, price) If quantity >=100 Then DISCOUNT = quantity * price * 0.1 Else DISCOUNT = 0 End If DISCOUNT = Application.Round(Discount, 2) End Function
Nota: Para tornar o seu código mais legível, pode utilizar a Tecla de Tabulação para avançar linhas. O avanço destina-se apenas ao seu benefício e é opcional, uma vez que o código será executado com ou sem o mesmo. Depois de escrever uma linha com avanço, o visual basic Revisor parte do princípio de que a sua próxima linha terá um avanço semelhante. Para sair (ou seja, para a esquerda) um caráter de tabulação, prima Shift+Tecla de Tabulação.
Agora, está pronto para utilizar a nova função DISCOUNT. Feche o visual basic Revisor, selecione a célula G7 e escreva o seguinte:
=DESCONTO(D7;E7)
O Excel calcula o desconto de 10% em 200 unidades a 47,50 $ por unidade e devolve 950,00 $.
Na primeira linha do código VBA, Função DESCONTO(quantidade, preço), indicou que a função DESCONTO requer dois argumentos, quantidade e preço. Quando chama a função numa célula de folha de cálculo, tem de incluir esses dois argumentos. Na fórmula =DESCONTO(D7;E7), D7 é o argumento quantidade e E7 é o argumento de preço . Agora, pode copiar a fórmula DISCOUNT para G8:G13 para obter os resultados apresentados abaixo.
Vamos considerar como o Excel interpreta este procedimento de função. Quando prime Enter, o Excel procura o nome DISCOUNT no livro atual e descobre que é uma função personalizada num módulo VBA. Os nomes dos argumentos entre parênteses, quantidade e preço são marcadores de posição para os valores nos quais se baseia o cálculo do desconto.
A instrução If no seguinte bloco de código examina o argumento quantidade e determina se o número de itens vendidos é maior ou igual a 100:
If quantity >= 100 Then
DISCOUNT = quantity * price * 0.1
Else
DISCOUNT = 0
End If
Se o número de itens vendidos for maior ou igual a 100, o VBA executa a seguinte instrução, que multiplica o valor da quantidade pelo valor do preço e, em seguida, multiplica o resultado por 0,1:
Discount = quantity * price * 0.1
O resultado é armazenado como a variável Desconto. Uma instrução VBA que armazena um valor numa variável é denominada instrução de atribuição , uma vez que avalia a expressão no lado direito do sinal de igual e atribui o resultado ao nome da variável à esquerda. Uma vez que a variável Discount tem o mesmo nome que o procedimento de função, o valor armazenado na variável é devolvido à fórmula da folha de cálculo que chamou a função DISCOUNT.
Se a quantidade for inferior a 100, o VBA executa a seguinte instrução:
Discount = 0
Por fim, a seguinte instrução arredonda o valor atribuído à variável Desconto para duas casas decimais:
Discount = Application.Round(Discount, 2)
O VBA não tem nenhuma função ROUND, mas o Excel tem. Por conseguinte, para utilizar ROUND nesta instrução, diga ao VBA para procurar o método Round (função) no objeto Aplicação (Excel). Pode fazê-lo ao adicionar a palavra Aplicação antes da palavra Arredondar. Utilize esta sintaxe sempre que precisar de aceder a uma função do Excel a partir de um módulo VBA.
Uma função personalizada tem de começar com uma instrução function e terminar com uma instrução End Function. Além do nome da função, a instrução Função geralmente especifica um ou mais argumentos. No entanto, pode criar uma função sem argumentos. O Excel inclui várias funções incorporadas (RAND e NOW, por exemplo) que não utilizam argumentos.
Seguindo a instrução Função, um procedimento de função inclui uma ou mais instruções VBA que tomam decisões e executam cálculos com os argumentos transmitidos à função. Por fim, algures no procedimento de função, tem de incluir uma instrução que atribua um valor a uma variável com o mesmo nome que a função. Este valor é devolvido à fórmula que chama a função .
O número de palavras-chave VBA que pode utilizar em funções personalizadas é menor do que o número que pode utilizar em macros. As funções personalizadas não podem fazer nada além de devolver um valor a uma fórmula numa folha de cálculo ou a uma expressão utilizada noutra macro ou função VBA. Por exemplo, as funções personalizadas não podem redimensionar janelas, editar uma fórmula numa célula ou alterar as opções de tipo de letra, cor ou padrão do texto numa célula. Se incluir código de "ação" deste tipo num procedimento de função, a função devolve o #VALUE! .
A única ação que um procedimento de função pode fazer (para além de efetuar cálculos) é apresentar uma caixa de diálogo. Pode utilizar uma instrução InputBox numa função personalizada como forma de obter entradas do utilizador que executa a função. Pode utilizar uma instrução MsgBox como forma de transmitir informações ao utilizador. Também pode utilizar caixas de diálogo personalizadas ou Formulários de Utilizador, mas este é um assunto para além do âmbito desta introdução.
Até as macros simples e as funções personalizadas podem ser difíceis de ler. Pode torná-los mais fáceis de compreender ao escrever texto explicativo sob a forma de comentários. Pode adicionar comentários antes do texto explicativo com um apóstrofo. Por exemplo, o exemplo seguinte mostra a função DISCOUNT com comentários. Adicionar comentários como estes torna mais fácil para si ou para outras pessoas manter o seu código VBA à medida que o tempo passa. Se precisar de fazer uma alteração ao código no futuro, terá mais facilidade em compreender o que fez originalmente.
Um apóstrofo diz ao Excel para ignorar tudo à direita na mesma linha, para que possa criar comentários em linhas próprias ou no lado direito das linhas que contêm código VBA. Pode começar um bloco de código relativamente longo com um comentário que explica a sua finalidade geral e, em seguida, utilizar comentários inline para documentar declarações individuais.
Outra forma de documentar as macros e as funções personalizadas é dar-lhes nomes descritivos. Por exemplo, em vez de atribuir um nome a uma macro Etiquetas, pode atribuir-lhe o nome MonthLabels para descrever mais especificamente o objetivo que a macro serve. A utilização de nomes descritivos para macros e funções personalizadas é especialmente útil quando cria muitos procedimentos, especialmente se criar procedimentos que tenham finalidades semelhantes, mas não idênticas.
A forma como documenta as macros e as funções personalizadas é uma questão de preferência pessoal. O importante é adotar algum método de documentação e utilizá-lo de forma consistente.
Para utilizar uma função personalizada, o livro que contém o módulo no qual criou a função tem de estar aberto. Se esse livro não estiver aberto, obtém uma #NAME? quando tenta utilizar a função . Se referenciar a função num livro diferente, tem de preceder o nome da função com o nome do livro no qual a função reside. Por exemplo, se criar uma função denominada DESCONTO num livro denominado Pessoal.xlsb e chamar essa função a partir de outro livro, tem de escrever =personal.xlsb!discount(), e não simplesmente =desconto().
Pode guardar algumas combinações de teclas (e possíveis erros de escrita) ao selecionar as suas funções personalizadas na caixa de diálogo Inserir Função. As suas funções personalizadas são apresentadas na categoria Definido pelo Utilizador:
Uma forma mais fácil de disponibilizar sempre as suas funções personalizadas é armazená-las num livro separado e, em seguida, guardar esse livro como um suplemento. Em seguida, pode disponibilizar o suplemento sempre que executar o Excel. Eis como fazê-lo:
-
Depois de criar as funções de que precisa, clique em Ficheiro > Guardar Como.
-
Na caixa de diálogo Guardar Como , abra a lista pendente Guardar Como Tipo e selecione Suplemento do Excel. Guarde o livro com um nome reconhecível, como MyFunctions, na pasta AddIns . A caixa de diálogo Guardar Como irá propor essa pasta, pelo que tudo o que precisa de fazer é aceitar a localização predefinida.
-
Depois de guardar o livro, clique em Ficheiro > Opções do Excel.
-
Na caixa de diálogo Opções do Excel , clique na categoria Suplementos .
-
Na lista pendente Gerir , selecione Suplementos do Excel. Em seguida, clique no botão Ir .
-
Na caixa de diálogo Suplementos , selecione a caixa de verificação junto ao nome que utilizou para guardar o livro, conforme mostrado abaixo.
-
Depois de criar as funções de que precisa, clique em Ficheiro > Guardar Como.
-
Na caixa de diálogo Guardar Como , abra a lista pendente Guardar Como Tipo e selecione Suplemento do Excel. Guarde o livro com um nome reconhecível, como MyFunctions.
-
Depois de guardar o livro, clique em Ferramentas > Suplementos do Excel.
-
Na caixa de diálogo Suplementos , selecione o botão Procurar para localizar o seu suplemento, clique em Abrir e, em seguida, selecione a caixa junto ao seu Add-In na caixa Suplementos Disponíveis .
Depois de seguir estes passos, as suas funções personalizadas estarão disponíveis sempre que executar o Excel. Se quiser adicionar à biblioteca de funções, regresse ao visual basic Revisor. Se observar o Explorador de Projetos do Visual Basic Revisor num cabeçalho VBAProject, verá um módulo com o nome do seu ficheiro de suplemento. O seu suplemento terá a extensão .xlam.
Fazer duplo clique nesse módulo no Explorador de Projetos faz com que o Visual Basic Revisor apresente o código da função. Para adicionar uma nova função, posicione o ponto de inserção após a instrução End Function que termina a última função na janela Código e comece a escrever. Pode criar quantas funções precisar desta forma e estas estarão sempre disponíveis na categoria Definida pelo Utilizador na caixa de diálogo Inserir Função .
Este conteúdo foi originalmente criado por Mark Dodge e Craig Stinson como parte do livro Microsoft Office Excel 2007 Inside Out. Desde então, foi atualizado para se aplicar também a versões mais recentes do Excel.
Precisa de mais ajuda?
Pode sempre colocar uma pergunta a um especialista da Comunidade Tecnológica do Excel ou obter suporte nas Comunidades.