Você sabia que podemos usar o VBA para fazer aquela função que não está disponível do Excel? É sobre isso que falaremos (ou escreveremos) no artigo de hoje.
Neste exemplo, queremos criar a função “PRIMO” que nos informará se um número é primo ou não. Por mais que a sua aplicabilidade direta seja possivelmente pequena, o importante do artigo é também ver os principais conceitos para criar uma função em Excel usando VBA.
Antes do início, precisamos voltar ao ensino básico para lembrar o conceito de número primo.

O que é um número primo?
Número primo é aquele número positivo que é divisível apenas por um e por ele mesmo (apenas isso, nenhum outro mais). Como exemplo:
- 5 é primo, pois é apenas divisível por 1 e por 5 (ele mesmo)
- 8 não é primo, pois é divisível por 1, 2, 4 e por 8 (ele mesmo)
- 17 é primo, pois é apenas divisível por 1 e por 17 (ele mesmo)
- 100 não é primo, pois é divisível por 1, 2, 4, 5, 10, 20, 25, 50 e por 100 (ele mesmo)
- 1 não é primo, pois é apenas divisível por 1 (fica faltando o conceito 1 “e” ele mesmo)
Simples, não?
Antes de pôr a mão na massa, vamos afiar o machado
Para resolver o problema dos números primos (antes de iniciarmos a programação), é válido pensarmos no modelo de resto de divisão.
Quando um número A é divisível por um número B, significa que o resto da divisão de A por B é zero. Assim sendo, 10 é divisível por 5 (resto 0), enquanto 12 não é divisível por 5 (resto 2).
Ou seja, se conseguirmos transformar o problema do número primo em um problema de “procurar resto de divisões”, estaremos em um bom caminho.
A figura 1 ilustra algo neste sentido: estamos analisando o resto dos números 16 e 17 (nas linhas) em relação aos números de 1 a 17 (nas colunas).

Algo interessante ocorre: o número 16 traz resto 0 para os números pelos quais ele é divisível: 1, 2, 4, 8 e 16. Idem para o 17, mas com menor quantidade de números, apenas 1 e 17. Isso é lógico, pois ele é um número primo.
Dessa forma, para verificarmos se um número é primo, devemos analisar o resto da divisão deste número por cada número entre 1 e ele. Caso a quantidade de números divisíveis seja 2 (no caso, apenas 1 e ele mesmo), o número é primo. Por sinal, o número divisível é encontrado quando obtemos um resto de divisão igual a 0.
Programando a nossa função PRIMO
Montado o racional, hora de pôr a mão na massa!
Para isso, uma vez aberto o Excel, abra o Microsoft Visual Basic for Applications (famigerado VBA) apertando Alt + F11. Crie um novo módulo, clicando em Inserir > Módulo. Um texto para escrita se abrirá, conforme figura 2.

Dentro do VBA, temos a opção de criar uma Sub (geralmente uma sequência de procedimentos, bem voltada à automatização) ou uma Function (que fará uma série de cálculos e nos retornará um valor no fim). Neste caso, vamos incluir uma Function, já que é isso que queremos.
O nome da nossa Function será PRIMO. É esse nome que usaremos quando quisermos “chamar” a fórmula dentro do Excel, do mesmo jeito que chamamos PROCV e SOMASES, por exemplo.
Além disso, no caso da Function, nós precisamos incluir as variáveis de entrada, que são os valores que usaremos nos cálculos. No caso da função PRIMO, precisamos de apenas uma variável de entrada, que é o número que queremos saber se é primo ou não. Chamaremos essa variável de num.
Dessa forma, temos a nossa primeira linha de código, que deve ser escrita na janela aberta do VBA. A linha é:
Function PRIMO(num)
A figura 3 exemplifica o procedimento.

