& 运算符
用来强制两个表达式作字符串连接。
语法
result = expression1 & expression2
& 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何 String或 Variant 变量。 |
expression1 | 必需的;任何表达式。 |
expression2 | 必需的;任何表达式。 |
说明
如果 expression 不是字符串,则将其转换成 String 变体。如果两个表达式都是字符串表达式,则 result 的数据类型是 String;否则 result 是 String 变体。如果两个表达式都是 Null,则 result 也是 Null。但是,只要有一个 expression 是 Null,那么在与其它表达式连接时,都将其作为长度为零的字符串 ("") 处理。任何 Empty 类型表达式也作为长度为零的字符串处理。
本示例使用 & 运算符将字符串串接起来。
Dim MyStr
MyStr = "Hello" & " World" ' 返回 "Hello World"。
MyStr = "Check " & 123 & " Check" ' 返回 "Check 123 Check"。
+ 运算符
用来求两数之和。
语法
result = expression1+expression2
+ 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
expression1 | 必需的;任何表达式。 |
expression2 | 必需的;任何表达式。 |
说明
在使用 + 运算符时有可能无法确定是做加法还是做字符串连接。为避免混淆,请使用 & 运算符进行连接,并且改进程序代码的可读性。
如果至少有一个表达式不是 Variant,则可运用以下法则:
如果 | 则 |
---|---|
两个表达式都是数值数据类型 (Byte、Boolean、 Integer、Long、Single、 Double、 Date、Currency 或是 Decimal) | 相加。 |
两个表达式都是 String | 连接。 |
一个表达式是数值数据类型而另一个是 Null 之外的任意 Variant。 | 相加。 |
一个表达式是 String 而其它是 Null 之外的任意 Variant。 | 连接。 |
一个表达式是 Empty Variant | 返回另一个不变的表达式作为 result。 |
一个表达式是数值数据类型,而另一个是 String | 产生一个类型不匹配错误。 |
每个表达式都是 Null | result 是 Null。 |
如果两个表达式都是 Variant 表达式,则可运用下列规则:
如果 | 则 |
---|---|
两个 Variant 表达式都是数值 | 相加。 |
两个 Variant 表达式都是字符串 | 连接。 |
一个 Variant 表达式是数值而另一个是字符串 | 相加。 |
对于只有数值数据类型表达式的单纯加法,result 的数据类型通常与其中最精确的表达式的数据类型相同。精确度由最低到最高的顺序是 Byte、Integer、Long、Single、Double、Currency 和 Decimal。但下列情况例外:
如果 | 则 result 为 |
---|---|
一个 Single 和一个 Long 相加, | 一个 Double。 |
result 的数据类型是 Long、Single 或 Date 变体,且越出正确范围, | 转换成 Double 变体。 |
result 的数据类型是 Byte 变体,且超过本身的正确范围时, | 转换成 Integer 变体。 |
result 的数据类型是 Integer 变体,且超过本身的正确范围时, | 转换成 Long 变体。 |
将一个 Date 加到任何数据类型上, | 一个 Date。 |
如果有一个或两个表达式是 Null 表达式,则 result 为 Null。如果两个表达式都是 Empty,则 result 是 Integer。但是,如果只有一个表达式是 Empty,则另一个表达式原封不动地作为 result 返回。
注意 加法和减法用到的精确度等级与乘法用到的精确度等级不一样。
本示例使用 + 运算符来计算数值的和。+ 运算符也可以用来做字符串的串接操作。不过,最好还是使用 & 运算符来做字符串的串接操作。如果 + 运算符两边的表达式中混着字符串及数值的话,其结果会是数值的求和。如果都是字符串作“相加”,则返回串接起来的字符串。
Dim MyNumber, Var1, Var2
MyNumber = 2 + 2 ' 返回 4。
MyNumber = 4257.04 + 98112 ' 返回 102369.04。
Var1 = "34": Var2 = 6 ' 初始化混合变量的值。
MyNumber = Var1 + Var2 ' 返回 40。
Var1 = "34": Var2 = "6" ' 用字符串初始化混合变量的值。
MyNumber = Var1 + Var2 ' 返回 "346"(字符串被串接起来)。
– 运算符
用来求两数之差或表示数值表达式的负值。
语法 1
result = number1 - number2
语法 2
- number
– 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
number | 必需的;任何数值表达式。 |
number1 | 必需的;任何数值表达式。 |
number2 | 必需的;任何数值表达式。 |
说明
在语法 1 中,– 运算符是求两数之差的算术减法运算符。在语法 2 中,– 运算符为一元负运算符,说明表达式的值为负值。
result 的数据类型通常与最精确的表达式的数据类型相同。精确度由最低到最高的顺序是Byte、Integer、Long、Single、Double、Currency 和 Decimal。
下列情况例外:
如果 | 则 result 为 |
---|---|
当减法运算中有一个 Single 和一个 Long, | 转换成一个 Double。 |
result 的数据类型是一个 Long、Single 或 Date 变体,且超出正确范围, | 转换成包含 Double 的Variant。 |
result 的数据类型是一个 Byte 变体,且超出正确范围, | 转换成一个 Integer 变体。 |
result 的数据类型是一个 Integer 变体,且超出正确范围, | 转换成一个 Long 变体。 |
减法运算中有 Date 和其它任何数据类型, | 一个 Date。 |
减法运算中有两个 Date 表达式, | 一个 Double。 |
如果有一个或两个表达式是 Null 表达式,则 result 为 Null。如果一个表达式是 Empty,则作为 0 处理。
注意 加法和减法用到的精确度等级与乘法用到的精确度等级不一样。
本示例使用 - 运算符来计算两数值的差
Dim MyResult
MyResult = 4 - 2 ' 返回 2。
MyResult = 459.35 - 334.90 ' 返回 124.45。
* 运算符
用来将两数相乘。
语法
result = number1*number2
* 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
number1 | 必需的;任何数值表达式。 |
number2 | 必需的;任何数值表达式。 |
说明
result 的数据类型通常与最精确的表达式的数据类型相同。精确度由最低到最高的顺序是
Byte、 Integer、Long、Single、Currency、Double 和 Decimal。下列情况是例外:
如果 | 则 result 为 |
---|---|
乘法运算有一个 Single 和一个Long, | 转换成 Double。 |
result 的数据类型是 Long、Single 或 Date 变体,且超出正确范围, | 转换成有 Double 的 Variant。 |
result 的数据类型是 Byte 变体,且超出正确范围, | 转换成 Integer 变体。 |
result 的数据类型是 Integer 变体,且超出正确范围, | 转换成 Long 变体。 |
如果有一个或两个表达式是 Null 表达式,则 result 为 Null。如果一个表达式是 Empty,则作为 0 处理。
注意 乘法用到的精确度等级与加法和减法用到的精确度等级不一样。
本示例使用 * 运算符来计算两数的乘积。
Dim MyValue
MyValue = 2 * 2 ' 返回 4。
MyValue = 459.35 * 334.90 ' 返回 153836.315。
/ 运算符
用来进行两个数的除法运算并返回一个浮点数。
语法
result = number1/number2
/ 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
number1 | 必需的;任何数值表达式。 |
number2 | 必需的;任何数值表达式。 |
说明
result 的数据类型通常是 Double 或 Double 变体。下列情况是例外:
如果 | 则 result 为 |
---|---|
两个表达式都是 Byte、Integer 或Single表达式时, | 一个 Single,除非超出正确范围;如果发生这种情况,则产生错误。 |
两个表达式都是 Byte、Integer 或Single 变体, | 一个 Single 变体,除非已超出正确范围;一旦发生这种情况,result 是一个包含 Double 的 Variant。 |
除法运算中有一个 Decimal及其它任何数据类型, | 一个 Decimal 数据类型。 |
如果有一个或是两个表达式是 Null 表达式,则 result 为 Null。如果一个表达式是 Empty 则作为 0 处理。
本示例使用 / 运算符来计算浮点数除法。
Dim MyValue
MyValue = 10 / 4 ' 返回 2.5。
MyValue = 10 / 3 ' 返回 3.333333。
\ 运算符
用来对两个数作除法并返回一个整数。
语法
result = number1\number2
\ 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
number1 | 必需的;任何数值表达式。 |
number2 | 必需的;任何数值表达式。 |
说明
在进行除法运算之前,数值表达式通过舍去小数部分转换成 Byte、Integer 或 Long表达式。
通常,无论 result 是不是整数,result 的数据类型都是 Byte、Byte 变体、Integer、Integer 变体、Long 或 Long 变体。任何小数部分都被删除。但是,如果任何一个表达式是 Null,则 result 为 Null。如果一个表达式是 Empty,则作为0 处理。
本示例使用 \ 运算符来计算整型除法。
Dim MyValue
MyValue = 11 \ 4 ' 返回 2。
MyValue = 9 \ 3 ' 返回 3。
MyValue = 100 \ 3 ' 返回 33。
Mod 运算符
用来对两个数作除法并且只返回余数。
语法
result = number1 Mod number2
Mod 的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
number1 | 必需的;任何数值表达式。 |
number2 | 必需的;任何数值表达式。 |
说明
在进行 Mod 运算或求余数运算时,该运算符将 number1 用 number2 除(将浮点数字四舍五入成整数),并把余数作为 result 的值返回。例如,在下列表达式中,A (result) 等于 5。
A = 19 Mod 6.7
一般说来,不管 result 是否为一个整数,result 的数据类型为 Byte,Byte 变体、Integer、Integer 变体、Long 或一个包含 Long 的 Variant。任何小数部分都被删除。但是,如果任何一个 Null,类型的表达式出现时,result 都将是 Null。任何 Empty 类型表达式都作为 0 处理。
本示例使用 Mod 运算符来对两数作除法运算,但返回其余数而非商数。如果两数中有一数为浮点数,该数会先被四舍五入成整型后再进行运算。
Dim MyResult
MyResult = 10 Mod 5 ' 返回 0。
MyResult = 10 Mod 3 ' 返回 1。
MyResult = 12 Mod 4.3 ' 返回 0。
MyResult = 12.6 Mod 5 ' 返回 3。
^运算符
用来求一个数字的某次方,次方数为 exponent 值。
语法
result = number^exponent
^ 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
number | 必需的;任何数值表达式。 |
exponent | 必需的;任何数值表达式。 |
说明
只有当 exponent 为整数值时,number 才可以为负数。在表达式中执行多个指数运算时,^ 运算符的计算顺序从左到右。
result 的数据类型通常是 Double 或包含 Double 的 Variant。但是,如果 number 或 exponent 中有一个是 Null 表达式,则 result 也是 Null。
本示例使用 ^ 运算符来表示某数的乘方的指数值。
Dim MyValue
MyValue = 2 ^ 2 ' 返回 4。
MyValue = 3 ^ 3 ^ 3 ' 返回 19683。
MyValue = (-5) ^ 3 ' 返回 -125。
= 运算符
描述
用于对一个变量或属性赋值。
语法
variable = value
= 运算符语法有如下几部分:
部分 | 描述 |
---|---|
variable | 任何变量或任何可写的属性。 |
value | 任何数值型或字符串文字、常数或表达式。 |
说明
等号左边的名字可以是一个简单的标量变量或一个数组的元素。等号左边的属性只能是运行时可写的属性。
比较运算符
用来比较表达式。
语法
result = expression1 comparisonoperator expression2
result = object1 Is object2
result = string Like pattern
比较运算符具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
expression | 必需的;任何表达式。 |
comparisonoperator | 必需的;任何比较运算符。 |
object | 必需的;任何对象名称。 |
string | 必需的;任何字符串表达式。 |
pattern | 必需的;任何字符串表达式或字符的范围。 |
说明
下列表格中有一系列比较运算符以及判定 result 是 True、False 还是 Null 的条件:
运算符 | True if | False if | Null if |
---|---|---|---|
<(小于) | expression1 < expression2 | expression1 >= expression2 | expression1 or expression2 = Null |
<=(小于或等于) | expression1 <= expression2 | expression1 > expression2 | expression1 or expression2 = Null |
>(大于) | expression1 > expression2 | expression1 <= expression2 | expression1 or expression2 = Null |
>=(大于或等于) | expression1 >= expression2 | expression1 < expression2 | expression1 or expression2 = Null |
=(等于) | expression1 = expression2 | expression1 <> expression2 | expression1 or expression2 = Null |
<>(不等于) | expression1 <> expression2 | expression1 = expression2 | expression1 or expression2 = Null |
注意 Is 和 Like 运算符有特定的比较功能,它们不同於表格中的运算符。
在比较两个表达式的时候可能难以确定将要比较的表达式是数字还是字符串。下列表格将说明如何比较表达式,或说明当其中一个表达式不是 Variant 时,如何获得比较的结果。
如果 | 则 |
---|---|
两个表达式都是数值数据类型 (Byte、Boolean、Integer、Long、Single、Double、Date、Currency 或Decimal) | 进行数值比较。 |
两个表达式都是 String | 进行字符串比较 |
一个表达式是数值数据类型而另一个是数字 Variant、或可以为一数字 | 进行数值比较。 |
一个表达式是数值数据类型而另一个是不能转换成数字的字符串 Variant | 产生类型不匹配的错误。 |
一个表达式是 String,而另一个是除了 Null 以外的任何 Variant | 进行字符串比较。 |
一个表达式是 Empty 而另一个是数值数据类型 | 进行数值比较,使用 0 作为 Empty 表达式。 |
一个表达式是 Empty 而另一个是 String | 进行字符串比较,使用长度为零的字符串 ("") 作为 Empty 表达式。 |
如果 expression1 和 expression2 都是 Variant 表达式, 则它们的基本类型决定了比较方式。下列表格说明如何比较表达式,或指出通过比较得到的结果,此结果取决于 Variant 的基本类型:
如果 | 则 |
---|---|
两个 Variant 表达式都是数值 | 进行数值比较。 |
两个 Variant 表达式都是字符串 | 进行字符串比较。 |
一个 Variant 表达式是数值而另一个是字符串 | 数值表达式小于字符串表达式。 |
一个 Variant 表达式是 Empty 而另一个是数值 | 进行数值比较,使用 0 作为 Empty 表达式。 |
一个 Variant 表达式是 Empty 而另一个是字符串 | 进行字符串比较,使用长度为零的字符串 ("") 作为 Empty 表达式。 |
两个 Variant 表达式都是 Empty | 表达式相等。 |
当一个 Single 与一个 Double 作比较时,Double 会进行舍入处理而与此 Single 有相同的精确度。
如果一个 Currency 与一个 Single 或 Double 进行比较,则 Single 或 Double 转换成一个 Currency。与此相似,当一个 Decimal 要与一个 Single 或 Double 进行比较时,Single 或 Double 会转换成一个 Decimal。对于 Currency,任何小于 .0001 的小数将被舍弃,对于 Decimal,任何小于 1E-28 的小数将被舍弃,或者可能产生溢出错误。舍弃这样的小数部分会使原来不相等的两个数值经过比较后相等。
本示例示范各种“比较运算符”的用法。这类运算符通常拿来做表达式结果的比较。
Dim MyResult, Var1, Var2
MyResult = (45 < 35) ' 返回 False。
MyResult = (45 = 45) ' 返回 True。
MyResult = (4 <> 3) ' 返回 True。
MyResult = ("5" > "4") ' 返回 True。
Var1 = "5": Var2 = 4 ' 设置变量初值。
MyResult = (Var1 > Var2) ' 返回 True。
Var1 = 5: Var2 = Empty
MyResult = (Var1 > Var2) ' 返回 True。
Var1 = 0: Var2 = Empty
MyResult = (Var1 = Var2) ' 返回 True。
And 运算符
用来对两个表达式进行逻辑连接。
语法
result = expression1 And expression2
And 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
expression1 | 必需的;任何表达式。 |
expression2 | 必需的;任何表达式。 |
说明
如果两个表达式的值都是 True,则 result 是 True。如果其中一个表达式的值是 False,则 result 是 False。下列表格说明如何确定 result:
如果 expression1 为 | 且 expression2 为 | 则 result 为 |
---|---|---|
True | True | True |
True | False | False |
True | Null | Null |
False | True | False |
False | False | False |
False | Null | False |
Null | True | Null |
Null | False | False |
Null | Null | Null |
And 运算符还对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
如果在 expression1 的位为 | 且在 expression2 中的位为 | result 为 | ||
---|---|---|---|---|
0 | 0 | 0 | ||
0 | 1 | 0 | ||
1 | 0 | 0 | ||
1 | 1 | 1 |
And 运算符示例
本示例使用 And 运算符来做两个表达式结果的逻辑合取(a logical conjunction)。
Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null ' 设置变量初值。
MyCheck = A > B And B > C ' 返回 True。
MyCheck = B > A And B > C ' 返回 False。
MyCheck = A > B And B > D ' 返回 Null。
MyCheck = A And B ' 返回 8(位比较的结果)。
Or 运算符
用来对两个表达式进行逻辑析取运算。
语法
result = expression1 Or expression2
Or 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
expression1 | 必需的;任何表达式。 |
expression2 | 必需的;任何表达式。 |
说明
如果两个表达式中至少有一个为 True,则 result 为 True。下列表格说明如何确定 result:
如果 expression1 为 | 且 expression2 为 | 则 result 为 |
---|---|---|
True | True | True |
True | False | True |
True | Null | True |
False | True | True |
False | False | False |
False | Null | Null |
Null | True | True |
Null | False | Null |
Null | Null | Null |
Or 运算符也对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
如果在 expression1 的位为 | 且在 expression2 中的位为 | result 为 | ||
---|---|---|---|---|
0 | 0 | 0 | ||
0 | 1 | 1 | ||
1 | 0 | 1 | ||
1 | 1 | 1 |
Or 运算符示例
本示例使用 Or 运算符来做两个表达式结果的逻辑析取(logical disjunction)。
Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null ' 设置变量初值。
MyCheck = A > B Or B > C ' 返回 True。
MyCheck = B > A Or B > C ' 返回 True。
MyCheck = A > B Or B > D ' 返回 True。
MyCheck = B > D Or B > A ' 返回 Null。
MyCheck = A Or B ' 返回 10(位比较的结果)。
Not 运算符
用来对表达式进行逻辑否定运算。
语法
result = Not expression
Not 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
expression | 必需的;任何表达式。 |
说明
下表说明如何确定 result:
如果 expression 为 | 则 result 为 |
---|---|
True | False |
False | True |
Null | Null |
Not 运算符示例
本示例使用 Not 运算符来做两个表达式结果的逻辑非(logical negation)。
Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null ' 设置变量初值。
MyCheck = Not(A > B) ' 返回 False。
MyCheck = Not(B > A) ' 返回 True。
MyCheck = Not(C > D) ' 返回 Null。
MyCheck = Not A ' 返回 -11(位比较的结果)。
Xor 运算符
用来对两个表达式进行逻辑互斥或运算。
语法
[result =] expression1 Xor expression2
Xor 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 可选;任何数值变量。 |
expression1 | 必需的;任何表达式。 |
expression2 | 必需的;任何表达式。 |
说明
如果表达式中有一个而且只有一个值为 True,则 result 为 True。但是,如果表达式中有一个为 Null,则 result 也为 Null。当两个表达式都不为 Null,则根据下表来确定 result:
如果 expression1 为 | 且 expression2 为 | 则 result 为 |
---|---|---|
True | True | False |
True | False | True |
False | True | True |
False | False | False |
Xor 运算符既可作为逻辑运算符,也可作为位运算符。使用互斥或的逻辑进行的两个表达式的逐位比较,其结果通过下表说明:
如果 expression1 为 | 且 expression2 为 | 则 result 为 | |
---|---|---|---|
0 | 0 | 0 | |
0 | 1 | 1 | |
1 | 0 | 1 | |
1 | 1 | 0 |
本示例使用 Xor 运算符来做两个表达式结果的逻辑异或(logical exclusion)。
Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null ' 设置变量初值。
MyCheck = A > B Xor B > C ' 返回 False。
MyCheck = B > A Xor B > C ' 返回 True。
MyCheck = B > A Xor C > B ' 返回 False。
MyCheck = B > D Xor A > B ' 返回 Null。
MyCheck = A Xor B ' 返回 2(位比较的结果)。
Eqv 运算符
用来对两个表达式进行逻辑等价运算。
语法
result = expression1 Eqv expression2
Eqv 运算符的语法具有以下几个部分:
部分 | 描述 |
---|---|
result | 必需的;任何数值变量。 |
expression1 | 必需的;任何表达式。 |
expression2 | 必需的;任何表达式。 |
说明
如果有一个表达式是 Null,则 result 也是 Null。如果表达式都不是 Null,则根据下表来确定 result:
如果 expression1 为 | 且 expression2 为 | 则 result 为 | ||
---|---|---|---|---|
True | True | True | ||
True | False | False | ||
False | True | False | ||
False | False | True |
Eqv 运算符对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
如果在 expression1 的位为 | 且在 expression2 中的位为 | result 为 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
本示例使用 Eqv 运算符来做两个表达式结果的逻辑等价(logical equivalence)。
Dim A, B, C, D, MyCheck
A = 10: B = 8: C = 6: D = Null ' 设置变量初值。
MyCheck = A > B Eqv B > C ' 返回 True。
MyCheck = B > A Eqv B > C ' 返回 False。
MyCheck = A > B Eqv B > D ' 返回 Null。
MyCheck = A Eqv B ' 返回 -3(位比较的结果)。
source:VBA Help