VBA基础语法:运算符

& 运算符

用来强制两个表达式作字符串连接。

语法

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产生一个类型不匹配错误。
每个表达式都是 Nullresult Null

如果两个表达式都是 Variant 表达式,则可运用下列规则:

如果
两个 Variant 表达式都是数值相加。
两个 Variant 表达式都是字符串连接。
一个 Variant 表达式是数值而另一个是字符串相加。

对于只有数值数据类型表达式的单纯加法,result 的数据类型通常与其中最精确的表达式的数据类型相同。精确度由最低到最高的顺序是 ByteIntegerLongSingleDoubleCurrency Decimal。但下列情况例外:

如果result
一个 Single 和一个 Long 相加,一个 Double
result 的数据类型是 LongSingle 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 的数据类型是一个 LongSingle 或 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 的数据类型是 LongSingle 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,除非超出正确范围;如果发生这种情况,则产生错误。
两个表达式都是 ByteInteger 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 的数据类型都是 ByteByte 变体、IntegerInteger 变体、LongLong 变体。任何小数部分都被删除。但是,如果任何一个表达式是 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 运算符示例

本示例使用 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 TrueFalse 还是 Null 的条件:

运算符True ifFalse ifNull if
<(小于)expression1 < expression2expression1 >= expression2expression1 or expression2 = Null
<=(小于或等于)expression1 <= expression2expression1 > expression2expression1 or expression2 = Null
>(大于)expression1 > expression2expression1 <= expression2expression1 or expression2 = Null
>=(大于或等于)expression1 >= expression2expression1 < expression2expression1 or expression2 = Null
=(等于)expression1 = expression2expression1 <> expression2expression1 or expression2 = Null
<>(不等于)expression1 <> expression2expression1 = expression2expression1 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 进行比较,则 SingleDouble 转换成一个 Currency。与此相似,当一个 Decimal 要与一个 SingleDouble 进行比较时,SingleDouble 会转换成一个 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,则 resultTrue。如果其中一个表达式的值是 False,则 resultFalse。下列表格说明如何确定 result

如果 expression1expression2result
TrueTrueTrue
TrueFalseFalse
TrueNullNull
FalseTrueFalse
FalseFalseFalse
FalseNullFalse
NullTrueNull
NullFalseFalse
NullNullNull

And 运算符还对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为且在 expression2 中的位为result
000
010
100
111

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

如果 expression1expression2result
TrueTrueTrue
TrueFalseTrue
TrueNullTrue
FalseTrueTrue
FalseFalseFalse
FalseNullNull
NullTrueTrue
NullFalseNull
NullNullNull

Or 运算符也对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为且在 expression2 中的位为result
000
011
101
111

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

如果 expressionresult
TrueFalse
FalseTrue
NullNull

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,则 resultTrue。但是,如果表达式中有一个为 Null,则 result 也为 Null。当两个表达式都不为 Null,则根据下表来确定 result

如果 expression1expression2result
TrueTrueFalse
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

Xor 运算符既可作为逻辑运算符,也可作为位运算符。使用互斥或的逻辑进行的两个表达式的逐位比较,其结果通过下表说明:

如果 expression1expression2result
000
011
101
110

Xor 运算符示例

本示例使用 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

如果 expression1expression2result
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseTrue

Eqv 运算符对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为且在 expression2 中的位为result
001
010
100
111

Eqv 运算符示例

本示例使用 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 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值