欢迎大家来到IT世界,在知识的湖畔探索吧!
If …… Then 的条件判断语句很常用,但很多人并不深究……
有必要进一步阐释一下,尤其是初学者,应该抽时间看一看,以便提高代码效率,或提高代码可读性。
If 语句需要的【条件表达式】,是可以通过逻辑计算得到Boolean布尔值,即True(真)、False(伪)两种结果的计算表达式。
一般说基本逻辑计算有以下各种情形:
If a>b Then
If a=b Then
If a<b Then
If a>=b Then
If a<=b Then
If a<>b Then
以上a和b代表变量,可以是文字或数值。
数值比较大小按照 负数<0<正数
文本则简单说按 数字、字母(字母间按照字典顺序比较)→ 具体比较顺序暂不展开。
除此之外,还有很多函数可以得到Boolean值结果:
如:
IsNumeric(Num) 判断是否数字
IsDate(Date) 判断是否日期
IsError(temp) 判断是否错误值
IsArray(arr) 判断是否数组
IsEmpty(temp) 判断变量是否为空值
以及借用类似的工作表函数:
If WorksheetFunction.IsText(t) Then
文字处理中常用的比较判断表达式有:
If t=”” Then 变量为空白字符串
或 If Len(t)=0 Then
与之相反的是:
If t<>”” Then 变量不为空白字符串时
以及 If Len(t)>0 Then
或 If Len(t) Then
请注意上面语句 If Len(t) Then
这样的表达式并不含有 逻辑运算符,却仍能得到True 或 False的布尔值结果,这到底是怎么回事呢?
答:
因为微软工程师引入了直接把数值用作比较判断结果的隐形处理方法:
1. 如果表达式计算结果是数值 0 则视作满足 条件=False
2. 如果表达式计算结果不是数值 0 而是任意其它数值,则视作满足 条件=True
因此,如果Len(Txt)=0 将视作False
即 If Len(Txt) Then 在Txt=””空字符串时, 因为Len(Txt)计算结果=0 而满足 条件=False了
而如果Len(Txt)>0 将视作True
即 If Len(Txt) Then 在Txt=”tmp”非空字符串时, 因为Len(Txt)计算结果=3 而满足 条件=True了
所以,可以用 If Len(txt) Then 来得到 If Len(txt)>0 Then 的同样结果,
以及用 If Not Len(txt) Then 来得到 If Len(txt)=0 Then 的同样结果,
…………
同理,任何产生数值计算结果的表达式,都可以直接用作If 判断条件!!!
这具有非凡的意义!
可以大大简化代码,把很多计算结果直接用作判断用条件。
比如:
If a-3 Then
实际上可以看做是 If a=3 Then False Else True 的用法。
好处是:
如果你前面有一个计算
t=a-3 (当然可以是更复杂的计算式,只要最后结果是数值即可)
然后运行一段代码以后,出现If t Then 就是顺理成章且毫不费力的 If判断语句了。
呵呵。
是否能在自己的代码中熟练运用数值变量结果替代条件判断表达式,
应该也是VBA代码编程能力的一个能力指标……
下面阐述多步逻辑运算的分析:
If a Or b Then
这里的 a 和 b 我们把它们当做是一个单独的逻辑运算结果,其值=1或0(对应True或False)
在这里,事实上Or是相当于两个逻辑值的 + 运算,
因此有:
a=1 b=1 → a Or b = 2 = True (前面已经说过,非零数值的条件判断结果=True)
a=1 b=0 → a Or b = 1 = True (前面已经说过,非零数值的条件判断结果=True)
a=0 b=1 → a Or b = 1 = True (前面已经说过,非零数值的条件判断结果=True)
a=0 b=0 → a Or b = 0 = False (前面已经说过,零数值的条件判断结果=False)
另外,还有And运算,事实上And是相当于两个逻辑值的 * 运算,
因此有:
a=1 b=1 → a And b = 1 = True (前面已经说过,非零数值的条件判断结果=True)
a=1 b=0 → a And b = 0 = False (前面已经说过,零数值的条件判断结果=False)
a=0 b=1 → a And b = 0 = False (前面已经说过,零数值的条件判断结果=False)
a=0 b=0 → a And b = 0 = False (前面已经说过,零数值的条件判断结果=False)
由于在一般四则混合运算中,*运算的优先级要大于+运算,
所以,在逻辑运算中,And 运算的优先级也要大于Or运算。
举例:
If a And b Or c Then 相当于 If a*b+c Then 所以只要c满足或 a和b同时满足 就是True
If a Or b And c Then 相当于 If a+b*c Then 所以只要a满足或 b和c同时满足 就是True
上面的两个逻辑关系,也可以加上括号,写成:
If a And b Or c Then 相当于 If (a And b) Or c Then 所以只要c满足或 a和b同时满足 就是True
If a Or b And c Then 相当于 If a Or (b And c) Then 所以只要a满足或 b和c同时满足 就是True
接下来,需要介绍一下VBA中,If结构中And Or 运算关系的分解或称等效处理:
If a Or b Then Do1
可以等效于:
If a Then
Do1
Else
If b Then
Do1
End If
End If
等效于横式语句的:
If a Then Do1 Else If b Then Do1
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/13784.html