VBA Select Case Statement

No VBA, o Selecione a declaração do caso é uma alternativa para o Declaração If-Then, permitindo que você teste se as condições são atendidas, executando o código específico para cada condição. A instrução Select é preferível à instrução If quando há várias condições para processar.

Selecione um exemplo de caso

Este exemplo solicita ao usuário um YesNoCancel MessageBox e testa qual opção o usuário selecionou:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Selecione Caso nResultCase vb SimMsgBox "Sim"Case vbNoMsgBox "Não"Case vbCancelMsgBox "Cancelar"End SelectEnd Sub

Abaixo, escrevemos o equivalente usando uma declaração If. Você notará que a declaração Case Select envolve um pouco menos de digitação - esse benefício é ampliado ao testar vários critérios.

12345678910111213 Sub If_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Se nResult = vb Sim, entãoMsgBox "Sim"ElseIf nResult = vbNo ThenMsgBox "Não"ElseIf nResult = vbCancel ThenMsgBox "Cancelar"Fim seEnd Sub

Sintaxe de declaração de maiúsculas e minúsculas

A sintaxe da instrução Select Case é a seguinte:

12345678910 Selecione o caso [expressão de teste]Caso [condição 1][Ação se a condição 1 for verdadeira]Caso [condição 2][Ação se a condição 2 for verdadeira]Caso [Condição n][Ação se a condição n for verdadeira]Case Else[Ação se nenhuma for verdadeira]End Select

Onde:

[Expressão de teste] - É o valor a avaliar. Normalmente, é uma variável.

[Ação se a condição n for verdadeira] - É apenas o código a ser executado se a condição for atendida (assim como com uma instrução If)

[Condição n] - É a condição para testar. Existem muitas maneiras diferentes de testar as condições. Vamos discuti-los abaixo.

A instrução Case executará o código para a PRIMEIRA condição que for considerada TRUE. Se nenhuma condição for atendida, nenhum código será executado, a menos que a cláusula Else seja adicionada.

Selecione os critérios de caso

Selecionar casos pode ser usado para avaliar valores numéricos e texto. Primeiro, discutiremos como usar Selecionar casos para avaliar expressões numéricas.

Correspondência Exata - Números

Você pode testar facilmente uma correspondência exata com uma Declaração de Caso:

1 Caso 10

ou adicione vírgulas para testar correspondências exatas com vários números:

1 Caso 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n As Integern = CInt (InputBox ("…"))Selecione o caso nCaso 10'Se n for 10, entãoCaso 20, 30, 40'Se n for 20/30/40 EntãoCase Else'Se n não for 20/10/30/40, entãoEnd SelectEnd Sub

Gamas

Você pode testar se um número está dentro de uma faixa como esta:

1 Caso 55 a 74

Este procedimento irá gerar uma pontuação de letras para um aluno com base em sua pontuação numérica:

12345678910111213141516171819202122 Sub Calc_Grade ()Dim Score como inteiroDim LetterGrade As StringScore = InputBox ("Insira a pontuação do aluno")Selecione a pontuação do casoCaso 90 a 100LetterGrade = "A"Caso 80 a 90LetterGrade = "B"Caso 70 a 80LetterGrade = "C"Caso 60 a 70LetterGrade = "D"Case ElseLetterGrade = "F"End SelectMsgBox "A nota do aluno é:" & LetterGradeEnd Sub

Você também pode testar intervalos com o Case Is

Selecione o caso é

1234 O caso é <55'Fazer nadaCaso <= 74MsgBox "In Range"

Lembre-se de que a instrução Case só executará código para SOMENTE a primeira correspondência.

Este procedimento irá calcular a nota de um aluno usando Case Is em vez de Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score como inteiroDim LetterGrade As StringScore = InputBox ("Insira a pontuação do aluno")Selecione a pontuação do casoCaso é> = 90LetterGrade = "A"Caso é> = 80LetterGrade = "B"Caso é> = 70LetterGrade = "C"Caso é> = 60LetterGrade = "D"Case ElseLetterGrade = "F"End SelectMsgBox "A nota do aluno é:" & LetterGradeEnd Sub

Case Else

Você pode adicionar “Case Else” ao final de sua Declaração de Caso para fazer algo se nenhuma condição for atendida:

1 Case Else

Consulte o final do exemplo de código anterior para ver como Case Else pode ser usado.

Selecionar caso - Operador de texto e similar

Até agora, nossos exemplos de Select Case funcionaram apenas com números. Você também pode usar instruções Select Case com texto.

Correspondência Exata - Texto

Você pode testar se a expressão corresponde a uma frase exata como esta:

1 Caixa "Beterraba"

Ou use vírgulas para testar se a expressão corresponde exatamente a mais de uma frase:

1 Estojo "Apple", "Banana", "Orange"

Juntando tudo parece:

