quinta-feira, 10 de setembro de 2009

Criando funções no Excel com o Visual Basic for Aplications

Além das funções que acompanham o software Excel, nós podemos desenvolver e acrescentar mais funções utilizando o Editor do Visual Basic for Aplications. Uma função é uma seqüência de comandos armazenada em um módulo do VBA. Uma função programada no Editor do VBA pode ser usada diretamente em uma célula, bastando por exemplo digitar =NomeDaFunção(), semelhante a qualquer outra função existente no Excel.

Este artigo descreve os procedimentos para o Excel versão 2003, para as outras versões pode haver alguma diferença.

Para criar uma funcão entre no Editor do VBA em Ferramentas -> Macro -> Editor do Visual Basic. Insira um módulo pelo menu Inserir -> Módulo e insira uma função dentro desse módulo pelo menu Inserir -> Procedimento. Escolha um nome, selecione o tipo Função e o escopo Público, clique OK. Na janela do módulo digite todo o código da sua função dentro do espaço em branco entre o nome da função e seu delimitador final. Salve as mudanças para este módulo e, de volta ao Excel, digite a chamada à função na célula desejada.

Para retornar à edição do código da função, volte no Editor do Visual Basic e na janela "Project Explorer" (menu Exibir) expanda VBAProject e Módulos, clique com o botão direito sobre um módulo e clique "Exibir código" (ou duplo clique sobre o módulo). Faça as alterações que desejar e salve. Para cada vez que o código de uma função for alterado, será necessário executar novamente a função dentro da célula.

Não é possível neste artigo ensinar toda a linguagem VBA, mas é possível apresentar um resumo contendo os principais comandos da linguagem. Assim pelo menos alguma coisa já vai ser possível fazer. Como em diversas linguagens de programação, no VBA existem palavras reservadas que são os comandos da linguagem. Estas palavras devem ser digitadas respeitando as letras maiúsculas e minúsculas e não podem ser usadas como por exemplo para nomes de variáveis.

Um procedimento é um conjunto de instruções, ao qual é atribuído um nome e sua execução feita individualmente num módulo. Existem dois tipos de procedimentos: Sub e Function. A diferença entre estes dois tipos reside no fato de Function poder devolver um valor, o que não acontece com Sub. Este artigo está demonstrando o desenvolvimento e o uso de funções então segue apenas a estrutura de uma Function:

Function nome(arg1,arg2,...) As tipo
Comando 1
Comando 2
...
nome = valor
End Function


Uma função pode receber valores para sua execução, valores vindos de outras células por exemplo, e estes valores entram como argumentos para o nome da função. No invocamento da função na célula usa-se a mesma sintaxe separando os argumentos com ponto-e-vírgula. E para que uma função possa devolver um determinado valor é necessário que uma de suas instruções faça a atribuição ao seu nome.

Todos os valores, numéricos ou não, são armazenados em variáveis. Antes de utilizar uma variável no código é necessário declará-la primeiro, seguindo o modelo:

Dim nome As tipo
Dim nome(1 To n) As tipo


Os tipos podem ser:

Boolean         True ou False
Byte inteiro de 0 até 255
Integer inteiro de -32.768 até 32.767
Long inteiro de -2.147.483.648 até 2.147.483.647
Single ponto flutuante de -3,4E38 e -1,4E-45 até 3,4E38 e 1,4E-45
Double ponto flutuante de -1,798E308 e -4,94E-324 até 1,798E308 e 4,94E-324
Currency ponto flutuante de -923.337.203.685.447,5808 até 922.337.203.685.447,5807
Date 01/01/100 até 31/12/9999 e horas de 0:00:00 até 23:59:59
String até 2 bilhões de caracteres
Error número de erro
Variant suporta todos os tipos


Observação: Uma variável declarada sem tipo, é do tipo Variant e pode conter qualquer valor.

Exemplos de declarações de variáveis:

Dim nome As String
Dim nota1,nota2 As Integer
Dim vetor(1 To 4) As Double
Dim matriz(1 To 5, 1 To 6) As Integer


