运算符

类型 说明 运算符
算术运算符 用于执行数学计算的运算符。 *运算符 ^运算符 /运算符 \运算符 Mod运算符 +运算符 -运算符
比较运算符 用于执行比较的运算符。 =运算符 Is运算符 Like运算符
串联运算符 用于组合字符串的运算符。 &运算符 +运算符
逻辑运算符 用于执行逻辑运算的运算符。 And运算符 Eqv运算符 Imp运算符 Not运算符 Or运算符 Xor运算符

算术运算符

运算符 含义 说明 例子
+ 加法运算 a = 1 + 2 结果a等于3
- 减法运算 a = 1 - 2 结果a等于-1
* 乘法运算 a = 2 * 3 结果a等于6
- 取反 取反运算 a = -2 结果a等于-2
^ 幂运算 a = 2^3 相当于a = 2*2*2 结果a等于8
/ 除法运算 a = 10 / 3 结果a等于3.333333333
\ 整除 整除运算 a = 10 / 3 结果a等于3
Mod 取模 取模运算(余数运算) a = 10 Mod 3 结果a等于1

加减乘除幂和数学上的意义是一样的,不用多做介绍。着重介绍下取反,整除和取模运算。

取反运算符同减法运算符是一样的,都是-。区别是取反运算是一元运算符,也就是只能单独用于一个数字,不能用于两个以上的数字进行运算。你可以把取反运算符看作是负号就好。

\ 用于将两个数字相除并返回整数类型的结果。这两个数字进行整除之前,先进行四舍五入计算后再整除。

例1,整除

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Sub Test1()
    Dim num1 As Integer
    Dim num2 As Single, num3 As Single
    num1 = 10
    num2 = 11#
    num3 = 11.6

    Debug.Print num1 / 3
    Debug.Print num2 / 3  'Single类型的小数点后是6位
    Debug.Print num3 / 3  'Single类型的小数点后是6位
    Debug.Print num1 \ 3
    Debug.Print num2 \ 3
    Debug.Print num3 \ 3  '结果是4,不是3
End Sub

以上程序的运行结果如下:

1
2
3
4
5
6
3.33333333333333
3.666667
3.866667
3
3
4

Mod,取得两个数字相除后结果的余数。例如,

例2,Mod取模运算

1
2
3
4
5
6
7
8
9
Sub Test2()
    ' 声明变量MyResult,没有指明类型。默认是Variant类型。
    Dim MyResult

    MyResult = 10 Mod 5      ' 结果 0
    MyResult = 10 Mod 3      ' 结果 1
    MyResult = 12 Mod 4.3    ' 结果 0
    MyResult = 12.6 Mod 5    ' 结果 3
End Sub

算术运算符优先级

数学上我们都学过先乘除后加减,这个先后顺序就是优先级。算术运算符的优先级如下(由大到小排列):

运算符 含义
^
- 取反
* 和 / 乘和除
\ 整除
Mod 取模
+ 和 - 加和减

如果想改变优先级,可以加上括号。优先计算括号内的运算。

例3,算术运算优先级

1
2
3
4
5
6
7
8
9
Sub Test3()
    ' 声明变量MyResult,没有指明类型。默认是Variant类型。
    Dim MyResult

    MyResult = 2 - 2 * 3         ' 先计算2 * 3得到6,然后再计算2 - 6,最终结果 -4
    MyResult = 2 - 2 * 3 ^ 2     ' 先计算3 ^ 2得到9,然后再计算2 * 9得到18,然后再计算2 - 18,最终结果 -16
    MyResult = 2 + 2 * 3 Mod 2   ' 先计算2 * 3得到6,然后再计算6 Mod 2得到0,然后再计算2 + 0,最终结果 2
    MyResult = (2 - 2) * 3 Mod 2 ' 先计算2 - 3得到0,然后再计算0 * 3 得到0,然后再计算 0 Mod 2,最终结果 0
End Sub

比较运算符

运算符 含义 例子
= 赋值运算 a = 3 结果a等于3
Is 判断运算 a = object1 Is object2 判断object1是否是object2,返回True或False。
Like 匹配运算 a = “aBBBa” Like “a*a” 模式匹配,返回True。
< 小于运算 a = 3 < 3 结果a等于False
<= 小于等于运算 a = 3 <= 3 结果a等于True
> 大于运算 a = 3 > 3 结果a等于False
>= 大于等于运算 a = 3 >= 3 结果a等于True
= 等于运算 a = (3 = 3) 结果a等于True
<> 不等于运算 a = 3 <> 3 结果a等于False

赋值运算用于给变量赋值。到现在为止,我们见的最多的就是赋值运算符。

Is运算主要是用来判断两个对象,如果是同一个对象返回True,不是同一个对象返回False。关于对象的概念在以后的课程里我们会介绍。在Excel里面常见的对象是单元格Cell对象,Sheet对象,Workbook对象等,下面我们以单元格对象为例较少下Is的用法。