12345678910 Sub ExactMatch_Food ()Selecione Case Range ("a1"). ValorCaixa "Beterraba"MsgBox "Vegetal"Estojo "Apple", "Banana", "Orange"MsgBox "Fruta"End SelectEnd Sub

Maiúsculas e Minúsculas

Por padrão, VBA é sensível a maiúsculas e minúsculas. Isso significa que o VBA considera “Texto” diferente de “texto”. Para desativar a diferenciação de maiúsculas e minúsculas, adicione o texto de comparação de opções na parte superior do seu módulo:

1 Texto de comparação de opções

Este exemplo fará com que o Case Select não faça distinção entre maiúsculas e minúsculas ao trabalhar com texto:

123456789101112 Texto de comparação de opçõesSub ExactMatch_Food ()Selecione Case Range ("a1"). ValorCaixa "Beterraba"MsgBox "Vegetal"Estojo "Apple", "Banana", "Orange"MsgBox "Fruta"End SelectEnd Sub

Caso como

O operador semelhante permite que você faça comparações inexatas. Se o texto corresponder, Like retorna TRUE; se não corresponder, retorna FALSE. Isso torna o operador Like fácil de usar com as declarações If, no entanto, não funcionará tão facilmente com as declarações de caso.

Caso semelhante - um teste com falha

O código a seguir demonstra que o Operador Like não funciona com Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Dim word As Stringpalavra = "COCOA"Selecione a palavra do casoCase word2 como "* C * C *"MsgBox "Bom"Case ElseMsgBox "Não é bom"End SelectEnd Sub

Caso semelhante - a maneira correta

No entanto, podemos adicionar a expressão TRUE para fazer a instrução Select funcionar com o operador similar:

1234567891011 Sub Select_Case_Like_CorrectWay ()Dim word As Stringpalavra = "COCOA"Selecione Caso VerdadeiroPalavra do caso, como "* C * C *"MsgBox "Bom"Case ElseMsgBox "Não é bom"End SelectEnd Sub

Case - dois pontos

Ao usar uma declaração de caso, você pode adicionar quantas linhas de código você gostaria de executar com cada condição. No entanto, se você só precisar executar uma linha de código. Você pode usar dois pontos (:) para escrever tudo na mesma linha.

Aqui está o mesmo exemplo de nota do aluno anterior, exceto pelo uso de dois pontos para encurtar o código:

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Score como inteiroDim LetterGrade As StringScore = InputBox ("Insira a pontuação do aluno")Selecione a pontuação do casoCaso 90 a 100: LetterGrade = "A"Caso 80 a 90: LetterGrade = "B"Caso 70 a 80: LetterGrade = "C"Caso 60 a 70: LetterGrade = "D"Caso contrário: LetterGrade = "F"End SelectMsgBox "A nota do aluno é:" & LetterGradeEnd Sub

Seleção de caso - e / ou - várias condições

Você pode usar os operadores And / Or para testar critérios adicionais junto com o Select Case.

Neste exemplo, estamos usando um Select Case na variável ‘age’, mas também queremos testar o sexo. Portanto, usamos o operador And para realizar o teste mais complexo:

123456789101112131415161718 Sub NestedSelectCase ()Dim sex As StringDim age como inteirosexo = "masculino" 'ou femininoidade = 15Selecione a idade do casoCaso é <20 e sexo = "masculino"Msgbox "Masculino com menos de 20 anos"Case Is <20 And sex = "female"Msgbox "Feminino menor de 20 anos"Caso é> = 20 E sexo = "masculino"Msgbox "Masculino acima de 20"Caso é> = 20 E sexo = "feminino"Msgbox "Feminino acima de 20"End SelectEnd Sub

Declarações de caso aninhadas

Assim como as instruções If, você pode aninhar as instruções Case umas dentro das outras:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Dim sex As StringDim age como inteirosexo = "masculino" 'ou femininoidade = 15Selecione a idade do casoO caso é <20Selecione o sexo do casoCaso "masculino"MsgBox "Masculino com menos de 20 anos"Caso "feminino"MsgBox "Feminino menor de 20 anos"End SelectCaso é> = 20 E sexo = "feminino"Selecione o sexo do casoCaso "masculino"MsgBox "Masculino acima de 20"Caso "feminino"MsgBox "Feminino acima de 20"End SelectEnd SelectEnd Sub

Declaração de Caso vs. Declaração de If

Quanto mais condições forem testadas, mais útil será a instrução Case em comparação com uma instrução If. Vejamos um exemplo.

Aqui está o código necessário para testar se o nome de uma planilha é igual a um conjunto de valores usando uma instrução If:

12345 Se Nome = "Orçamento" Ou Nome = "Previsão" Ou Nome = "Trailing12" Ou _Name = "Flex" Or Name = "OtherRatios" Or Name = "Comparison" Ou _Name = "BudReview" Or Name = "P & L_Review" Or Name = "Other" Then'Faça alguma coisaFim se

Aqui está o mesmo código usando uma instrução Select em vez disso:

12345 Selecione o nome do casoCase "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Comparison", "BudReview", "P & L_Review", "Other"'Faça alguma coisaEnd Select

Você pode ver que é muito mais fácil usar uma instrução Select neste cenário. É significativamente menos digitação e é muito mais fácil de ler.

Exemplos de casos selecionados de VBA

Ex 1. Função definida pelo usuário de declaração de caso (UDF)

Vamos replicar nosso exemplo de cálculo de nota acima e criar um UDF para calcular a pontuação de um aluno:

12345678910111213141516 Função GetGrade (Score As Integer) As StringSelecione a pontuação do casoCaso 90 a 100GetGrade = "A"Caso 80 a 90GetGrade = "B"Caso 70 a 80GetGrade = "C"Caso 60 a 70GetGrade = "D"Case ElseGetGrade = "F"End SelectFunção Final

Agora podemos usar a função GetGrade em nossa planilha do Excel para calcular rapidamente as notas dos alunos:

Ex 2. Nome da Folha de Teste / Declaração de Caso de Loop

Este código percorrerá todas as planilhas em uma pasta de trabalho, planilhas desprotegidas que atendem a certos critérios:

123456789101112 Sub Case_UnProtectSheet ()Dim ws como planilhaPara cada ws nas planilhasSelecione Case ws.Name 'Lista de todas as planilhas com proporçõesCaso "Orçamento", "Previsão", "Trailing12", "Flex", "OtherRatios", _"Comparison", "BudReview", "P & L_Review", "Other"ws.UnprotectEnd SelectPróximo wsEnd Sub

Ex 3. Selecione Caso - Valor da Célula

Este exemplo testará a pontuação de um aluno em uma célula, enviando a nota da letra diretamente para a célula à direita.

12345678910111213141516 Sub TestCellValue ()Dim cell como rangeDefinir célula = intervalo ("C1")Selecione Case cell.ValueCaso 90 a 100célula. Deslocamento (0, 1) = "A"Caso 80 a 90célula. Deslocamento (0, 1) = "B"Caso 70 a 80célula. Deslocamento (0, 1) = "C"Caso 60 a 80célula. Deslocamento (0, 1) = "D"End SelectEnd Sub

Ex 4. Selecione Caso - Datas

Este exemplo Case Select é uma função que testa em qual trimestre de uma data se enquadra.

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("20/07/2019"))End SubFunção GetQuarter (dt As Date) As IntegerDim sht como planilhaSelecione o caso dtCaso CDate ("01/01/2019") Para CDate ("31/03/2019")GetQuarter = 1Caso CDate ("04/01/2019") Para CDate ("30/06/2019")GetQuarter = 2Caso CDate ("01/07/2019") Para CDate ("30/09/2019")GetQuarter = 3Caso CDate ("01/10/2019") Para CDate ("31/12/2019")GetQuarter = 4End SelectFunção Final

Por ser uma função, você pode usá-la como uma função dentro do Excel:

Ex. 5 Verifique se o número é ímpar ou par

Este exemplo testa se um número é ímpar ou par.

123456789101112 Sub CheckOddEven ()Dim n As Integern = InputBox ("Digite um número")Selecione Caso n Mod 2Caso 0MsgBox "O número é par."Caso 1MsgBox "O número é ímpar."End SelectEnd Sub

Ex. 6 Teste se a data é dia da semana ou fim de semana

Esses exemplos testarão se uma data cai em um dia da semana ou em um fim de semana.

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt As Datedt = CDate ("01/01/2020")Selecione Caso Dia da Semana (dt)Case vbMondayMsgBox "É segunda-feira"Case vb Terça-feiraMsgBox "É terça-feira"Caso vb quarta-feiraMsgBox "É quarta-feira"Case vbTh ThursdayMsgBox "É quinta-feira"Case vbFridayMsgBox "É sexta-feira"Case vbSaturdayMsgBox "É sábado"Case vbSundayMsgBox "É domingo"End SelectEnd Sub
123456789101112 Sub CheckWeekend ()Dim dt As Datedt = CDate ("01/01/2020")Selecione Caso Dia da Semana (dt)Case vbSaturday, vbSundayMsgBox "É um fim de semana"Case ElseMsgBox "Não é um fim de semana"End SelectEnd Sub

VBA Select Case no Access

Todos os exemplos acima funcionam exatamente da mesma forma no Access VBA e no Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs as DatabaseDim primeiro como RecordSetDefinir dbs = CurrentDBDefina rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Com o primeiro.MoveFirst.EditarSelecione Case rst.Fields ("City")Case "Austin".rst.Fields ("TelCode") = "512"Case "Chicago".rst.Fields ("TelCode") = "312"Case "New YorK".rst.Fields ("TelCode") = "1212"Case "San Fransisco".rst.Fields ("TelCode") = "415"End Select.AtualizarTerminar comFim Sus
wave wave wave wave wave