Para uma variável receber um valor utiliza-se o operador de atribuição. Um operador de atribuição é o que atribui um valor à uma variável e é representado pelo sinal de igual "=". a = b significa a toma o valor de b, exemplos:

x = y
x = a + b
vetor(2) = 7
matriz(1,3) = x*y


Os operadores aritméticos fazem as operações aritméticas entre variáveis e ou valores, eles são:

Adição                 +
Subtração -
Multiplicação *
Divisão /
Inteiro da Divisão \
Potência ^
Resto da Divisão Mod

Exemplos: x/y a^2 a Mod b


No caso de Strings, que são conjunto de caracteres, existe o operador de concatenação & ou +. Então "bom" & "dia" ou "bom" + "dia" retorna "bomdia".

Também é possível comparar os conteúdos das variáveis utilizando os operadores de comparação, os quais retornam como resposta verdadeiro ou falso:

Igualdade               =
Diferença <>
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=

Exemplos: a = b x >= 6


E diversas comparações podem ser agrupadas por operadores lógicos:

E               And
Ou Or
Ou Exclusivo Xor
Não Not

Exemplos: a = b And a > c x >= 3 Or y <> 7


Existem algumas estruturas de comandos que são para seleção e para repetição de partes do código. Uma estrutura de seleção atende a um retorno de um operador lógico e executa o código referente à resposta. Uma estrutura de repetição pode executar novamente o código, quantas vezes a condição for verdadeira.

Estruturas de Seleção:

If x>y Then            If x>y Or a<>b Then            If (x>y Or a=b) And i>=j Then
Comando 1 Comando 1 Comando 1
Comando 2 Comando 2 Comando 2
... ... ...
End If Else ElseIf x=y Then
Comando 1 Comando 1
Comando 2 Comando 2
... ...
End If Else
Comando 1
Comando 2
...
End If


Select Case x Select Case x
Case 2 Case Is < 2
Comando 1 Comando 1
Comando 2 Comando 2
... ...
Case 4 Case Is = 1, 3 To 5
Comando 1 Comando 1
Comando 2 Comando 2
... ...
Case 6 Case 6 To 8, 10
Comando 1 Comando 1
Comando 2 Comando 2
... ...
Case Else Case Else
Comando 1 Comando 1
Comando 2 Comando 2
... ...
End Select End Select



Estruturas de Repetição:

For i=1 To 10            For i=1 To 10 Step 2            For Each valor In matriz
Comando 1 Comando 1 Comando 1
Comando 2 Comando 2 Comando 2
... ... ...
Next Next Next


Do While x<=y Do Do
Comando 1 Comando 1 If x>y Then
Comando 2 Comando 2 Comandos
... ... Else
Loop Loop While x<=y Exit Do
Loop

Do Until x=y Do
Comando 1 Comando 1
Comando 2 Comando 2
... ...
Loop Loop Until x=y


Exemplo de código de uma função:

Public Function PRIMO(escolhido As Integer) As Long

Dim pos As Integer
Dim num, divisor, nprimo As Long

num = 2
pos = 0

If escolhido < 1 Then
PRIMO = 0
Else
Do While pos < escolhido
divisor = 2
Do While divisor <= num
If divisor = num Then
nprimo = num
pos = pos + 1
Exit Do
ElseIf num Mod divisor = 0 Then
Exit Do
Else
divisor = divisor + 1
End If
Loop
num = num + 1
Loop
PRIMO = nprimo
End If

End Function


A função demonstrada neste exemplo pode ser invocada em uma célula da planilha com o comando =PRIMO(B3), por exemplo. A função receberá o valor contido na célula B3 e a célula que invoca esta função receberá o valor de retorno da função.

O Visual Basic for Aplications proporciona aos usuários uma rica ferramenta para adaptar o Excel às suas necessidades. Assim o usuário não fica limitado aos recursos de fábrica do Excel. Experimente criar algumas funções e se houver interesse aprenda à fundo a linguagem VBA.

Nenhum comentário:

Postar um comentário