0026-Testando múltiplas condições em código VBA (Select Case)

Muitas vezes temos que testar inúmeras possibilidades para uma variável durante a execução de um código em VBA.
Normalmente pensamos em construir uma estrutura do tipo If…Then…Else.
Se o conjunto de possibilidades for relativamente pequena, a abordagem acima é de fácil implantação e interpretação, mas à medida que aumentam os testes, a estrutura tende a ficar mais complexa.
Tomemos o seguinte exemplo: Construir uma função que estabeleça o status do fornecedor com base na nota obtida numa auditoria de qualidade, com base nos seguintes critérios:
– Se a nota for menor que 30, o fornecedor deve ser “desqualificado”
– Se a nota estiver entre 30 e 40, “situação crítica”
– Se a nota estiver entre 40 e 50, “estado de alerta”
– Se a nota estiver entre 50 e 60, “sob monitoramento”
– Se a nota estiver entre 60 e 70, “aceitável”
– Se a nota estiver entre 70 e 80, “bom”
– Se a nota estiver entre 80 e 90, “muito excelente”
– Se a for superior a 90, “excelente”.

Vejamos como ficaria o código, utilizando a estrutura If Then ElseIf.

Function StatusNotaV1(nota)
    If nota < 30 Then
    StatusNotaV1 = "desqualificado"
    ElseIf nota < 40 Then
    StatusNotaV1 = "situação crítica"
    ElseIf nota < 50 Then
    StatusNotaV1 = "estado de alerta"
    ElseIf nota < 60 Then
    StatusNotaV1 = "sob monitoramento"
    ElseIf nota < 70 Then
    StatusNotaV1 = "aceitável"
    ElseIf nota < 80 Then
    StatusNotaV1 = "bom"
    ElseIf nota < 90 Then
    StatusNotaV1 = "muito bom"
    Else
    StatusNotaV1 = "excelente"
    End If
End Function
O código acima é completamente funcional, mas meio poluído.
Vejamos como fica o mesmo código, utilizando o comando Select Case
Function StatusNotaV2(nota)
    Select Case nota
    Case Is < 30
    StatusNotaV2 = "desqualificado"
    Case Is < 40
    StatusNotaV2 = "situação crítica"
    Case Is < 50
    StatusNotaV2 = "estado de alerta"
    Case Is < 60
    StatusNotaV2 = "sob monitoramento"
    Case Is < 70
    StatusNotaV2 = "aceitável"
    Case Is < 80
    StatusNotaV2 = "bom"
    Case Is < 90
    StatusNotaV2 = "muito bom"
    Case Else
    StatusNotaV2 = "excelente"
    End Select
End Function
O resultado final é um código mais clean e fácil de interpretar.

In Excel We Trust

Marcado com:
Publicado em Nível: Avançado
5 comentários em “0026-Testando múltiplas condições em código VBA (Select Case)
  1. Leandro Cadete da Silva disse:

    Agora aprendi a usar select case.
    Obrigado pelo artigo

  2. valdir disse:

    Po seu exemplo foi prático e rápido.
    Mandou mto bem.
    Parabéns!

  3. Alan disse:

    Gostaria de colocar na mesma função outra variavel, como por exemplo:

    idade fraco bom muito bom
    7 anos 0 a 164 165 a 200 201 a 270
    8 anos 0 a 180 181 a 250 251 a 300
    9 anos 0 a 200 201 a 270 271 a 320

    detalhe: temos ainda os valores para masculino e feminino, mas por enquanto se resolver assim ja esta bom. a principio pensei em misturar os codigos if, elseif, e case mas nao esta dando certo.

    Function PROESP_FORÇAMMSS_MASC(IDADE, RESULTADO)

    IF IDADE = 7 THEN

    Select Case RESULTADO
    Case 0 To 164
    PROESP_FORÇAMMSS_MASC = “FRACO”

    Case 165 To 200
    PROESP_FORÇAMMSS_MASC = “BOM”

    Case 201 To 270
    PROESP_FORÇAMMSS_MASC = “MUITO BOM”

    ELSEIF IDADE = 8 THEN

    Select Case RESULTADO
    Case 0 To 180
    PROESP_FORÇAMMSS_MASC = “FRACO”

    Case 181 To 250
    PROESP_FORÇAMMSS_MASC = “BOM”

    Case 251 To 300
    PROESP_FORÇAMMSS_MASC = “MUITO BOM”

    END IF

    End Select

    End Function

    NAO ESTA DANDO CERTO

  4. Wellington disse:

    Excelente explicação. Parabéns!

  5. Proms disse:

    Olá! sou novo aqui e preciso de uma ajuda!
    preciso usar o case para me chamar uma macro sempre que o valor de uma celula for alterada.
    ex: tenho: “A1:C1” preciso que no intervalo destas celulas ao ser altearado algum valor executa uma macro que eu especificar, seja se eu alterar a celula A1, executa uma macro, e se altear valor da celula B1 ou C1 executa uma macro que eu especificar. alguem me ajuda ai??? agradeço…

Deixe uma resposta

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
  • 1,969,548

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

Junte-se a 1.477 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: