Excel 2016 VBA入门与应用
上QQ阅读APP看书,第一时间看更新

3.4 VBA的运算符

计算机最基本的功能就是对数据进行计算,程序功能的实现更少不了对数据的运算。运算符是介于操作数之间的符号,用于实现操作数间的运算。如大家熟悉的“+”和“-”就是最常见的运算符。VBA包括4类基本的运算符,它们是算术运算符、比较运算符、逻辑运算符和连接运算符。

3.4.1 进行计算的算术运算符

算术运算符是最常见的运算符,用于在程序中进行算术运算,如对数据进行加、减、乘、除或乘方等运算。进行算术运算的运算符除了大家熟悉的“+”和“-”之外,还包括下面这些运算符。

● “*”和“/”运算符:这两个运算符用来进行两数相乘或相除运算。如5*8,其结果为40。4/2,其结果为2。

● “\”运算符:注意这里符号的方向,它可不是除法运算符。该运算符为整数除法运算符,用来计算两个数字相除所得商的整数部分。如8\5表示8除以5,商为1.6,此时的计算结果将取商的整数部分,不保留小数部分,因此计算结果为1。

● “^”运算符:该运算符用来进行幂运算。如3^2表示3的2次幂,其运算结果为9。

● Mod运算符:该运算符用来对两数做除法并且返回余数。如8 Mod 5,其运算结果是余数3。

3.4.2 比较大小的比较运算符

比较运算符用来计算两个或多个数值之间的关系,这些运算符包括小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、不等于(<>)以及等于(=)。比较运算符的计算结果只有两个,True或False。在使用比较运算符进行数值比较时,如果需要将计算结果赋予某个变量,可以使用下面的方式:

        结果=表达式1 比较运算符 表达式2

如在下面的语句中,判断表达式5^2-5*7的结果与0的大小,结果赋予变量b,此时b的值为False。

          b=5^2-5*7>0

在VBA中,参与关系运算的操作数可以是数值型的,也可以是字符型的。对数据进行比较操作时,如果两个操作数均为数值型,则比较将按照数值的大小进行。如果两个操作数是字符串型的,则按照字符的ASCII码值从左向右进行比较。即先比较两个字符串中的第一个字符,ASCII码大的字符串的值大。如果第一个字符相同,则将比较第二个字符,以此类推直到比较出大小为止。如下面语句比较的结果将是True。

          "special">"sparkle"

比较运算符中的等于号(=)的作用是判断其两边的值是否相等,VBA将首先计算“=”两边表达式的值,然后对它们进行比较,如下面语句比较的结果将是True。

          8*5=4*10

在比较运算符中,还有两个比较特殊的运算符,它们是Like和Is。Is运算符用于对象引用的比较,Like运算符用于对字符串进行匹配,如下面语句运算的结果为True。

          "EFGHIJK" Like "*GH*"

3.4.3 进行逻辑运算的逻辑运算符

逻辑运算符是指连接表达式进行逻辑运算的运算符,其运算结果只有True和False两个。VBA包括下面这些逻辑运算符。

● Not运算符:用于对表达式进行“逻辑否”运算,当操作数为True时,计算结果为False。如NOT 5<4,其值为True。

● And运算符:用于对两个操作数进行“逻辑与”计算。在进行“逻辑与”运算时,当两个操作数都为True时,运算结果为True,否则运算结果为False。如表达式5>4 And 4>3的运算结果为True, 5>4 And 4<3的运算结果为False。

● Or运算符:用于对两个操作数进行“逻辑或”运算。在进行“逻辑或”运算时,只要两个操作数中有一个值为True,运算结果即为True。如表达式5>4 Or 4<3的计算结果为True。

● Xor运算符:用于进行两个操作数的“逻辑异或”运算。在进行“逻辑异或”运算时,两个操作数结果相反时结果为True,否则为False。如表达式5>4 Xor 4<3的计算结果为True,而表达式5>4 Xor 4>3的结果为False。

● Eqv运算符:用于对两个操作数进行“逻辑等价”运算。在进行“逻辑等价”运算时,当两个操作数结果相同时结果为True,否则为False。如表达式5<4 Eqv 4<3的计算结果为True,而表达式5>4 Eqv 4<3的计算结果为False。

● Imp运算符:用于对两个操作数进行“逻辑蕴含”计算。在进行“逻辑蕴含”计算时,第一个操作数值为True,第二个操作数值为False时,计算结果为False,否则计算结果为True。如表达式5 > 4 Imp 4 < 3的计算结果为False,而表达式5 < 4 Imp 4 > 3或5 < 4 Imp 4 < 3的计算结果都是True。

如果用A和B表示两个操作数,用T表示逻辑真(True), F表示逻辑假(False),则各个逻辑运算符的计算结果如表3-1所示。

表3-1 逻辑运算符的真值表

3.4.4 合并字符的连接运算符

在VBA中,连接运算符用于合并两个以上的字符串使其成为单一的字符串。VBA中的连接运算符有两个,它们是“&”和“+”运算符。

“&”运算符用来强制将两个表达式作为字符串连接起来,如下面的语句:

        "I love" & "VBA"

该语句的运算结果是字符串"I love VBA"。

如果表达式的结果不是字符串,则该运算符将会把表达式的结果转换为字符串。如下面的语句:

        "Excel" & "20" & "17"

该语句的运行结果是"Excel2017", VBA将会把数字20和17转换为字符串,然后再连接它们。

“+”运算符应用于字符串中时,可以将字符串连接起来,如下面语句:

        "Excel"+"VBA"

该语句的运算结果为字符串"ExcelVBA"。

“+”运算符只有在其两边表达式均为字符串时才能进行字符串连接运算,如下面语句在运行时将得到“类型不匹配”的提示,如图3-8所示。

图3-8 “类型不匹配”提示

        "Excel"+2017

注意:在使用连接运算符连接字符串时,如果无法确定是进行加法运算还是进行字符串的连接,为了避免程序错误,应该使用“&”运算符来进行连接。

3.4.5 应该先算什么

运算符的作用就是完成运算,将常量、变量和函数等用运算符连接起来的运算式就是表达式。当一个表达式中包含多个运算符时,就必须要考虑运算符的优先级了。所谓的优先级指的是运算符的优先顺序,这个优先顺序将解决多个运算符并存的情况下究竟应该先算什么的问题。

在表达式中,当存在多个运算时,一般是先处理算术运算符,然后处理比较运算符,接着是逻辑运算符。所有的比较运算符的计算顺序是相同的,即按照从左向右的顺序来进行计算。对于算术运算符、比较运算符和逻辑运算符同时存在的语句,按照如表3-2所示的由上向下的顺序来进行计算。

表3-2 运算符的优先顺序

在默认情况下,VBA中的运算将按照运算符的优先顺序来进行,如果需要更改这个优先顺序,可以使用括号。括号内的运算总是优先于括号外的运算,括号内的运算将按照运算符的优先顺序来进行。

如下面两个语句:

        3 ^ 2 + 4 * 5-7
        3 ^ 2 + 4 * (5-7)

第一个语句运行的结果是22,按照运算符的优先级是先进行指数运算,然后是乘法运算,最后进行加减运算。添加括号后将先进行括号内的减法运算,然后进行指数运算和乘法运算,最后计算加法,所以运行结果为1。