VBA Select Case


Em algumas situações, é necessário repetir diversas condições para se criar a instrução If com ElseIf.

Sub Nota()

    Dim Pontos As Integer
    Dim Nota As String

    Pontos = Inputbox("Quantos pontos obteve na prova?")

    If Pontos < 2 Then
        Nota = "E"
    ElseIf Pontos < 4 Then
        Nota = "D"
    ElseIf Pontos < 6 Then
        Nota = "C"
    ElseIf Pontos < 8 Then
        Nota = "B"
    ElseIf Pontos <= 10 Then
        Nota = "A"
    Else
        Msgbox "Inserir um valor entre 0 e 10"
    End if

    Msgbox "Sua nota foi " & Nota & "."

End Sub

Repetiu-se diversas vezes no código a variável Pontos, para criar as condições. Uma maneira de simplificar as repetições é utilizando Select Case (perceba que a variável que se deseja comparar será omitida e implicitamente replicada para todas as instruções).

Sub NotaSCase()

    Dim Pontos As Integer
    Dim Nota As String

    Pontos = Inputbox("Quantos pontos obteve na prova?")

    Select Case Pontos
        Case Is < 2: Nota = "E" 'Equivalente a ElseIf Pontos < 2 Then: Nota = "E"
        Case Is < 4: Nota = "D"
        Case Is < 6: Nota = "C"
        Case Is < 8: Nota = "B"
        Case Is <= 10: Nota = "A"

    Case Else
        Msgbox "Inserir um valor entre 0 e 10"
    End Select

    Msgbox "Sua nota foi " & Nota & "."

End Sub

Note que é possível que múltiplas condições do Case resultem em True (E.g. no caso do exemplo acima, se Pontos for igual a 7, resultará True em <8 e <=10). Neste caso o comportamento de Case será o mesmo que em múltiplos True em ElseIf.

A instrução Case Else somente será executada caso não haja valor True.

É possível especificar múltiplos casos para o mesmo Case separando-os por vírgula ou utilizando o código To para criar um intervalo.

Sub Tempo_Fila_Banco()

    Dim NFila As Integer

    NFila = Inputbox("Número de pessoas na sua frente na fila(1 a 10)")

    Select Case NFila

        Case 1 'Equivalente a ElseIf NFila = 1  Then
        MsgBox "Você é o proximo!"

        Case 2 To 5 'Equivalente a ElseIf NFila >= 2 And ElseIf NFila <= 5 Then
        MsgBox "Será atendido em breve"

        Case 6, 7, 8 'Equivalente a ElseIf NFila = 6 Or NFila = 7 Or NFila = 8 Then
        MsgBox "Tempo de espera moderado"

        Case Else
        MsgBox "Não receberá atendimento hoje"

    End Select
End Sub

Perceba que quando Case é utilizado, faz-se necessário a utilização de um operador de comparação. Caso o operador seja omitido Case (sozinho), o Excel assumirá uma comparação de igualdade.



SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.

Excel ® é uma marca registrada da Microsoft Corporation.

© 2019 SuperExcelVBA | SOBRE

Protected by Copyscape