作者:金人瑞 《Excel VBA175例无理论纯实战教程》学员



access vba if多条件判断 vba中if多条件判断函数_shell if多个条件判断


最近正在学习郑广学老师的VBA 175例教程,这是一篇新手向的文章,也是一个新手的总结,高手可以批评文章中的不足之处,也可以无视,VBA中的IF判断, 判断一般起到控制作用,如郑老师所说,就像一个水管中的控制阀,水来了,一个个的控制阀决定着流水的走向。而整个流程中判断也的确有着控制流程走向的作用,可以说循环,判断,数组是vba的三驾马车,绝大部分的问题都是他们仨来解决的。其中for循环和if是新手最先学到的东西,今天我就来分享一下我这个新手在安装"阀门"的时候遇到过的坑。

提到判断,首先不得不提的就是IF函数,通常情况下IF有四中写法

第一种, 开关型单句

如下图:这是一个单句, 这是我自己取得名字,为了好理解,我们给他们取个外号"限定阀",在满足某个条件时启动执行某些语句.这样写的好处是加上备注以后一目了然,一看就知道有一个"阀门",不过这是我的个人习惯,在其他情况下,建议使用下面的方法.


access vba if多条件判断 vba中if多条件判断函数_不执行_02


第二种,开关型

这还是我自己取得名字,为了好理解,我们依旧给他们取个外号,"球阀",达到某条件就执行某个操作,就像水管里面的球阀,只有开关两种情况,控制上也只能是执行和不执行的区别作用同第一种一样,只不过多了一个end if ,可以将多个满足则执行的语句包起来批量控制.


access vba if多条件判断 vba中if多条件判断函数_for循环_03


第三种,分流型

老规矩整个名字:分流控制阀,如下,可以看到if整句起到了控制流程走向的作用.


access vba if多条件判断 vba中if多条件判断函数_VBA_04


执行后如下:


access vba if多条件判断 vba中if多条件判断函数_shell if多个条件判断_05


第四种:多层控制型

如下图,这种结构足够完整,能控制不同条件的"水流"流向多个方向.在这里就不演示and和or了


access vba if多条件判断 vba中if多条件判断函数_shell if多个条件判断_06


为什么我会说他有坑呢?因为在一段程序中我们会时常遇到一个问题到底是用if包一个if,还是用if连接一个if以及判断的位置问题.

先看个例子:


access vba if多条件判断 vba中if多条件判断函数_for循环_07


access vba if多条件判断 vba中if多条件判断函数_VBA_08


这是代码和执行结果,在do/loop循环中,while i> 2 是判断条件,判定符合条件则执行.下列语句,在上述代码中I = I +1 执行以后I = 2 ,符合while >-=2,所以代码可以得到右侧结果,但是如果写成下方这样,则不执行,因为在I = i+1执行前就已经经过了while判断,此时i=1,不符合.所以无结果


access vba if多条件判断 vba中if多条件判断函数_VBA_09


由上可以得到一个结论,判断语句放置的地方一定要考究否则就会出bug,有些需要执行的语句就不执行.所以if作为常用判断语句,其放置的地方一定是要符合逻辑下面总结一下我见过的两种形式,更多复杂的样式大家可自行拓展.这里只做模型.

(1) If /end if---if/end if 连接型

一般情况下,两个判断是独立的时候才需要写两个if,


access vba if多条件判断 vba中if多条件判断函数_VBA_10


如上,我需要删除考试没写名字的考生,也要选出语文为70分以上的考生标记为黄色,那么我就需要做两个if语段,代码如下


access vba if多条件判断 vba中if多条件判断函数_access vba if多条件判断_11


结果如下:


access vba if多条件判断 vba中if多条件判断函数_access vba if多条件判断_12


这个就是典型的两个独立的if在for循环中的应用,值得注意的是这两个if在程序中是都会被执行的.但是下面这种情况就不一样了,第一个if会被执行,但是第二个就不一定了,

(2) If –if/end if – end if ,第二种,if包含if

依旧是上面的例子,在找到语文为70分以上的学生以后,我希望在语文70分以上的颜色由黄色改为红色,同时数学60分以上语文70分一下的底色改成黄色.代码如下


access vba if多条件判断 vba中if多条件判断函数_access vba if多条件判断_13


执行结果如下


access vba if多条件判断 vba中if多条件判断函数_VBA_14


我们可以通过执行结果看到判断数学大学60分这个判断其实是被语文大于70分这个判断"阉割"过的结果.这就是if包if 的模型.

总结一下:if连if,两个判断是独立的.if包if两个判断不独立,外层的if控制里层的if.第一种连接型的适用范围是需要做两个判断,且所需要执行的代码语句不一样,比如删除和上色.不同的判定条件有不同的语句执行.第二种包裹型if,适用范围是两层判断,先筛选出来的数据要再次筛选,如果判定成功需要执行的语句一样,比如都是底色上红色,那么些一个and连接语句同时满足即可,但是执行想语句不一样,则需要写成包裹型.

补充一点:学vba时间不长,所幸认识郑老师不算太晚,见过的大神多,他们的特点就是理解能力强,思路清晰,作为新手我觉得注释很重要,一来写代码的设计思路,二来写语句的作用,这些都至关重要,再一个就是建立自己的理解模型就像上面的if,代码的设计其实是有模型思维的,任何事物借助模型都可以快速的去理解,通过修改模型,引用模块,即使很复杂的代码我们也能很快的完成。

最后给大家看看郑老师的无敌IF多层程序框图


access vba if多条件判断 vba中if多条件判断函数_VBA_15