例4,Is运算符,判断是不是同一个单元格。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Sub Test4()
    '声明单元格对象cellA1,cellA2
    Dim cellA1 As Range
    Dim cellA2 As Range

    '单元格对象cellA1,cellA2的初始化,对象的初始用set
    Set cellA1 = Range("A1")
    Set cellA2 = Range("A2")

    Debug.Print cellA1 Is cellA2 ' 结果 False
    Debug.Print cellA1 Is cellA1 ' 结果 True
End Sub

Like运算用于比较两个字符串。Like用法如下: result = string Like pattern

如果string匹配上了pattern,那么result是True,没有匹配上,result是False。如果string和pattern都是Null的话,result也是Null。

Like运算符的行为取决于Option Compare语句。Option Compare语句有Option Compare BinaryOption Compare Text两种。默认方法为Option Compare Binary

Option Compare Binary根据派生自字符的内部二进制表示形式的排序顺序生成字符串比较。 排序顺序由代码页确定。 以下示例中显示了典型的二进制排序顺序: A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text根据由系统的区域设置确定的不区分大小写的文本排序顺序生成字符串比较。 当使用 Option Compare Text 为相同的字符排序时,将生成以下文本排序顺序: (A=a) < (À=à) < (B=b) < (E=e) < (Ê=ê) < (Z=z) < (Ø=ø)

内置模式匹配为字符串比较提供了一个功能多样的工具。 利用模式匹配功能,您可以将通配符、字符列表或字符范围任意组合使用来匹配字符串。 下表显示了 pattern 中允许使用的字符以及它们的匹配项:

模式中的字符 字符串中的匹配项
? 任意单个字符。
* 零个或多个字符。
# 任何单个数字 (0-9)。
[ charlist ] charlist内的任意单个字符。
[ !charlist ] charlist外的任意单个字符。

例5,Like运算符

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Sub Test5()
    Dim MyCheck
    MyCheck = "aBBBa" Like "a*a"     ' 结果True
    MyCheck = "F" Like "[A-Z]"       ' 结果 True
    MyCheck = "F" Like "[!A-Z]"      ' 结果 False
    MyCheck = "a2a" Like "a#a"       ' 结果 True
    MyCheck = "aM5b" Like "a [L-P]#[!c-e]"  ' 结果 True
    MyCheck = "BAT123khg" Like "B?T*"    ' 结果 True
    MyCheck = "CAT123khg" Like "B?T*"    ' 结果 False
    MyCheck = "ab" Like "a*b"            ' 结果 True
    MyCheck = "a*b" Like "a [*]b"        ' 结果 False
    MyCheck = "axxxxxb" Like "a [*]b"    ' 结果 False
    MyCheck = "a [xyz" Like "a [[]*"     ' 结果 True
    MyCheck = "a [xyz" Like "a [*"       ' Throws Error 93 (invalid pattern string)
End Sub

比较运算符的优先级都相同;也就是说,它们按照显示的顺序从左向右进行计算。

串联运算符

运算符 含义 例子
& 字符串连接运算 a = “hello” & “ World” 结果a等于”hello World”
+ 字符串连接运算 a = “hello” + “ World” 结果a等于”hello World”

&用于强制连接两个表达式的字符串。
result = expression1 & expression2

如果expression1或expression2不是String类型的话,会被转化为String类型再进行连接。 如果expression1和expression2都是Null,那么result也是Null。如果只有一个表达式是Null的话,那么这个表达式被转化为空字符串”“再进行连接。

例6,&运算符

1
2
3
4
5
6
7
Sub Test6()
    Dim MyStr

    MyStr = "Hello" & " World"          ' 结果 "Hello World"
    MyStr = "Check " & 123 & " Check"   ' 结果 "Check 123 Check"
    MyStr = "Hello" & Null              ' 结果 "Hello"
End Sub

+既是加法运算符也是字符连接运算符,当+的左右两侧都是数字的时候,+是加法运算。两侧都是String类型的时候是字符连接运算。

例7,+运算符

1
2
3
4
5
6
Sub Test7()
    Dim MyStr

    MyStr = "Hello" + " World"          ' 结果 "Hello World"
    MyStr = 123 + 100              ' 结果 223
End Sub

+两侧的类型不一致,会引发错误。当类型不一致时,请用类型转换函数进行转化后再使用+。

例8,+运算符

1
2
3
4
5
Sub Test8()
    Dim MyStr
    MyStr = "Hello " + 123 + " World"  ' 类型错误。
    Debug.Print MyStr
End Sub

运行Test8过程的后的错误如下:

类型转换错误

把123强制转化为String类型,就不会报错了,如下:

1
2
3
4
5
Sub Test8()
    Dim MyStr
    MyStr = "Hello " +  CStr(123) + " World"
    Debug.Print MyStr  ' 结果 Hello 123 World
