0167-Dica VBA: Instrução Select Case

A instrução Select Case permite que testemos inúmeras condições de uma expressão.

Para entendermos como funciona, vamos começar com um caso simples, verificando se o valor de uma célula é positivo ou negativo:

Sub VariasCondições()

vlTeste = ActiveSheet.[A1]

Select Case vlTeste
    Case Is < 0: Resp = "Negativo"     
    Case Is > 0: Resp = "Positivo"
End Select

MsgBox "O valor em A1 é " & Resp

End Sub

Dissecando o código:

  • O primeiro passo é atribuir à variável vlTeste o conteúdo da célula A1 da planilha ativa (vlTeste = ActiveSheet.[A1]);
  • A instrução começa com a definição da variável a ser testada (Select Case vlTeste);
  • Em seguida, verificamos se o valor é negativo, e se for, atribuímos à variável Resp o valor “Negativo” (Case Is < 0: Resp = “Negativo”);
  • O próximo passo é o que fazer se o valor for negativo (Case Is > 0: Resp = “Positivo”);
  • A instrução deve ser concluída informando o seu fim (End Select);
  • O último passo é exibir uma mensagem informando o resultado obtido (MsgBox “O valor em A1 é ” & Resp).

O exemplo acima é bem simples e poderia facilmente ser realizado utilizando uma instrução If…Then…Else, mas serve como ponto de partida.

Se observarmos atentamente, veremos que não foi testada a condição do valor em A1 ser zero.
Vamos editar o código adicionando a linha Case Else: Resp = “Zero”. Ou seja, se o número não for positivo nem negativo, só poderá ser zero.

Sub VariasCondições()

vlTeste = ActiveSheet.[A1]

Select Case vlTeste
    Case Is < 0: Resp = "Negativo"     
    Case Is > 0: Resp = "Positivo"
    Case Else:   Resp = "Zero" 
End Select 
MsgBox "O valor em A1 é " & Resp 
End Sub

Agora testamos todas as possibilidades para um valor numérico. Mas se em A1 tivermos um texto, por exemplo?
Se executarmos o código acima, veremos que o resultado exibido será “O valor em A1 é Positivo“, o que obviamente não estará correto do ponto de vista do usuário.
Para contornarmos esta questão, vamos fazer algumas mudanças no código, como veremos a seguir:

Sub VariasCondições()

vlTeste = ActiveSheet.[A1]
Tipo = IsNumeric(vlTeste)

Select Case Tipo
Case True
    Select Case vlTeste
        Case Is < 0: Resp = "Negativo"     
        Case Is > 0: Resp = "Positivo"
        Case Else:   Resp = "é Zero"
    End Select
Case Else: Resp = "é não numérico"
End Select
MsgBox "O valor em A1 " & Resp

End Sub

Observem que criamos uma variável (Tipo) para testar se o conteúdo de A1 é numérico. Em seguida aninhamos duas instruções Select Case para cobrir as situações possíveis.

Podemos ir além. Um valor não numérico pode ser um Erro, um valor lógico ou uma cadeia de texto. A célula poderá conter uma data ou estar vazia.

Para abranger todas essas situações, vamos revisar mais uma vez o nosso código:

Sub VariasCondições()

vlTeste = ActiveSheet.[A1]
Tipo = TypeName(vlTeste)

Select Case Tipo
Case "Empty":   Resp = "é vazio"
Case "String":  Resp = "é texto"
Case "Boolean": Resp = "é lógico"
Case "Date":    Resp = "é uma data"
Case "Error":   Resp = "é um erro"
Case Else
    Select Case vlTeste
        Case Is < 0: Resp = "Negativo"     
        Case Is > 0: Resp = "Positivo"
        Case Else:   Resp = "é Zero"
    End Select
End Select
MsgBox "O valor em A1 " & Resp

End Sub

Observem que modificamos a variável Tipo, utilizando a função TypeName. Esta função retorna um String (cadeia de texto) com o tipo de variável testada.
Em seguida fizemos o nosso Select Case testando as possibilidades de TypeName que representam valores não numéricos para só depois testarmos se o valor é positivo, negativo ou nulo.

A instrução Select Case, nos permite definir uma mesma ação para uma série de valores, como podemos ver na versão a seguir:

Sub VariasCondições()

vlTeste = ActiveSheet.[A1]
Tipo = TypeName(vlTeste)

Select Case Tipo
Case "Empty", "String", "Boolean", "Date", "Error"
Resp = "é não numérico"
Case "Date"
Resp = "é uma data"
Case Else
    Select Case vlTeste
        Case Is < 0: Resp = "Negativo"     
        Case Is > 0: Resp = "Positivo"
        Case Else:   Resp = "é Zero"
    End Select
End Select
MsgBox "O valor em A1 " & Resp

End Sub

Neste caso para os valores “Empty”, “String”, “Boolean”, “Date” ou “Error” será exibida a mensagem de valor não numérico.

Essa instrução permite um grande flexibilidade de uso de forma a definir inúmeras ações com base em testes simples, sendo mais uma ferramenta importante para criação de nossos códigos VBA.

Abraços!

Anúncios

In Excel We Trust

Marcado com: , , , , ,
Publicado em Nível: Avançado
Um comentário em “0167-Dica VBA: Instrução Select Case
  1. Juliano César Olympio de Oliveira disse:

    Show … Muito show…

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Visitas dos usuários
  • 2,069,536

Clique para assinar este blog e receber notificações de novos artigos por email.

Junte-se a 1.534 outros seguidores

Aumente sua interação

Siga-nos do twitter (@usuariosdoexcel).

Acesse o nosso fórum e compartilhe as suas dúvidas.

Curta nossa página no Facebook.

Junte-se ao grupo do LinkedIn.

Visite-nos utilizando o seu smartphone ou tablet.

Recomende este Blog
Visualizar notícias
Site monitorado:
Real Time Web Analytics

Clicky

%d blogueiros gostam disto: