Instrução If Then Else no Excel VBA (explicada com exemplos)

No Excel VBA, a instrução IF Then Else permite que você verifique se há uma condição e execute uma ação de acordo.

Isso é extremamente valioso em muitas situações, como veremos nos exemplos mais adiante neste tutorial.

Para dar um exemplo simples, suponha que você tenha uma lista de notas no Excel e deseja destacar todos os alunos que obtiveram uma nota A. Agora, se eu pedir que você faça isso manualmente, você verificará a nota de cada aluno e se é um A, você o realçará e, se não for, deixará como está.

A mesma lógica pode ser construída em VBA usando o Se Então Else declaração também (e, claro, fazer muito mais do que apenas destacar notas).

Neste tutorial, vou mostrar a você diferentes maneiras de usar a construção ‘If Then Else’ no Excel VBA, e alguns exemplos práticos em ação.

Mas antes de entrar em detalhes, deixe-me fornecer a sintaxe da instrução ‘IF Then Else’.

Se você estiver interessado em aprender VBA da maneira mais fácil, confira meu Treinamento Online Excel VBA.

Sintaxe - IF Then Else

Abaixo está a sintaxe genérica da construção If Then Else em VBA

Condição IF Então true_code [Else false_code]

Ou

Condição IF Então true_code Else false_code End IF

Observe que a parte Else desta instrução é opcional.

Agora, se você está se perguntando qual é a diferença entre as duas sintaxes, deixe-me esclarecer.

A primeira sintaxe é uma instrução IF THEN ELSE simples de uma linha em que você não precisa usar a instrução END IF.

No entanto, na segunda sintaxe, a parte true_code está na segunda linha. Isso é útil quando o código que você precisa executar, caso a condição IF seja verdadeira, é longo e consiste em várias linhas.

Ao dividir a instrução IF em várias linhas, você precisa informar ao VBA onde termina a construção IF Then.

Portanto, você precisa usar a instrução End IF.

Caso você não use End IF quando necessário, o VBA mostrará um erro - “Block IF sem END IF”

Exemplos de uso da instrução IF Then em VBA

Para dar uma ideia de como a instrução IF-THEN funciona no VBA, deixe-me começar com alguns exemplos básicos (alguns exemplos práticos e mais úteis são abordados posteriormente neste tutorial).

Suponha que você tenha a pontuação de um aluno na célula A1 e deseja verificar se o aluno passou no exame ou não (o limite de notas para passar é 35).

Em seguida, você pode usar o seguinte código:

Sub CheckScore () If Range ("A1"). Value> = 35 Then MsgBox "Pass" End Sub

O código acima tem uma única linha de instrução IF que verifica o valor na célula A1.

Se for mais de 35, mostra a mensagem - “Passe”.

Se for inferior a 35, nada acontece.

Mas e se você quiser mostrar uma mensagem em ambos os casos, se o aluno foi aprovado ou reprovado no exame.

O código abaixo faria isso:

Sub CheckScore () If Range ("A1"). Value> = 35 Then MsgBox "Pass" Else MsgBox "Fail" End If End Sub

O código acima usa a instrução IF e também a ELSE para executar duas condições diferentes. Quando a pontuação é maior que (ou igual a) 35, a condição IF é verdadeira e o código logo abaixo dela é executado (tudo antes da instrução Else).

Mas quando a condição IF é FALSE, o código pula para a parte Else e executa o bloco de código nela.

Observe que quando usamos uma única linha da instrução IF Then, não precisamos usar End IF. Mas quando o dividimos em mais de uma linha, precisamos usar a instrução End If.

IF Then aninhado (várias declarações IF Then)

Até agora, usamos uma única instrução IF Then.

Caso você tenha várias condições para verificar, você pode usar:

  • Múltiplas condições IF
  • Declaração If Then Else
  • Construir IF Then ElseIf Else

Deixe-me mostrar como eles diferem e como usar isso no Excel VBA.

Múltiplas declarações IF Then

Vejamos o mesmo exemplo de como usar a pontuação de um aluno.

Se a pontuação do aluno for inferior a 35, a mensagem a ser exibida é ‘Reprovado’; se a pontuação for maior ou igual a 35, a mensagem a ser exibida será ‘Aprovado’.

Podemos usar o código abaixo para fazer isso:

