Estrutura If … Then (ElseIf, Else, End If) e Operadores Comparativos no VBA

O Pessoal!

Neste post vou falar da estrutura If…Then, que usamos para testar condições lógicas. Com certeza, essa é a parte do VBA que mais usei até hoje para automatizar minhas tarefas em Controladoria e Finanças!

Com esta estrutura podemos efetuar comparações entre os valores de duas ou mais variáveis, determinando no código que o VBA execute Funções ou comandos a partir do resultado de um teste lógico.

Podemos, por exemplo, determinar que o VBA formate o fundo de uma célula com vermelho, caso o valor preenchido nesta célula seja menor que zero.

 

A tabela abaixo contém operadores comparativos que podemos usar nessa estrutura.

 

Exemplo de código:

 

Sub Estrutura_If_Then()

‘ Declaração de variáveis.

Dim x As Integer

Dim y As Integer

x = 5

y = 3

‘ Teste lógico.

If x > y Then

‘ Comandos a serem executados quando x for maior que y.

MsgBox “x é maior que y.”

Else

‘ Comandos a serem executados quando x for menor ou igual a y.

MsgBox “x é menor que y.”

End If

End Sub

 

A estrutura acima é formada por um único teste lógico: x > y. Se esta condição for atendida, o VBA mostrará a mensagem “x é maior que y”. Caso contrário, mostrará a mensagem “x é menor que y”, independentemente do valor de x.

Neste exemplo, sendo x igual a y, teremos um problema, pois ambas mensagens não corresponderão ao resultado correto. Aqui, o ideal seria trabalharmos com três hipóteses: x > y, x < y ou x = y. No entanto, precisaríamos incluir mais uma condição à estrutura…

E o que é interessante e que justifica a utilização desta estrutura na criação de planilhas inteligentes, com validações, cálculos, formatações etc. complexos, é que podemos efetuar quantos testes forem necessários. Para isso, basta incluirmos testes adicionais utilizando ElseIf na estrutura.

 

Concluindo, quando trabalhamos com testes lógicos, utilizamos If (no primeiro teste), ElseIf (nos testes intermediários) e Else, por último, para cobrir todas as possibilidades de resultados diferentes dos esperados nos testes efetuados.

Para melhor entender o significado do Else, podemos dizer que sempre que os testes lógicos da estrutura não forem atendidos, o VBA executará os comandos após o Else.

Podemos exemplificar, alterando o código anterior da seguinte forma:

Sub Estrutura_If_Then()

‘ Declaração de variáveis.

Dim x As Integer

Dim y As Integer

x = 5

y = 3

‘ Teste lógico.

If x > y Then

‘ Comandos a serem executados quando x for maior que y.

MsgBox “x é maior que y.”

ElseIf x < y Then

‘ Comandos a serem executados quando x for menor que y.

MsgBox “x é menor que y.”

Else

‘ Comandos a serem executados quando x assumir qualquer outro valor.

MsgBox “x não é maior nem menor que y.”

End If

End Sub

Como sabemos que x só pode assumir três valores distintos em relação a y, poderíamos substituir o Else por ElseIf x = y Then.

Importante: para que o VBA entenda essa estrutura, ela deve conter obrigatoriamente If (teste lógico) Then e End If. Os intermediários ElseIf e Else podem ser usados de acordo com suas necessidades de testes lógicos, mas não são obrigatórios!

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.

Operadores Aritméticos com Variáveis, MsgBox e Chr – VBA

Oi Pessoal!

Dando continuidade ao post Declaração de Variáveis VBA (comandos Dim e Option Explicit), vou falar sobre os operadores aritméticos que são usados em cálculos e comparações entre variáveis no VBA.

A tabela abaixo contém os principais operadores.

Como exemplo de utilização desses operadores, considere o pequeno trecho de código a seguir, onde declaramos as variáveis x, y e z, atribuímos valores a essas variáveis e em seguida efetuamos algumas operações.

Obs: as linhas que iniciam com apóstrofe são usadas como comentários, sendo desconsideradas pelo VBA na execução do código. Sugiro a inclusão de lembretes e comentários para facilitar o entendimento das linhas de código. É importante mantermos organização e padronização nas Macros que criamos para facilitar o entendimento e a manutenção.

 

Exemplo de uso de operadores aritméticos:

 

‘ Exemplo de utilização de variáveis e operadores aritméticos
‘ Declaração de variáveis.

Dim x, y, z As Integer
x = 10
y = 25
z = x*y

‘ Nesse exemplo a variável z conterá o valor 250

 

Exemplo de código:

 

Sub Operadores_Aritméticos()

‘ Declaração de variáveis.

Dim x As Integer

Dim y As Integer

Dim soma, subtração, divisão, multiplicação, intdivisão, exponenciação, módulol As Double

x = 30

y = 4

‘ Efetuando cálculos com os Operadores Aritméticos.

soma = x + y

subtração = x – y

divisão = x / y

multiplicação = x * y

intdivisão = x \ y

exponenciação = x ^ y

módulo = x Mod y

‘ Mensagens para exibição dos resultados.

MsgBox “Os números são: ” & x & ” e ” & y & Chr(13)

MsgBox “Soma: ” & soma & Chr(13) & “Subtração: ” & subtração & Chr(13)

MsgBox “Divisão: ” & divisão & Chr(13) & “Multiplicação: ” & multiplicação & Chr(13)

MsgBox “Divisão inteira: ” & intdivisão & Chr(13) & “Exponenciação: ” & exponenciação & Chr(13)

MsgBox “Resto da divisão: ” & módulo

MsgBox “FIM”

End Sub

 

Ao executar a Sub acima, você visualizará as seguintes caixas de mensagens disparadas pelo Excel (nesta sequência).

 

Para finalizar, vamos falar das funções MsgBox e Chr(número)

Conforme o exemplo anterior, usamos a Função MsgBox para exibir mensagens em uma janela Pop-Up. Para unir as diversas partes da mensagem usamos o operador de concatenação &.

A Função Chr(número) envia o caractere correspondente ao número digitado entre parênteses, que corresponde ao padrão ASCII (American Standard Caracter Interchange Information). Neste padrão, cada caractere possui um número associado. O número 13, por exemplo, está associado ao <ENTER>, ou seja, enviamos um <ENTER> para a caixa de mensagem, equivalente a uma troca de linha, para que os dados apareçam em linhas separadas.

Abs, Dr. E

P.S. Gostaria de pedir desculpas, mas infelizmente não estou conseguindo responder todos os e-mails com dúvidas que venho recebendo. Por isso, peço que não usem o espaço de comentários do post para enviar dúvidas.