ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] If …… Then 条件判断语句 的科普帖

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-7-9 13:58 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:数据类型和基本语句
If …… Then 的条件判断语句很常用,但很多人并不深究……
有必要进一步阐释一下,尤其是初学者,应该抽时间看一看,以便提高代码效率,或提高代码可读性。


If …… Then 语句的语法:

横向一句表达时的语法:
If [条件] Then [条件真时处理1] Else [条件伪时处理2]

中间可以使用任意【:】连接多层语句:
If [条件] Then [真语句-1:真语句-2:真语句-3] Else [伪语句-1:伪语句-2:伪语句-3:伪语句-4]

但为了结构易读易懂,则应该这么写:
If [条件] Then
   真语句-1
   真语句-2
   真语句-3]
Else
   伪语句-1
   伪语句-2
   伪语句-3
End If

评分

7

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:05 | 显示全部楼层
If [条件] Then
   [真语句]
Else
   [伪语句]
End If

上面这样的就是完整的、标准的 If……Then 判断语句结构。

区别在于,写成横式一句时,可以不要End If

即可以是:
If [条件] Then [真语句] Else [伪语句]


…………
下面是简化结构:
If [条件] Then
   [真语句]
End If


If Not [条件] Then
   [伪语句]
End If

可以各自简化为:
If [条件] Then [真语句]

以及
If Not [条件] Then [伪语句]


前面已经说过了,可以用n-1个【:】来连接n个语句替代 [条件真时语句]或[条件伪时语句]

但如果语句较多,最好还是用多层结构,否则或许除了你本人,其它人难以读懂和理解。




TA的精华主题

TA的得分主题

发表于 2014-7-9 14:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2014-7-9 14:05
If [条件] Then
   [真语句]
Else

请问,如果要提高代码效率,应注意什么地方?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
接下来,继续介绍【条件】部分的内容。

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<正数
文本则简单说按 数字、字母(字母间按照字典顺序比较)→ 具体比较顺序暂不展开。


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:19 | 显示全部楼层
除此之外,还有很多函数可以得到Boolean值结果:

如:
IsNumeric(Num) 判断是否数字
IsDate(Date) 判断是否日期
IsError(temp) 判断是否错误值
IsArray(arr) 判断是否数组
IsEmpty(temp) 判断变量是否为空值

以及借用类似的工作表函数:
If WorksheetFunction.IsText(t) Then


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:34 | 显示全部楼层
本帖最后由 香川群子 于 2014-7-9 16:53 编辑

文字处理中常用的比较判断表达式有:

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代码编程能力的一个能力指标……


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
同样的,你还可以有:

If a+b+c+d Then

或 If a*b*c Then

或 If (a+b)*c+d Then

这样的多种用法。


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:38 | 显示全部楼层
其实,逻辑运算结果本身的True和False 就已经是=1和=0的实际效果了。

所以,逻辑值本身还可以参与进一步的计算,得到更多更复杂的综合判断结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:53 | 显示全部楼层
下面阐述多步逻辑运算的分析:


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

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-9 14:57 | 显示全部楼层
接下来,需要介绍一下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



您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 20:24 , Processed in 0.046016 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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