Sub CheckScore () If Range ("A1"). Value = 35 Then MsgBox "Pass" End Sub

Você pode usar várias instruções IF Then conforme mostrado acima. Embora funcione, não é um exemplo de boa codificação (como você verá as alternativas abaixo).

Caso decida usar isso, lembre-se de que essas instruções devem ser independentes ou mutuamente exclusivas. O importante a saber aqui é que na construção acima, todas as instruções IF são avaliadas e aquelas em que a condição é verdadeira, o código é executado.

Portanto, mesmo se a primeira instrução IF estiver correta, a segunda ainda será avaliada.

Declaração IF Then Else

Suponha que desta vez, em vez de apenas exibir a mensagem Aprovado / Reprovado, tenhamos mais uma condição.

Se a pontuação do aluno for inferior a 35, a mensagem a ser exibida é 'Reprovado', se a pontuação for maior ou igual a 35, a mensagem a ser exibida será 'Aprovado', e se a pontuação for superior a 80, a mensagem a ser exibida é 'Passe, com distinção'.

Podemos usar o código abaixo para fazer isso:

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" Else If Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End If End Sub

No código acima, usamos várias instruções IF (aninhadas IF Then) com a ajuda de Else.

Portanto, há uma construção ‘IF Then Else’ dentro de uma construção ‘IF Then Else’. Esse tipo de aninhamento permite verificar várias condições e executar o bloco de código relevante.

Instrução IF Then ElseIf Else

O código acima (que vimos na seção anterior) pode ser otimizado ainda mais usando a instrução ElseIf.

Aqui está o que estamos tentando fazer - se a pontuação do aluno for inferior a 35, a mensagem a ser exibida é 'Reprovado', se a pontuação for maior ou igual a 35, a mensagem a ser exibida será 'Aprovado' e se o a pontuação for superior a 80, a mensagem a ser exibida é 'Aprovado, com distinção'.

