vba 不等于_零基础学VBA编程第11课:什么是IF分支语句?

680fbff15233c02e2a188a13e8e60c68.png 每天一篇Excel技术图文 微信公众号:Excel星球 NO.105-什么是IF分支语句 作者:看见星光  微博:EXCELers / 知识星球:Excel

哈罗,大家好,我是星光。话说程序结构有三要素:顺序、分支和循环。"顺序"咱们前面章节讲过了,"循环"下下章咱们会讲,"分支"的实现在VBA中主要依靠IF语句……是的,今天就来给大家详细聊下IF,聊下它的基本概念、"与"和"或"关系的实现、同IIF函数的区别、小细节处理等等。

1 基础语法 在VBA中IF语句有两种结构形式,一种是单行形式,一种是"块"形式。
先说单行形式。语法如下:
If 条件表达式 Then 真结果 [Else 假结果]

翻译成汉语就是: 如果 条件表达式 那么 条件成立的结果 [ 否则 条件不成立的结果]
中括号[]包起来的Else部分是可以省略的。
我举个例子。
Sub test1()    Dim strTemp As String    If 2 > 1 Then strTemp = "我爱你" Else strTemp = "我不爱你"    MsgBox strTemp    If Range("A1") = "VBA" Then MsgBox "我爱VBA"    If VBA.IsNumeric(996) Then MsgBox "恭喜发财,红包拿来!"End Sub
第3行代码使用If语句判断2是否大于1(2>1),如果表达式成立,则赋值变量strTemp为字符串 我爱你 ,否则赋值变量为字符串 我不爱你 ——脸红一下。
第5行代码使用If语句判断当前工作表A1单元格的值是否等于"VBA",如果条件成立,则弹出对话框显示内容"我爱VBA"。 很明显,这句代码省略了Else部分 ,意思是当条件不成立时,忽略不管,继续运行下一行代码。
第6行代码使用If语句判断996是不是数值,如果为真,则弹出对话框显示内容"恭喜发财,红包拿来!"。
……
然后再说下块形式。 语法结构如下。
If 条件表达式 Then    [表达式成立时执行的结果][Else    表达式不成立时执行的结果]End If
还是举个例子。
Sub test2()    If 2 > 1 Then        MsgBox "我爱你"    Else        MsgBox "我不爱你"    End IfEnd Sub
以上代码判断2是否大于1,如果条件成立,弹窗显示内容"我爱你",否则弹窗显示内容"我不爱你"。
同样,从语法上来说Else部分也是可以省略的。
Sub test3()    If 2 > 1 Then        MsgBox "我爱你"    End IfEnd Sub
…… 对比IF语句这两种结构形式,区别在于,单行形式代码只有一行,块形式有多行(这是一句废话?)……
打个响指,认真脸,两者很重要的区别是块形式多了条 End If 语句,而且这条语句是不能省略的,不能省略的,不能省略的……重要的话说三遍,毕竟缺失End If语句是新手最容易犯的错误之一。

bb1688faafb0255043db4b4a76ed330a.png

2 多层关系判断 在实际If语句使用过程中,我们更普遍使用块形式的If语句,这是由于相比于单行形式,块形式更加灵活,能够容纳更多的表达式,代码结构更加清晰,更有利于代码的编写和阅读(潜台词:如果你觉得记两种形式比较麻烦,可以暂时忘记单行形式)。
举个例子。
大朋友们小朋友们都知道,学生成绩大于等于60分及格,大于等于80分良好……如果按照这个规则,使用If语句判断A1单元格成绩的评级结果,代码如下所示。
Sub test4()    Dim 得分 As Double    If 得分 >= 80 Then        MsgBox "良好"    ElseIf 得分 >= 60 Then        MsgBox "及格"    Else        MsgBox "不及格"    End IfEnd Sub

第5行代码使用ElseIf...Then语句判断得分是否大于等于60分。
在IF语句中,我们可以使用任意多个ElseIf语句增加判断的条件。
完整语法结构如下。
If 条件表达式 Then    [表达式成立时执行的结果][ElseIf 条件表达式 Then    ElseIf 表达式成立时执行的结果][Else    所有条件都不满足时执行的结果]End If

中括号部分都是可以省略的。 看个广告放松一下
毕竟没有广告的公众号推文是不真诚的..▼ 3 "与"和"或"关系判断 什么是"与"关系?"与"关系在Excel中又被称为"并且"关系,意思是多个条件同时全部成立,结果方才为真。
比如说,你的电脑有三个盘,分别是C盘、D盘和G盘。现在杀毒,C盘没有毒,D盘没有毒,G盘也没有毒,三个的条件都成立,OK,我们可以得出结论你的电脑没中毒,你是个老实人。但倘若其中任意一个盘有毒,那你就不能说自己电脑没中毒了,看我小眼神,对不对? 29ae63c176530af65b63ccb820da0d04.png           这就是一种典型的"与"关系问题。
……
什么是"或"关系?
"或"关系刚好和"与"关系唱反调,"与"关系认为所有的条件都成立,才算对。"或"关系不这么认为,它觉得做人要大度,有一个条件成立就OK了,只有所有条件都不成立时,才算错。
如果"与"和"或"去谈恋爱,他们的爱情观大概是这样的。"与"觉得爱情像眼睛,容不下一粒沙子,有一粒沙子咱们就拜拜吧。"或"觉得爱情像沙子,抓的越紧,漏的越多,所以能抓住一个条件就行了——说实话,你喜欢?什么样的人——你又是什么样的人?
……
在VBA中,"与"关系使用逻辑运算符And表示。语法结构如下(注意和工作表函数AND的区别)And语法..▼
表达式1 And 表达式2 [And 表达式3……]
示例代码..▼
Sub test5()    If 2 > 1 And 3 > 2 Then        MsgBox "第一次,你说的对。" '两个表达式都成立,结果返回True    Else        MsgBox "第一次,你说的不对。"    End If    '----------------------    If 2 > 1 And 3 > 4 Then        MsgBox "第二次,你说的对。"    Else        MsgBox "第二次,你说的不对。" '两个表达式没有都成立,结果返回False    End IfEnd Sub

"或"关系使用逻辑运算符Or表示,语法结构如下。 OR语法..▼
表达式1 Or 表达式2
示例代码..▼
Sub test6()    If 2 > 1 Or 3 > 4 Then        MsgBox "第一次,你说的对。" '两个表达式至少一个成立,结果返回True    Else        MsgBox "第一次,你说的不对。"    End If    '----------------------    If 2 > 3 And 3 > 4 Then        MsgBox "第二次,你说的对。"    Else        MsgBox "第二次,你说的不对。" '两个表达式都没有成立,结果返回False    End IfEnd Sub
4 细节与效率

……
先说一声:如果你是初学者,这节内容了解就好,看过就算了。

……
上一节咱们讲了,"与"关系使用逻辑运算符And。
但从效率来讲,这并不是最优选择。这是由于And语句是将每个条件表达式均计算出结果后,才能得出最终的结果。
举个例子。

Sub test7()    If 2 > 1 And 3 > 2 And 4 > 3 Then        MsgBox "你说的对。"    End IfEnd Sub

第2行代码使用了And运算符计算"与"关系,它需要将2>1、3>2、4>3三个表达式均计算完成后,才得出最终真或假的结果。
Sub test8()    If 2 > 1 Then        If 3 > 2 Then            If 4 > 3 Then                MsgBox "你说的对。"            End If        End If    End IfEnd Sub


上述代码使用了嵌套IF语句,同样表达了3个条件的"与"关系,先判断是否符合条件1,条件1成立的情况下,再判断是否符合条件2,条件2成立的情况下,再判断条件3,如果条件3成立,则返回一个结果……
这就建立了一个具有层次的筛选机制,这样做有什么好处呢?——大大减少了筛选的次数啊。本来你不管三七二十一,啥情况都需要一次筛选三个表达式,现在呢?假设表达式1未成立,你就不用再筛选另外两个表达式了不是?
因此使用这种方式也可以实现"与"关系的条件判断,且效率更高。不过需要说明两个细节,一个是您应该根据条件成立的占比情况,安排先后判断层次;另外一个是需要注意End If语句的配套,避免出现"块 If 没有 End If"的情况。
同样的道理,"或"关系可以使用多层ElseIf语句来实现。Or语句..▼

Sub test9()    If 2 > 1 Or 3 < 2 Or 4 < 3 Then        MsgBox "你说的对。"    End IfEnd Sub
使用多层ElseIf语句代替..▼
Sub test10()    If 2 > 1 Then        MsgBox "你说的对。"    ElseIf 3 < 2 Then        MsgBox "你说的对。"    ElseIf 4 < 3 Then        MsgBox "你说的对。"    End IfEnd Sub

当你敲代码熟练了,对逻辑表达式的真假思维习以为常了,你老婆让你出门买10个包子看见卖西瓜的就买2个,你会板着脸反复确认到底买几个包子——的时候,上述代码可以使用以下代码代替,以避免相同语句或过程反复编写造成代码冗余的问题。
Sub test11()    Dim b As Boolean    b = False    If 2 > 1 Then        b = True    ElseIf 3 < 2 Then        b = True    ElseIf 4 < 3 Then        b = True    End If    If b Then '判断上述3个条件是否有任何一个成立        MsgBox "你说的对"    Else        MsgBox "你说的不对。"    End IfEnd Sub

…… 5 IIF函数


在VBA有一个类似工作表函数IF的函数,叫做IIF,也可以起到条件判断的作用。语法格式如下。

IIF(条件表达式,真结果,假结果)
第1参数是条件表达式,当表达式为True时,返回第2参数的值,为False时返回第3参数的值,既不是True也不是False时,系统会提示"类型不匹配"。 7680cce211e67d2d50cd4530d3e03aa5.png 三个参数均是必选的,不能省略。另外,不管第1参数返回的结果是True还是False,系统都会对第2和第3参数执行运算(当然,未必显示运算结果),所以这个函数既不是效率最优,也不是运算最稳定,只是胜在代码简洁。 举个例子。
Sub test12()    Dim s As Variant    s = IIf(2 > 1, "你说的对", 3 / 0)    MsgBox sEnd Sub

第3行代码使用IIf函数判断2是否大于1(2>1),条件成立返回字符串"你说的对",否则返回3/0。

代码运行后系统会弹出以下警告信息。

9a6af6880f4c5c2f898a8f46e663bfdb.png 这是由于不管2>1的结果是否为True,系统都会运算IIF的第3参数3/0,进而触发除数不能为零的错误。
…… 而根据条件表达式的真假结果,选择性运算的IF语句则没有这方面的困扰——因此通常更推荐大家使用If语句,而不是IIF函数。
Sub test13()    Dim s As Variant    If 2 > 1 Then        s = "你说的对。"    Else        s = 3 / 0    End If    MsgBox sEnd Sub
……
今天就聊到这, 没了,下期再贱。 文件下载百度网盘..▼ https://pan.baidu.com/s/1b8Ns6xxafh-BdpOZ1-di_g
提取码: ee4i ▎全方位系统学习Excel
推荐加入我的Excel社群 ▎
  点击图片可获取相关推文..▼ 4cc48be68961e161c289880002864138.png 扩展阅读 6d025a90e6335ff4d41b80bc4c11130b.png b16ce9ed4d6e3225d81e94355961d7f8.png 351f1b0fc2e2033e9fdc72972aaba55d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值