Índice:
Vídeo: Excel VBA IF THEN Statement (with ELSEIF & Looping in cells) 2025
If-Então é a estrutura de controle mais importante do VBA. Você provavelmente usará esse comando diariamente. Use a estrutura If-Then quando desejar executar uma ou mais declarações de forma condicional. A cláusula Else opcional, se incluída, permite que você execute uma ou mais instruções se a condição que você está testando for não verdadeira. Aqui está um procedimento simples CheckUser, recodificado para usar a estrutura If-Then-Else:
Sub CheckUser2 () UserName = InputBox ("Digite seu nome:") Se UserName = "Satya Nadella" Então MsgBox ("Welcome Satya …") '… [Mais código aqui] … Else MsgBox "Desculpa. Somente Satya Nadella pode executar isso. "End If End Sub
If-Then examples
A seguinte rotina demonstra a estrutura If-Then sem a cláusula Else opcional:
Sub GreetMe () Se Time <0. 5 então MsgBox" Good Morning "End Sub
O procedimento GreetMe usa a função Time do VBA para obter a hora do sistema. Se a hora atual for menor que. 5, a rotina mostra uma saudação amigável. Se Time for maior ou igual a. 5, a rotina termina, e nada acontece.
Para exibir uma saudação diferente se Time for maior ou igual a. 5, você pode adicionar outra declaração If-Then após a primeira:
Sub GreetMe2 () Se Time = 0. 5 Então MsgBox "Good Afternoon" End Sub
Observe que> = (maior ou igual a) é usado para a segunda declaração If-Then. Isso garante que o dia inteiro seja coberto. Se> usado (maior que), nenhuma mensagem apareceria se este procedimento fosse executado precisamente às 12:00 da tarde. Isso é bastante improvável, mas com um programa importante como esse, você não quer correr riscos.
Um exemplo If-Then-Else
Outra abordagem ao problema anterior usa a cláusula Else. Aqui está a mesma rotina recodificada para usar a estrutura If-Then-Else:
Sub GreetMe3 () Se Time <0. 5 então MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
Observe que a linha O caractere de continuação (sublinhado) é usado no exemplo anterior. A declaração If-Then-Else é realmente uma única declaração. O VBA fornece uma maneira ligeiramente diferente de codificar as construções If-Then-Else que usam uma declaração End If. Portanto, o procedimento GreetMe pode ser reescrito como
Sub GreetMe4 () Se Time <0. 5 então MsgBox "Good Morning" Else MsgBox "Good Afternoon" End If End Sub
Na verdade, você pode inserir qualquer número de declarações no âmbito do Se parte e qualquer número de declarações sob a parte Else. Essa sintaxe é mais fácil de ler e faz as declarações mais curtas.
E se você precisar expandir a rotina GreetMe para lidar com três condições: manhã, tarde e noite? Você tem duas opções: use três instruções If-Then ou use uma estrutura aninhada If-Then-Else. Aninhamento significa colocar uma estrutura If-Then-Else dentro de outra estrutura If-Then-Else. A primeira abordagem, usando três instruções If-Then, é mais simples:
Sub GreetMe5 () Dim Msg Como String If Time = 0. 5 E Time = 0. 75 Então Msg = "Evening" MsgBox "Good" & Msg End Sub
Um novo toque foi adicionado com o uso de uma variável. A variável Msg obtém um valor de texto diferente, dependendo da hora do dia. A declaração MsgBox exibe a saudação: Bom dia, boa tarde ou boa noite.
A seguinte rotina executa a mesma ação, mas usa uma estrutura If-Then-End If:
Sub GreetMe6 () Dim Msg As String If Time = 0. 5 E Time = 0. 75 Então Msg = "Evening" End If MsgBox "Good" & Msg End Sub
Usando ElseIf
Nos exemplos anteriores, cada declaração na rotina é executada. Uma estrutura ligeiramente mais eficiente iria sair da rotina assim que uma condição for verdadeira. Por manhã, por exemplo, o procedimento deve exibir a mensagem Good Morning e depois sair - sem avaliar as outras condições supérfluas.
Com uma pequena rotina como essa, você não precisa se preocupar com a velocidade de execução. Mas para aplicativos maiores em que a velocidade é crítica, você deve saber sobre outra sintaxe para a estrutura If-Then.
Veja como você pode reescrever a rotina GreetMe usando esta sintaxe:
Sub GreetMe7 () Dim Msg As String If Time = 0. 5 E Time <0. 75 então Msg = "Afternoon" Else Msg = "Evening "End If MsgBox" Good "& Msg End Sub
Quando uma condição é verdadeira, o VBA executa as instruções condicionais e a estrutura If termina. Em outras palavras, esse procedimento é um pouco mais eficiente do que os exemplos anteriores. O trade-off é que o código é mais difícil de entender.
Outro exemplo If-Then
Aqui está outro exemplo que usa a forma simples da estrutura If-Then. Este procedimento solicita ao usuário uma quantidade e, em seguida, exibe o desconto apropriado, com base na quantidade que o usuário insere:
Sub ShowDiscount () Quantidade Dim Como Desconto Dim Dim como Quantidade Dupla = InputBox ("Digite Quantidade:") Se Quantidade > 0, em seguida, Discount = 0. 1 Se Quantidade> = 25 Então Desconto = 0. 15 Se Quantidade> = 50 Depois Desconto = 0. 2 Se Quantidade> = 75 Então Desconto = 0. 25 MsgBox "Desconto:" & Discount End Sub
Observe que cada declaração If-Then nesta rotina é executada e o valor de Desconto pode ser alterado à medida que as instruções são executadas. No entanto, a rotina, em última análise, exibe o valor correto para Desconto, pois as instruções If-Then estão em ordem de valores de desconto ascendentes.
O procedimento a seguir executa as mesmas tarefas usando a sintaxe alternativa ElseIf. Nesse caso, a rotina termina imediatamente após a execução das declarações para uma condição verdadeira:
Sub ShowDiscount2 () Dim Quantity As Long Dim Discount As Double Quantity = InputBox ("Enter Quantity:") Se Quantidade> 0 e Quantidade <25 então Discount = 0.1 ElseIf Quantidade> = 25 E Quantidade <50, em seguida, Discount = 0. 15 ElseIf Quantidade> = 50 E Quantidade <75, em seguida, Discount = 0. 2 ElseIf Quantidade> = 75 Then Discount = 0. 25 End If MsgBox "Discount:" & Discount End Sub
Essas múltiplas estruturas If-Then são bastante pesadas. Você pode querer usar a estrutura If-Then somente para decisões binárias simples.
