(这只是基本的东东,本不想浪费论坛资源,但既然写了,就贴出来,或对初学者有一点参考作用) 由于VBA不会对代码进行优化,所以在对诸如 If A And B Then 时,A判断为False了,还要去判断B,再判断A And B的真假。如果程序十分注重效率时,这就要对IF语句进行优化,但优化的代价一般是代码变长及可理解性与易修改性变差。 VBA逻辑判断的优先次序是NOT>AND>OR,根据数字逻辑,把AND用*表示,把OR用+表示,把NOT用-表示,TURE用1表示,FALSE用0表示。 下面是一些公式,化简时用: (1)交换律:A+B=B+A ; A*B=B*A (2)结合律:(A+B)+C = A+(B+C) (A*B)*C = A*(B*C) (3)分配律:A*(B+C)=A*B+A*C(乘对加分配), A+(B*C)=(A+B)*(A+C)(加对乘分配) (4)吸收律:A+A*B=A A*(A+B)=A (5)0-1律:A+1 = 1 A+0 = A A*0 = 0 A*1 = A (6)互补律:-A+A = 1 -A * A = 0 (7)重叠律:A+A = A A*A=A (8)对合律:--A = A (9)反演律: -(A+B) = -A * -B -(A*B) = -A + -B *型: IF A1*A2*…*An Then 代码…… 优化为:If A1 Then If A2 Then … If An Then 代码…… End If '1个 End If '2个 … End If 'n个 +型: If A1 + A2 + … + An Then 代码…… 如果只是一般顺序执行,可以 If A1 Then 代码…… Elseif A2 Then 代码…… …… Elseif An Then 代码…… End IF 如果这个IF判断在一个循环内,而判断为真退出循环;或直接退出过程则可以: If A1 Then 代码…… Exit For(或 Exit Sub) End IF If A2 Then 代码…… Exit For(或 Exit Sub) End IF …… If An Then 代码…… Exit For(或 Exit Sub) End IF 特殊情况:因为A + B=--A + --B = -(-A * -B),得 If -A1 Then If -A2 Then … If -An Then Else 代码…… End if … Else 代码…… End if Else 代码…… End if 混合型:所有IF判断都可由*和+组成,其他情况可能由上面两种方法展开。如: If A + B * C Then 代码…… 优化:If A Then 代码…… Elseif B Then If C Then 代码…… End If End If 通常,随着判断条件的增加,代码的可读性显指数性减低,多几个混合操作,想头不晕都不行,再加上如果不满足条件时执行“代码2”,代码长度更加大,如何取一个平衡点,大家按实际情况掌握吧。 |