哪一种最适合使用:嵌套if语句或带有多个';和';VBA中的条件?

哪一种最适合使用:嵌套if语句或带有多个';和';VBA中的条件?,vba,excel,if-statement,Vba,Excel,If Statement,我正在用VBA为MS Excel编写宏。在子例程中,我有一组要执行的特定任务需要满足的条件。从运行时间和内存的角度来看,以下哪种方法是最佳的 方法1: If condition_1 then If condition_2 then If condition_3 then .... End If End If End If 或 方法2: If condition_1 And condition_2 And ..... then .... End If

我正在用VBA为MS Excel编写宏。在子例程中,我有一组要执行的特定任务需要满足的条件。从运行时间和内存的角度来看,以下哪种方法是最佳的

方法1:

If condition_1 then
  If condition_2 then
     If condition_3 then
       ....
     End If
  End If
End If

方法2:

If condition_1 And condition_2 And ..... then
  ....
End If

如果我有一个Else语句用于任何条件,我必须使用方法1来实现它。但我没有任何条件的Else语句,因此两种方法在完成任务时处于同等的水平。我只是想知道,在运行时和内存方面,哪种方法更好?

即使您没有
语句,您的第一种方法仍然是更好的方法

后一个将评估每个
条件X
,而第一个将在其中一个条件失败时跳过进一步的检查

你可以自己测试

Sub Main()
    If Check1 And Check2 Then
    End If
End Sub

Function Check1()
    Debug.Print "exec Check1"
    Check1 = False
End Function

Function Check2()
    Debug.Print "exec Check2"
    Check2 = True
End Function

您应该看到,即使
Check1
返回false,
Check2
仍在计算中。。。。这证明了这一点。

1号更好。VBA不支持短路。()@vba4谢谢你的帮助。即使我在代码中将条件明确定义为
boolean
变量,它也会短路吗?VBA中没有短路:)@Sathish无所谓-它将始终检查每个表达式。因此,方法1肯定是更好的解决方案,同样关于空检查等。使用and方法,vba会计算每个条件,因此速度较慢,但通常您甚至看不到任何差异(取决于条件)。另外,考虑方法选择案例…谢谢。这就解决了我的问题。但是,当其中一个条件为
False
时,第二个方法是否也会退出?我假设在第二种方法中,程序内部遵循方法1。是真的吗?那是假的。它的工作原理类似于评估每个条件的
IIF()
。在抽象情况下,将三年中的一个随机日期与
Year()
Month()
day()
进行比较,您应该首先检查
day()
,因为评估次要条件的几率只有1/30。然后对于
Month()
来说,当三者匹配时,只有1/12的机会评估最终状况(
Year()
1/3)。