Sub CheckScore () If Range ("A1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

O código acima usa ElseIf, que nos permite manter todas as condições em uma única instrução IF Then.

Usando AND e OR em IF Then Else

Até agora neste tutorial, verificamos apenas uma única condição por vez.

No entanto, quando você tem várias condições dependentes, pode usar a instrução AND ou OR com as condições IF.

Abaixo está a sintaxe do uso da condição AND / OR com a instrução IF Then.

IF Condição1 E Condição2 Então true_code Else false_code End IF

No código acima, somente quando a Condição1 e a Condição2 são atendidas, o true_code é executado. Mesmo se uma das condições for falsa, ele executará o false_code.

Com OR, mesmo se uma das condições for verdadeira, ele executará o true_code. Somente quando todas as condições são falsas, ele executa o false_code.

Agora vamos ver como as instruções AND e OR funcionam com a construção IF Then Else.

Suponha que você tenha as pontuações para duas disciplinas em vez de uma e deseja verificar as seguintes condições:

  • Falhar - Quando a pontuação for inferior a 35 em alguma das disciplinas.
  • Passar - Quando a pontuação for maior ou igual a 35, mas menor que 80 em ambas as disciplinas.
  • Passe, com distinção - Quando a pontuação for maior que 35 em ambas as disciplinas e maior ou igual a 80 em uma ou ambas as disciplinas.

Aqui está o código que fará isso:

Sub CheckScore () If Range ("A1"). Value <35 Or Range ("B1"). Value <35 Then MsgBox "Fail" ElseIf Range ("A1"). Value <80 And Range ("B1"). Valor <80 Then MsgBox "Pass" Else MsgBox "Pass, with Distinction" End If End Sub

O código acima usa instruções OR e AND.

Você também pode escrever o mesmo código com uma ligeira alteração (usando OR em vez de AND).

Sub CheckScore () If Range ("A1"). Value <35 Or Range ("B1"). Value 80 Or Range ("B1"). Value> 80 Then MsgBox "Pass, with Distinction" Else MsgBox "Pass" End If End Sub

Ambos os códigos VBA acima fornecerão o mesmo resultado. Pessoalmente, prefiro o primeiro, pois tem um fluxo lógico de verificação das pontuações (mas sou só eu).

Usando Diferente de em If Then

Em todos os exemplos acima, usamos as condições que verificam se um valor é igual a um valor especificado ou não.

Você também pode usar códigos semelhantes ao verificar quando o valor não é igual a um valor especificado no código VBA. Diferente do representado pelo Excel VBA.

Para ver um exemplo prático de uso, dê uma olhada no Exemplo 1 abaixo.

Usando If Then Else com Loops em VBA

Até agora, vimos alguns exemplos que são bons para entender como as instruções ‘IF-THEN’ funcionam no VBA, no entanto, não são úteis no mundo prático.

Se eu precisar avaliar os alunos, posso fazer isso facilmente usando as funções do Excel.

Então, vamos dar uma olhada em alguns exemplos úteis e práticos que podem ajudá-lo a automatizar algumas coisas e ser mais eficiente.

Exemplo 1 - Salvar e fechar todas as pastas de trabalho, exceto a pasta de trabalho ativa

Se você tem muitas pastas de trabalho abertas e deseja fechar todas rapidamente, exceto a pasta de trabalho ativa, você pode usar o código abaixo,

Sub SaveCloseAllWorkbooks () Dim wb como pasta de trabalho para cada wb em pastas de trabalho Em caso de erro retomar próximo If wb.Name ActiveWorkbook.Name Then wb.Save wb.Close End If Next wb End Sub

O código acima salvaria e fecharia todas as pastas de trabalho (exceto a ativa).

Ele usa o loop For Next para percorrer a coleção de todas as pastas de trabalho abertas e verifica o nome usando a condição IF.

Se o nome não for igual ao da pasta de trabalho Ativa, ela a salva e fecha.

Caso haja um código VBA em qualquer uma das pastas de trabalho e você não o tenha salvo como .xls ou .xlsm, você verá um aviso (pois os códigos vba são perdidos ao salvá-lo no formato .xlsx).

Exemplo 2 - Destacar células com valores negativos

Suponha que você tenha uma coluna cheia de números e deseja destacar rapidamente todas as células com valores negativos em vermelho, você pode fazer isso usando o código abaixo.

Sub HighlightNegativeCells () Dim Cll As Range Para Cada Cll In Selection If Cll.Value <0 Then Cll.Interior.Color = vbRed Cll.Font.Color = vbWhite End If Next Cll End Sub

O código acima usa o loop For Each e verifica cada célula na seleção que você fez. Se a célula tiver um valor negativo, ela será destacada em vermelho com a cor da fonte branca.

Exemplo 3 - Ocultar toda a planilha, exceto a planilha atual

Caso você queira ocultar rapidamente todas as planilhas, exceto a ativa, você pode usar o código abaixo:

Sub HideAllExceptActiveSheet () Dim ws As Worksheet Para Cada ws Neste Workbook.Worksheets If ws.Name ActiveSheet.Name Then ws.Visible = xlSheetHidden Next ws End Sub

O código acima usa o loop For Each para percorrer uma coleção de planilhas. Ele verifica o nome de cada planilha e o oculta se não for a planilha ativa.

Exemplo 4 - Extraia a parte numérica de uma string alfanumérica

Se você tem strings alfanuméricas nas células e deseja extrair a parte numérica delas, você pode fazer isso usando o código abaixo:

Função GetNumeric (CellRef As String) Dim StringLength As Integer StringLength = Len (CellRef) For i = 1 To StringLength If IsNumeric (Mid (CellRef, i, 1)) Then Result = Result & Mid (CellRef, i, 1) Next i GetNumeric = Função Final do Resultado

Este código criará uma função personalizada no Excel que pode ser usada na planilha (como uma função normal).

Onde colocar o código VBA?

Quer saber para onde o código VBA vai em sua pasta de trabalho do Excel?

O Excel tem um back-end VBA chamado editor VB. Você precisa copiar e colar o código na janela de código do módulo do Editor VB.

Aqui estão as etapas para fazer isso:

  1. Vá para a guia Desenvolvedor.
  2. Clique na opção Visual Basic. Isso abrirá o editor VB no backend.
  3. No painel Project Explorer no VB Editor, clique com o botão direito em qualquer objeto da pasta de trabalho na qual deseja inserir o código. Se você não vir o Project Explorer, vá para a guia View e clique em Project Explorer.
  4. Vá para Inserir e clique em Módulo. Isso irá inserir um objeto de módulo para sua pasta de trabalho.
  5. Copie e cole o código na janela do módulo.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave