![680fbff15233c02e2a188a13e8e60c68.png](https://i-blog.csdnimg.cn/blog_migrate/45c8e295a130c08d385ce20990b44d55.jpeg)
哈罗,大家好,我是星光。话说程序结构有三要素:顺序、分支和循环。"顺序"咱们前面章节讲过了,"循环"下下章咱们会讲,"分支"的实现在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 If
End Sub
……
对比IF语句这两种结构形式,区别在于,单行形式代码只有一行,块形式有多行(这是一句废话?)……打个响指,认真脸,两者很重要的区别是块形式多了条 End If 语句,而且这条语句是不能省略的,不能省略的,不能省略的……重要的话说三遍,毕竟缺失End 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](https://i-blog.csdnimg.cn/blog_migrate/73f760aea367761b4e557b14bde03df2.jpeg)
……
什么是"或"关系?
"或"关系刚好和"与"关系唱反调,"与"关系认为所有的条件都成立,才算对。"或"关系不这么认为,它觉得做人要大度,有一个条件成立就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](https://i-blog.csdnimg.cn/blog_migrate/88dc1d0a48e98711c620004c14507a4d.jpeg)
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](https://i-blog.csdnimg.cn/blog_migrate/d7eade15736ed412f5169b42176032d9.jpeg)
…… 而根据条件表达式的真假结果,选择性运算的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](https://i-blog.csdnimg.cn/blog_migrate/399c7fd3f1c55c61aca450772c391911.jpeg)
![6d025a90e6335ff4d41b80bc4c11130b.png](https://i-blog.csdnimg.cn/blog_migrate/9589e01987d95a34abf9644e65ccc4e1.jpeg)
![b16ce9ed4d6e3225d81e94355961d7f8.png](https://i-blog.csdnimg.cn/blog_migrate/772e77c4949a39ce8a6ce287f3ffeaca.png)
![351f1b0fc2e2033e9fdc72972aaba55d.png](https://i-blog.csdnimg.cn/blog_migrate/85fd580842f12eea3903508c3c390ca9.jpeg)