ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3417|回复: 9

[分享] IF判断的提速

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-9-23 21:32 | 显示全部楼层 |阅读模式

(这只是基本的东东,本不想浪费论坛资源,但既然写了,就贴出来,或对初学者有一点参考作用)

由于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”,代码长度更加大,如何取一个平衡点,大家按实际情况掌握吧。

TA的精华主题

TA的得分主题

发表于 2006-9-23 21:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-9-23 23:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢。

TA的精华主题

TA的得分主题

发表于 2006-9-23 23:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-9-23 23:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
很有深度,鱼与熊掌不可兼得

TA的精华主题

TA的得分主题

发表于 2006-9-24 00:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-9-25 22:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主有心了

TA的精华主题

TA的得分主题

发表于 2006-9-25 22:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-8-23 16:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢楼主分享

TA的精华主题

TA的得分主题

发表于 2018-7-18 10:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 02:49 , Processed in 0.025536 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表