本文转载自公众号:四零三工作室,原创作者:怪盗福尔摩斯,本文著作权归原创作者所有,本人收藏此文仅作为学习之用,不作其他目的,如有侵权,请联系我删除。
正常来说,满足有变量,有运算和有控制就算是一门编程语言了。前面我们已经跟大家讲了变量与运算,今天就跟大家讲一下最后的控制吧。控制是由语句构成的,下面就结合实际案例来跟大家讲一下VBA的基本语句。
1. If…Then…Else语句
If…Then…Else语句其实和EXCEL的if函数作用是一样的,如果符合条件就执行语句,否则执行另一语句,举例如下:
执行结果如下:
2. ElseIf
ElseIf是针对更多判断使用的,举例如下:
执行结果:
3. Select Case语句
前面讲的If语句虽然可以解决多次判断的问题,但是当面对三次或者更多策略中做出选择时,使用Select Case语句更加合适,下面以一个案例来给大家进行讲解。
你的老板让你做单位的职工考核得分表:
你要根据下面的考核得分给职工评定星级:
(公众号后台回复“员工数据”可以得到表格)
用Select Case语句可以这样实现:
Select Case后面跟的是测试表达式,它是程序要进行判断和比较的值;Case后面跟的是表达式列表,是用来和测试表达式进行比较的值,可以是To或Is的关键字,也可以是用英文逗号隔开的表达式列表。如果测试表达式是整数,Case 1 To 3和Case 1,2,3是等效的。Case Else子句是可选语句,如果找不到与测试表达式匹配的值,就执行该子句。
写完这个宏之后,你发现却无法用于现实中,因为数据表中的员工太多了,不可能遇见一个员工修改并执行一次代码吧,所以我们引入循环语句来解决这个问题。
4. For…Next语句
写For循环的时候,要先定义循环变量(代码中的i)的值,给它一个初值和终值,也就是2 To 19,步长的话必须为整数,如果为1可以省略,不为1要写上,步长也可以是负整数,当是负整数的时候,循环变量的初值必须大于终值。最后的Next i,执行一次,i的值会加上步长值继续执行,比如上面的代码第一次i为1,第二次为2,一直到20(大于循环体终值19)就会跳出循环体。
5. While…Wend语句
与For循环语句功能相同的语句还有While…Wend语句。用它解决上面的问题的代码如下:
执行情况与For语句类似,我就不再阐述了,大家自行试着写写体会一下。
但是,代码实际投入使用之后,又遇到了一个新的问题,每个月职工可能会发生变化,并不能确定确切的数字,那怎么办才能做到随数据变化而变化呢?这时候就得用到Do While语句了。
6. Do While语句
用Do While语句解决上面的问题,代码如下:
Do While语句后为逻辑表达式,它的循环条件是当逻辑表达式的值为真时,执行循环体(Do和Loop之间的语句),否则执行Loop后的语句。Loop标志语句结束,返回Do语句处,再次判断循环条件。如果想在Loop后写逻辑表达式,可以这样做(以上面例子为例):
需要注意的是,Do While语句是当逻辑表达式为假的时候退出循环,但结尾判断式的语句是在执行一次循环体之后再判断循环条件,因此,当循环条件一开始就是假的时候,比开头判断式要对执行一次循环体,其他时候执行次数相同。
7. Do Until语句
与Do While相反的语句,While是逻辑判断式为假退出循环,Until是逻辑判断是为真退出循环,其他都是一样的。大家尝试着用Do Until语句解决上面的问题吧。
8. For Each…Next语句
这条语句是用于以数组或者集合作为循环条件的循环体使用的,使用起来类似于For循环,用实际案例说明形象一点,比如你想将1到100的自然数写到A1:A100单元格区域,用For Each…Next语句可以这样做:
For Each…Next语句不需要定义循环条件,只需要定义变量,变量的类型与集合类型相同。(数组的话则为Variant)需要注意的是,当在一个数组里循环的时候,不能对数组元素进行赋值或重新赋值,对于已经赋值的对象数组也只能修改数组元素。
9. With语句
With语句是用于简化代码用的,举例如下:
这是一段代码,你会发现其中你将Worksheets("Sheet1").Range("A1")写了很多遍,这会大大降低你的效率,如果你不想多次输入重复的代码,就可以使用with优化:
合理使用with语句,不但可以减少代码的输入量,还可以提高程序的执行效率,所以建议大家经常使用。
以上便是VBA的基本语句,大家私下需要多多练习,只有熟悉掌握基本语句,才可以在后面写出优雅的代码,让程序的执行更加有效率。