Declaração VBA If
Se então
As instruções If do VBA permitem que você teste se as expressões são VERDADEIRAS ou FALSAS, executando códigos diferentes com base nos resultados.Vejamos um exemplo simples:
1 | Se Faixa ("a2"). Valor> 0 Então Faixa ("b2"). Valor = "Positivo" |
Isso testa se o valor no intervalo A2 é maior que 0. Se for, definir o intervalo B2 igual a “positivo”
Observação: ao testar as condições, usaremos os operadores de comparação =,>, <,, =. Iremos discuti-los com mais detalhes posteriormente neste artigo.Esta é a sintaxe para uma instrução If de uma linha simples:
1 | Se [test_expression], então [action] |
Para facilitar a leitura, você pode usar um caractere de continuação de linha (sublinhado) para expandir as instruções If para duas linhas (como fizemos na imagem acima):
12 | Se [test_expression], então _[açao] |
12 | Se Intervalo ("a2"). Valor> 0 Então _Intervalo ("b2"). Valor = "Positivo" |
Fim se
A instrução if de “linha única” acima funciona bem quando você está testando uma condição. Mas, à medida que suas declarações IF se tornam mais complicadas com várias condições, você precisará adicionar um "End If" ao final da declaração if:
123 | Se Intervalo ("a2"). Valor> 0 EntãoIntervalo ("b2"). Valor = "Positivo"Fim se |
Aqui, a sintaxe é:
123 | Se [test_expression] então[açao]Fim se |
O End If significa o fim da instrução if.
Agora vamos adicionar um ElseIF:
ElseIF - Múltiplas Condições
O ElseIf é adicionado a uma instrução If existente. ElseIf testa se uma condição é atendida
SOMENTE se as condições anteriores não foram atendidas.No exemplo anterior, testamos se o valor de uma célula é positivo. Agora também testaremos se o valor da célula é negativo com um ElseIf:
12345 | Se Intervalo ("a2"). Valor> 0 EntãoIntervalo ("b2"). Valor = "Positivo"Intervalo ElseIf ("a2"). Valor <0 EntãoIntervalo ("b2"). Valor = "Negativo"Fim se |
Você pode usar vários ElseIfs para testar várias condições:
1234567891011 | Sub If_Multiple_Conditions ()Se Intervalo ("a2"). Valor = "Gato" EntãoIntervalo ("b2"). Valor = "Miau"Intervalo ElseIf ("a2"). Valor = "Cachorro" EntãoIntervalo ("b2"). Valor = "Woof"Intervalo ElseIf ("a2"). Valor = "Pato" EntãoIntervalo ("b2"). Valor = "Quack"Fim seEnd Sub |
Agora vamos adicionar um Outro:
Outro
o Outro vai correr se nenhuma outra condição anterior foi atendida.
Terminaremos nosso exemplo usando um Else para indicar que se o valor da célula não for positivo ou negativo, então deve ser zero:
1234567 | Se Intervalo ("a2"). Valor> 0 EntãoIntervalo ("b2"). Valor = "Positivo"Intervalo ElseIf ("a2"). Valor <0 EntãoIntervalo ("b2"). Valor = "Negativo"OutroIntervalo ("b2"). Valor = "Zero"Fim se |
If-Else
O tipo mais comum de declaração If é um If-Else simples:
1234567 | Sub If_Else ()Se Intervalo ("a2"). Valor> 0 EntãoIntervalo ("b2"). Valor = "Positivo"OutroIntervalo ("b2"). Valor = "Não positivo"Fim seEnd Sub |
IFs aninhados
Você também pode “aninhar” instruções if dentro umas das outras.
1234567891011 | Sub Nested_Ifs ()Se Intervalo ("a2"). Valor> 0 EntãoIntervalo ("b2"). Valor = "Positivo"OutroSe Intervalo ("a2"). Valor <0 EntãoIntervalo ("b2"). Valor = "Negativo"OutroIntervalo ("b2"). Valor = "Zero"Fim seFim seEnd Sub |
IF - Ou, E, Xor, Não
A seguir, discutiremos os operadores lógicos: Or, And, Xor, Not.
Se ou
o Ou operador testa se pelo menos uma condição foi atendida.
O código a seguir testará se o valor no intervalo A2 é menor que 5.000 ou maior que 10.000:
123 | Se Intervalo ("a2"). Valor 10000 EntãoIntervalo ("b2"). Valor = "Fora do intervalo"Fim se |
Você pode incluir vários Ors em uma linha:
123 | Se Intervalo ("a2"). Valor 10.000 ou Intervalo ("a2"). Valor = 9999 EntãoIntervalo ("b2"). Valor = "Fora do intervalo"Fim se |
Se você for usar vários Ors, é recomendado usar um caractere de continuação de linha para tornar seu código mais fácil de ler:
123456 | Se Intervalo ("a2"). Valor <5000 Ou _Intervalo ("a2"). Valor> 10.000 ou _Intervalo ("a2"). Valor = 9999 EntãoIntervalo ("b2"). Valor = "Fora do intervalo"Fim se |
Se e
O operador And permite que você teste se TODAS as condições são atendidas.
123 | Se Intervalo ("a2"). Valor> = 5000 E Intervalo ("a2"). Valor <= 10.000 EntãoIntervalo ("b2"). Valor = "No intervalo"Fim se |
If Xor
O operador Xor permite que você teste se exatamente uma condição é atendida. Se zero condições forem atendidas, Xor retornará FALSO. Se duas ou mais condições forem atendidas, Xor também retornará falso.
Raramente vi o Xor usado na programação VBA.
Se não
O operador Not é usado para converter FALSE em TRUE ou TRUE em FALSE:
123 | Sub IF_Not ()MsgBox Not (True)End Sub |
Observe que o operador Not requer parênteses ao redor da expressão para alternar.
O operador Not também pode ser aplicado a instruções If:
123 | Se não (intervalo ("a2"). Valor> = 5000 e intervalo ("a2"). Valor <= 10000) EntãoIntervalo ("b2"). Valor = "Fora do intervalo"Fim se |
Se comparações
Ao fazer comparações, você geralmente usará um dos operadores de comparação:
Operador de comparação | Explicação |
= | Igual a |
| Diferente de |
> | Maior que |
>= | Melhor que ou igual a |
< | Menor que |
<= | Menos que ou igual a |
No entanto, você também pode usar qualquer expressão ou função que resulta em VERDADEIRO ou FALSO
If - Função Booleana
Ao construir expressões para instruções If, você também pode usar qualquer função que gere TRUE ou False. O VBA tem algumas dessas funções:
Função | Descrição |
IsDate | Retorna TRUE se a expressão for uma data válida |
Está vazia | Verifique se há células em branco ou variáveis indefinidas |
IsError | Verifique os valores de erro |
É nulo | Verifique se há valor NULL |
IsNumeric | Verifique o valor numérico |
Eles podem ser chamados assim:
1 | If IsEmpty (Range ("A1"). Value) Then MsgBox "Cell Empty" |
O Excel também tem muitas funções adicionais que podem ser chamadas usando WorksheetFunction. Aqui está um exemplo da Função IsText do Excel:
12 | If Application.WorksheetFunction.IsText (Range ("a2"). Value) Then _MsgBox "Cell is Text" |
Você também pode criar suas próprias funções definidas pelo usuário (UDFs). A seguir, criaremos uma função booleana simples que retorna TRUE. Em seguida, chamaremos essa função em nossa instrução If:
1234567891011 | Sub If_Function ()If TrueFunction ThenMsgBox "True"Fim seEnd SubFunção TrueFunction () como BooleanTrueFunction = TrueFunção Final |
Comparando Texto
Você também pode comparar texto semelhante à comparação de números:
Ao comparar o texto, você deve estar atento à “Caixa” (superior ou inferior). Por padrão, o VBA considera letras com maiúsculas e minúsculas diferentes como não correspondentes. Em outras palavras, “A” “a”.Se você deseja que o VBA ignore maiúsculas e minúsculas, você deve adicionar a declaração Option Compare Text no topo do seu módulo:
1 | Texto de comparação de opções |
Depois de fazer essa declaração “A” = “a”:
12345 | Texto de comparação de opçõesSub If_Text ()MsgBox "a" = "A"End Sub |
VBA If Like
O VBA Like Operator permite que você faça comparações inexatas de texto. Clique no link “Like Operator” para saber mais, mas mostraremos um exemplo básico abaixo:
12345678 | Dim strName as StringstrName = "Sr. Charles"Se strNome Like "Mr *" EntãoMsgBox "True"OutroMsgBox "False"Fim se |
Aqui, estamos usando um caractere curinga asterisco “*”. O * representa qualquer número de quaisquer caracteres. Portanto, a instrução If acima retornará TRUE. O operador Like é uma ferramenta extremamente poderosa, mas geralmente subutilizada, para lidar com texto.
Se Loops
Os loops de VBA permitem que você repita ações. Combinar IF-ELSEs com Loops é uma ótima maneira de processar muitos cálculos rapidamente.
Continuando com nosso exemplo Positivo / Negativo, adicionaremos um For Each Loop para percorrer um intervalo de células:
1234567891011121314 | Sub If_Loop ()Dim Cell como RangePara cada célula no intervalo ("A2: A6")Se Cell.Value> 0 ThenCell.Offset (0, 1) .Value = "Positivo"ElseIf Cell.Value <0 ThenCell.Offset (0, 1) .Value = "Negativo"OutroCell.Offset (0, 1) .Value = "Zero"Fim sePróxima CélulaEnd Sub |
Exemplos If Else
Agora examinaremos alguns exemplos mais específicos.
Verifique se a célula está vazia
Este código irá verificar se uma célula está vazia. Se estiver vazio, ele irá ignorar a célula. Se não estiver vazio, ele emitirá o valor da célula para a célula à direita:
1234567 | Sub If_Cell_Empty ()Se Intervalo ("a2"). Valor "" EntãoIntervalo ("b2"). Valor = Intervalo ("a2"). ValorFim seEnd Sub |
Verifique se a célula contém texto específico
A função Instr testa se uma string de texto é encontrada em outra string. Use-o com uma instrução If para verificar se uma célula contém um texto específico:
123 | If Instr (Range ("A2"). Value, "text")> 0 ThenMsgbox "Texto encontrado"Fim se |
Verifique se a célula contém texto
Este código testará se uma célula é um texto:
1234567 | Sub If_Cell_Is_Text ()If Application.WorksheetFunction.IsText (Range ("a2"). Value) ThenMsgBox "Cell is Text"Fim seEnd Sub |
If Goto
Você pode usar o resultado de uma instrução If para “ir para” outra seção do código.
12345678910 | Sub IfGoTo ()If IsError (Cell.value) ThenIr para pularFim se'Algum códigoPular:End Sub |
Excluir linha se a célula estiver em branco
Usando Ifs e loops, você pode testar se uma célula está em branco e, em caso afirmativo, excluir a linha inteira.
123456789 | Sub DeleteRowIfCellBlank ()Dim Cell As RangePara cada célula no intervalo ("A2: A10")Se Cell.Value = "" Então Cell.EntireRow.DeletePróxima CélulaEnd Sub |
Se MessageBox Sim / Não
Com as caixas de mensagens do VBA, você pode pedir ao usuário para selecionar entre várias opções. A caixa de mensagem Sim / Não solicita que o usuário selecione Sim ou Não. Você pode adicionar uma caixa de mensagem Sim / Não a um procedimento para perguntar ao usuário se deseja continuar executando o procedimento ou não. Você lida com a entrada do usuário usando uma instrução If.Aqui está a caixa de mensagem Sim / Não na prática:
123456789101112 | Sub MsgBoxVariable ()Dim answer As Integeranswer = MsgBox ("Deseja continuar?", vbQuestion + vbYesNo)Se a resposta = vb Sim, entãoMsgBox "Sim"OutroMsgBox "Não"Fim seEnd Sub |
VBA If, ElseIf, Else no Access VBA
As funções If, ElseIf e Else funcionam exatamente da mesma forma no Access VBA e no Excel VBA.
Você pode usar uma instrução If para verificar se há registros em um conjunto de registros.