IF ELSE 与选择案例

lac*_*daz 5 excel select vba if-statement case

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

两个问题:

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

如果我有一种情况,根据其构造的性质,需要同时满足两个或多个案例,例如

int = 5
Select case int
Case >0
Case 5
Case <0
Run Code Online (Sandbox Code Playgroud)

在我需要“触发”案例“1”和“2”以进行操作的地方,我是否使用 CASE 而不是 IF ELSE?

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

编辑 - 我意识到我的问题措辞不当。我对代码做了一些编辑

Mát*_*ász 5

Select Case在实际回答您的问题之前进行一些澄清:

  • 正如您所建议的,您可以Case在 VBA中的一个开关中组合多个值,例如:Case Is>40, 20, 10, 2 To 3,有关更多信息,请参阅MSDN 上的文档
  • 它最多执行一次Case,找到匹配后退出(例如,在示例中执行Case >0然后退出甚至不评估Case 5
  • 它只会评估您的变量/表达式一次,并使用相同的值进行所有比较,而不是嵌套 if 多次评估
  • 如果你想对一个值执行“both”,你可以if在 case 中嵌套:

    Case Is > 0
        <Common code>
        If i = 5 Then
            <code only for  case 5>
        End If
    
    Run Code Online (Sandbox Code Playgroud)

的优势 Select Case

  • 当您的决定涉及单个变体/表达式的多个值时,效率会更高
  • 当您的表达式是例如耗时函数的结果时,它也非常有用,在这种情况下,与相比,您确实可以节省时间 if

的优势 If

  • 基本上,在所有未描述的情况下,它都是不错的选择, Select Case例如:
    • 只有两个选项可供选择(if和 和是同一时间select,但if更容易阅读)
    • 您在决策过程中需要考虑多个表达式,并且无法轻松它们转换为单个值
  • Select Case您类似,您也可以使用elseif来准备多重比较,它也会在第一个满足条件时停止,但在这里您的表达式每次都会被评估,直到找到匹配项,当然您可以使用更复杂的条件。


Yel*_*yev 0

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

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

if (n < 5 && a > 5) { } // && is a logical AND
Run Code Online (Sandbox Code Playgroud)

和嵌套结构,例如

if (n < 5) {
   if (n < 0)
   {
   }
   else
   { 
   }
} else { }
Run Code Online (Sandbox Code Playgroud)

您不能在 switch 语句中执行此操作。

然而,在某些情况下 switch 更好、更优雅、更快:

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

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

if (a == 1 || a == 2 || a == 3)
{
} 
else
    if (a == 4)
    {
    } 
    else 
        // ...
Run Code Online (Sandbox Code Playgroud)

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

简单的说,只要有可能就使用switch语句,而且不止两种情况。如果只有两种情况或者无法使用switch-use if