End Sub

逻辑运算符

运算符 含义 例子
And 逻辑与运算 a = True And False 结果a等于False
Or 逻辑或运算 a = “hello” & “ World” 结果a等于”hello World”
Not 逻辑非运算 a = “hello” & “ World” 结果a等于”hello World”
Xor 逻辑异或运算 a = “hello” & “ World” 结果a等于”hello World”
Eqv 逻辑等价运算 a = True Eqv False 结果a等于False
Imp 逻辑隐含运算 a = “hello” & “ World” 结果a等于”hello World”

And 逻辑与运算符,用于对两个表达式执行逻辑与运算。
result = expression1 And expression2

如果expression1和expression2都是True,那么result是True。如果其中有一个表达式是False,那么result是False。如下表所示:

If expression1 is And expression2 is The result is
True False False
True Null Null
False True False
False False False
False Null False
Null True Null
Null False False
Null Null Null

如果expression1和expression2都是数值表达式,那么And会对表达式相同位置的位进行按位比较。如下表所示:

If bit in expression1 is And bit in expression2 is The result is
0 0 0
0 1 0
1 0 0
1 1 1

例9,And运算符

1
2
3
4
5
6
7
8
Sub Test9()
    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 (按位比较).
End Sub

Or 逻辑或运算,用于对两个表达式执行逻辑或运算。
result = expression1 Or expression2

如果expression1或者expression2都是True,那么result是True,否则是False。如下表所示:

If expression1 is And expression2 is The result is
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

如果expression1和expression2都是数值表达式,那么Or会对表达式相同位置的位进行按位比较。如下表所示:

If bit in expression1 is And bit in expression2 is The result is
0 0 0
0 1 1
1 0 1
1 1 1

例10,Or运算符

1
2
3
4
5
6
7
8
9
Sub Test10()
    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 (按位比较).
End Sub

Not 逻辑非运算,用于对表达式执行逻辑非运算。
result = Not expression

结果如下表所示:

If expression is The result is
True False
False True
NULL NULL

如果expression都是数值表达式,那么Or会对表达式相同位置的位进行按位比较。如下表所示:

If bit in expression is The result is
0 1
1 0

例11,Not运算符

1
2
3
4
5
6
7
8
Sub Test11()
    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  (按位比较).
End Sub

Xor 逻辑异或运算,用于对两个表达式执行逻辑异或运算。 [ result = ] expression1 Xor expression2

如果有且只有一个表达式的值为True,则result为True。 但是,只要有一个表达式为Null,则result也为Null。如下表所示:

If expression1 is And expression2 is The result is
True True False
True False True
False True True
False False False

如果expression1和expression2都是数值表达式,那么Xor会对表达式相同位置的位进行按位比较。如下表所示:

If bit in expression1 is And bit in expression2 is The result is
0 0 0
0 1 1
1 0 1
1 1 0

例12,Xor运算符

1
2
3
4
5
6
7
8
9
Sub Test12()
    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  (按位比较).
End Sub

Eqv 逻辑等价运算符,用于对两个表达式执行逻辑等价运算。
result = expression1 Eqv expression2

如果expression1或expression2是Null,那么result是Null。如果expression1和expression2都不是Null,并且expression1和expression2的表达式结果是一样的,那么result是True,否则是False。如下表所示:

If expression1 is And expression2 is The result is
True True True
True False False
False True False
False False True

如果expression1和expression2都是数值表达式,那么And会对表达式相同位置的位进行按位比较。如下表所示:

If bit in expression1 is And bit in expression2 is The result is
0 0 1
0 1 0
1 0 0
1 1 1

例13,Eqv运算符

1
2
3
4
5
6
7
8
Sub Test13()
    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 (按位比较).
End Sub

Imp 逻辑隐含运算,用于对两个表达式执行逻辑隐含。
result = expression1 Imp expression2

结果,如下表所示:

If expression1 is And expression2 is The result is
True True True
True False False
True Null Null
False True True
False False True
False Null True
Null True True
Null False Null
Null Null Null

如果expression1和expression2都是数值表达式,那么Imp会对表达式相同位置的位进行按位比较。如下表所示:

If bit in expression1 is And bit in expression2 is The result is
0 0 1
0 1 1
1 0 0
1 1 1

例14,Imp运算符

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub Test12()
    Dim A, B, C, D, MyCheck
    A = 10: B = 8: C = 6: D = Null    ' 初始化变量
    MyCheck = A > B Imp B > C    ' 结果 True.
    MyCheck = A > B Imp C > B    ' 结果 False.
    MyCheck = B > A Imp C > B    ' 结果 True.
    MyCheck = B > A Imp C > D    ' 结果 True.
    MyCheck = C > D Imp B > A    ' 结果 Null.
    MyCheck = B Imp A    ' 结果 -1 (bitwise comparison).
End Sub

参考资料: https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/operator-summary

转载请注明本网址。