哪一种最适合使用:嵌套if语句或带有多个';和';VBA中的条件?
我正在用VBA为MS Excel编写宏。在子例程中,我有一组要执行的特定任务需要满足的条件。从运行时间和内存的角度来看,以下哪种方法是最佳的 方法1:哪一种最适合使用:嵌套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
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)。