Caso você tenha feito esse procedimento manualmente no seu VBA, você notará que, após dar ENTER na linha de Function, automaticamente uma linha de End Function aparece no fim do código. Isso é primordial, porque toda vez que um comando é aberto ele deve ser fechado (em muitos casos, representado pelo End). Mas não se acostume, apenas esse é feito de modo “automático”, sem necessidade do usuário fazê-lo.
Além disso, caso você tenha mais de uma variável, deve separá-las por “,”. Ou seja, se além da variável num tivéssemos a variável limite, por exemplo, o texto seria Function PRIMO(num, limite) – o nome limite foi dado de forma aleatória, apenas para efeito de didática.
O passo seguinte é declarar as variáveis que usaremos no cálculo. Precisamos declarar para que o programa conheça de que tipo de dado você está tratando. O VBA, particularmente, não exige declaração de variáveis, mas é interessante que seja feito (caso contrário, ele considera como uma variável geral, que pode pesar o código).
Para o cálculo, usaremos duas variáveis: i e cont. São elas:
- i representa o número pelo qual dividiremos a variável num. Ela pode ser entendida como a primeira linha da figura 1, que traz os números de 1 a 17, naquele caso. Como faremos sucessivos cálculos, variando os números, precisamos ter uma variável
- cont representa o contador de quantas vezes a divisão deu resto 0. Caso cont seja igual a apenas 2 no fim dos cálculos, voilà, temos um número primo
Nos dois casos, usaremos variáveis do tipo Long. Long é uma variável que considera números inteiros no intervalo de -2.147.483.648 a 2.147.483.647. Acredito que isso já é suficiente para nossa função.
O que isso significa? Significa que essas variáveis só poderão guardar números inteiros, dada a característica do tipo de variável tomada. Além disso, os limites inferior e superior são os citados acima. Caso queiramos guardar um valor de 3.000.000.000 nestas variáveis não conseguiremos, pois o valor passa do limite superior. Conforme citado, acredito que para o nosso exemplo isso é suficiente.
Para declarar as variáveis, basta digitar o texto abaixo “dentro” dos limites da função.
Dim i, cont As Long
A figura 4 exemplifica o procedimento.

Caso tivéssemos mais variáveis (ou as mesmas variáveis com uma das duas do tipo Double, por exemplo), poderíamos colocar uma nova linha, no mesmo formato, fazendo a declaração das outras variáveis. Ainda neste caso, onde as variáveis são do mesmo tipo, poderíamos incluir uma por linha. Isso só não foi feito visando ganho de tempo, mas não é uma regra.
Agora vem a parte mais importante do código: o processo de repetição passando por todos os números, até num.
Para isso, usaremos a estrutura For. A estrutura For nos apoia a repetir um procedimento várias vezes. Com ela, delimitamos quantas vezes o procedimento será repetido, sinalizando na própria formação do código. Por exemplo:
- For i = 1 to 8: explora o código que está “dentro” do For, usando cada vez um i diferente, indo de 1 a 8
- For i = 19 to 58: explora o código que está “dentro” do For, usando cada vez um i diferente, indo de 19 a 58
Todo For termina com um Next i (ou variável que você esteja usando), o que informa para o código que é preciso voltar para o início e incrementar uma unidade ao For, indo para o próximo i.
Podemos usar o For para processos de loop como por exemplo preencher uma linha de uma planilha com um dado texto (e alterando as linhas pelo For). Neste caso, usaremos o For para nos dar o número pelo qual dividiremos num na busca dos restos de divisão iguais a zero.
O código que deve ser incluído é:
For i = 1 To num
If num Mod i = 0 Then
cont = cont + 1
End If
Next i
A figura 5 ilustra o código com a função For.

Pela fórmula e figura, podemos observar que:
- Há uma fórmula de verificação do resto da divisão do num pelo i. Essa fórmula é dada por num Mod i. Quando incluímos isso, o VBA calcula algo e nos traz o resto da divisão
- Há uma fórmula de “SE”, denotada pelo IF… THEN… END IF. Ela sinaliza que se o num Mod i for igual a zero, um procedimento será realizado
- O procedimento a ser realizado está entre o IF e o END IF. Perceba que, caso num Mod i = 0 seja “verdadeiro” (ou seja, o resto da divisão de num por i é de fato 0), nós faremos cont = cont + 1
- Fazer um “cont = cont + 1” pode ser contraditório, mas é lógico: o sistema resolve o lado “direito” da equação (cont + 1) >> encontra este valor >> armazena em cont (lado “esquerdo” da equação)
- Com isso, garantimos que sempre somaremos 1 a cada vez que encontramos um número i que divide num (ou, em outras palavras, num Mod i = 0)
- Caso você tenha observado, antes do For incluímos um cont = 0. É apenas para “zerar” a variável, mostrando que ela parte dali
- Perceba que o For leva a variável i de 1 até num. Dessa forma, ela repetirá esse processo por várias vezes. Primeiro com o i = 1, depois com o i = 2, e assim sucessivamente até i = num (que é quando será interrompida)
- Se no fim do For (após passarmos por num) tivemos um valor de cont = 2, encontramos um número primo. Caso seja maior, significa que achamos no meio do caminho mais números que dividem num, o que caracteriza o número como composto (um “não primo”)
- Apenas por efeito de curiosidade: o texto em verde na figura 5 é um comentário, que não interfere o código. Incluímos um comentário começando a linha por ‘. Geralmente escrevemos isso para lembrarmos do que fizemos, quando formos rever o código no futuro
Feito isso, precisamos apenas verificar o valor do cont. Caso ele seja igual a 2, o número é primo. Fazemos isso com o código abaixo:
If cont = 2 Then
PRIMO = 1
Else
PRIMO = 0
End If
A figura 6 exemplifica o procedimento.

Temos na sequência um uso de IF… THEN… ELSE… END IF. A diferença para o IF anterior é que temos agora uma condição ELSE, que nos direcionará para uma situação de FALSO. Ou seja, caso cont = 2 seja verdadeiro, tomamos PRIMO = 1. Caso seja falso, iremos por meio do ELSE para PRIMO = 0.
Como a nossa função se chama PRIMO, precisamos em algum momento do código atribuir um valor a ela. Isso se dá geralmente no fim do código, como estamos vendo.
Optamos por incluir uma saída = 1 caso seja primo e uma saída = 0 caso não seja. Dessa forma, quando utilizarmos a função PRIMO no Excel teremos apenas estes dois valores possíveis.
Com isso, nosso código está encerrado.
Uma dica que dou para todos que estão aprendendo VBA é: olhe para o código, do início ao fim. Refaça mentalmente os procedimentos que ele faz. O computador tem uma necessidade tremenda de chegar ao fim. Para isso, ele sai do início e vai fazendo o que você mandou. Se por acaso ele encontra um Next i ele voltará para o início do For, até isso terminar. Tudo se encerra quando ele encontra um End Function e te traz o valor desejado para o título da função, conforme mostrado.
Hora de utilizar nossa função no Excel
Conforme dito, temos agora uma função “PRIMO” no Excel, como temos várias outras. Para testar nossa função, basta incluirmos em uma célula um “=PRIMO(5)”, por exemplo, para verificar se 5 é primo ou não. Podemos atribuir uma célula também (como uma função normal). Note, pela figura 7, que ao digitarmos a fórmula, ela já aparece como mais uma fórmula do Excel.

Quando calculamos a função primo para cada um dos números, encontramos o valor de 1 para aqueles que são primos. Note pela figura 8, onde foi usada Formatação Condicional para realçar os números, quais são os primos de 1 a 10 (apenas 2, 3, 5 e 7).

É possível também, via formatação condicional, vermos quais são os primos de 1 a 100, usando também nossa fórmula criada. Veja na figura 9 todos eles:

É isso! Criamos uma nova função no Excel usando a ferramenta VBA.
A grande ideia do artigo é o aprendizado das funções e ferramentas do VBA. Como fizemos isso para números primos (criação de uma fórmula nova), podemos fazer o mesmo para várias outras frentes, voltadas à sua área de atuação:
- Função para cálculo de comissão, a partir de um valor de vendas
- Função para dimensionamento de algo em Engenharia, a partir da entrada das variáveis
- Função que retorna um determinado valor que passa por uma série de tomadas de decisão, que ficariam difíceis de trabalhar na planilha do Excel
- Etc…
Mais do que gravar macros, o VBA é uma excelente ferramenta para programação, e é isso que vimos no artigo de hoje.
Até a próxima!
