IF ELSE vs Select Case

时间:2015-06-11 04:12:04

标签: excel excel-vba select if-statement case vba

我想知道在处理大量数据时这会对我的编码产生什么影响,以及如何构建我的逻辑参数

两个问题:

1)IF-ELSE和Select CASE之间的主要区别是什么?选择案例是否通过同时评估所有案例来运作?

如果我的情况是,由于其构造的性质,需要同时满足两个或更多个案例,例如

int = 5
Select case int
Case >0
Case 5
Case <0

我需要“触发”案例“1”和“2”以便采取行动,我是否使用CASE而不是IF ELSE?

2)现在对于另一种情况,如果我有一个变量会触发更多的一个案例,但我想限制只有一个案例优先,说我只想案例“1”来行动并排除其余的我是否正确地说IF-ELSE会在这方面取得胜利?

编辑 - 我意识到我的问题措辞很差。我对代码进行了一些编辑

2 个答案:

答案 0 :(得分:4)

在实际回答您的问题之前对lifting做了一些澄清:

  • 根据您的建议,您可以在VBA中的一个adhoc_overloading开关中组合多个值,例如:Select Case,有关详细信息,请参阅documentation on MSDN
  • 它最多会执行一个Case,它会在找到匹配后退出(例如在示例中执行Case Is>40, 20, 10, 2 To 3然后退出而不评估Case
  • 它只会评估你的变量/表达式一次并使用相同的值进行所有比较,而不是嵌套,如果评估多次,
  • 如果你想为一个值执行“both”,你可以在{0}内嵌套Case >0

    Case 5

if

的优点
  • 当您决定单个变体/表达式的多个值
  • 时效率更高
  • 当你的表达是例如,它也非常有用。耗时功能的结果,在这种情况下,与Case Is > 0 <Common code> If i = 5 Then <code only for case 5> End If
  • 相比,您真的可以节省时间

Select Case

的优点
  • 基本上,在if没有描述的所有情况下,这是一个很好的选择,例如:
    • 您有只有两个选项可供选择(同时适用于IfSelect Case,但if更易于阅读)
    • 您在决策过程中需要考虑多个表达式,并且
  • select类似,你也可以使用elseif来准备多个比较,它也会在第一个完全填充的标准时停止,但是这里你的表达式每次都会被评估,直到找到匹配为止你可以使用更复杂的标准。

答案 1 :(得分:0)

If-Else和Switch语句在不同情况下都很好。

例如,If-Else具有如下逻辑条件:

if (n < 5 && a > 5) { } // && is a logical AND

和嵌套结构,如

if (n < 5) {
   if (n < 0)
   {
   }
   else
   { 
   }
} else { }

您无法在switch语句中执行此操作。

然而,在某些情况下,开关更好,更优雅,更快:

switch (a)
{
    case 1:
    case 2:
    case 3:
        // ...
        break;
    case 4:
        break; 
    case 5:
        break;
    case 6:
        break;
    case 10:
        break;    
    default:
        break;
}

在if-else格式中看起来很糟糕:

if (a == 1 || a == 2 || a == 3)
{
} 
else
    if (a == 4)
    {
    } 
    else 
        // ...

我不确定你的情况,但在大多数语言中switch声明更有效。

简单地说,每次可能使用switch语句,并且有两种以上的情况。如果只有两种情况或者无法使用开关 - 请使用if