类型转换函数
每个函数都将表达式强制转换为特定的数据类型。
类型转换函数名 |
返回值 |
参数的范围 |
CBool |
Boolean |
任何有效的字符串或数值型表达式。 |
CByte |
Byte |
0 到 255. |
CCur |
Currency |
-922,337,203,685,477.5808 到 922,337,203,685,477.5807。 |
CDate |
Date |
任何有效的日期表达式。 |
CDbl |
Double |
负值为 -1.79769313486231E308 到 -4.94065645841247E-324;正值为 4.94065645841247E-324 到 1.79769313486232E308。 |
CDec |
Decimal |
零缩放数(即数字中没有小数位)为79,228,162,514,264,337,593,543,950,335。 有28个小数位的数字的范围为7.9228162514264337593543950335。 最小的非零数字为0.0000000000000000000000000001。 |
CInt |
Integer |
-32,768 到 32,767;分数会四舍五入。 |
CLng |
Long |
-2,147,483,648 到 2,147,483,647;分数会四舍五入。 |
CLngLng |
LongLong |
-9,223,372,036,854,775,808 至 9,223,372,036,854,775,807,分数四舍五入。 (仅在 64 位平台上有效。) |
CLngPtr |
LongPtr |
32 位系统上为 -2,147,483,648 到 2,147,483,647,64 位系统上为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807;32 位系统和 64 位系统分数都四舍五入。 |
CSng |
Single |
负值为 -3.402823E38 到 -1.401298E-45;正值为 1.401298E-45 到 3.402823E38。 |
CStr |
String |
CStr 的返回值取决于expression参数。 |
CVar |
Variant |
和“Double”**** 针对数值型的范围相同。 和“字符串”**** 针对非数值型的范围相同。 |
如果传递给函数的参数超出转换目标数据类型的范围,则会发生错误。
下面只介绍常用的几种数据类型转换,没有介绍的稍微了解下就行了。
CBool
CBool(表达式)
CBool函数将表达式转换为Boolean。 如果该表达式计算结果为非零值,则CBool将返回True,否则,返回False。
例1,各种类型转换为Boolean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
Sub test()
' Byte类型转换为Boolean类型
Dim a1 As Byte, a2 As Byte
a1 = 0
a2 = 10
Debug.Print CBool(a1) ' 结果 False
Debug.Print CBool(a2) ' 结果 True
' Integer类型转换为Boolean类型
Dim b1 As Integer, b2 As Integer
b1 = 0
b2 = -100
Debug.Print CBool(b1) ' 结果 False
Debug.Print CBool(b2) ' 结果 True
' Long类型转换为Boolean类型
Dim c1 As Long, c2 As Long
c1 = 0
c2 = 65535
Debug.Print CBool(c1) ' 结果 False
Debug.Print CBool(c2) ' 结果 True
' Single类型转换为Boolean类型
Dim d1 As Single, d2 As Single
d1 = 0#
d2 = 0.1
Debug.Print CBool(d1) ' 结果 False
Debug.Print CBool(d2) ' 结果 True
' Double类型转换为Boolean类型
Dim e1 As Double, e2 As Double
e1 = 0#
e2 = 10.1
Debug.Print CBool(e1) ' 结果 False
Debug.Print CBool(e2) ' 结果 True
Dim f1 As String, f2 As String
f1 = "0"
f2 = "12"
Debug.Print CBool(f1) ' 结果 False
Debug.Print CBool(f2) ' 结果 True
' Date类型转换为Boolean类型
Dim g1 As Date, g2 As Date
g1 = #1/1/1900#
g2 = #9/17/2019#
Debug.Print CBool(g1) ' 结果 True
Debug.Print CBool(g2) ' 结果 True
' Variant类型转换为Boolean类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CBool(h1) ' 结果 False
Debug.Print CBool(h2) ' 结果 False
End Sub
|
数字形式的String类型能够转换为Boolean类型,如上例中的”0”和”12”。
非数字形式的String类型不能转换为Boolean类型,提示类型错误。
例2,非数字形式的String类型转换为Boolean
1
2
3
4
5
6
7
|
Sub test()
Dim f1 As String, f2 As String
f1 = " "
f2 = "a"
Debug.Print CBool(f1)
Debug.Print CBool(f2)
End Sub
|
运行test过程的后的错误如下:
CByte
CByte(表达式)
CByte函数将表达式转换为Byte。
例3,各种类型转换为Byte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
Sub test()
' Boolean类型转换为Byte类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CByte(a1) ' 结果 0
Debug.Print CByte(a2) ' 结果 255
' Integer类型转换为Byte类型
Dim b1 As Integer, b2 As Integer
b1 = 0
b2 = 100
Debug.Print CByte(b1) ' 结果 0
Debug.Print CByte(b2) ' 结果 100
' Long类型转换为Byte类型
Dim c1 As Long, c2 As Long
c1 = 0
c2 = 12
Debug.Print CByte(c1) ' 结果 0
Debug.Print CByte(c2) ' 结果 12
' Single类型转换为Byte类型
Dim d1 As Single, d2 As Single
d1 = 0#
d2 = 0.1
Debug.Print CByte(d1) ' 结果 0
Debug.Print CByte(d2) ' 结果 0
' Double类型转换为Byte类型
Dim e1 As Double, e2 As Double
e1 = 0#
e2 = 10.1
Debug.Print CByte(e1) ' 结果 0
Debug.Print CByte(e2) ' 结果 10
' String类型转换为Byte类型
Dim f1 As String, f2 As String
f1 = "0"
f2 = "12"
Debug.Print CByte(f1) ' 结果 0
Debug.Print CByte(f2) ' 结果 12
' Date类型转换为Byte类型
Dim g1 As Date, g2 As Date
g1 = #1/1/1900#
g2 = #1/2/1900#
Debug.Print CByte(g1) ' 结果 2
Debug.Print CByte(g2) ' 结果 3
' Variant类型转换为Byte类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CByte(h1) ' 结果 0
Debug.Print CByte(h2) ' 结果 0
End Sub
|
Byte类型的范围是0到255,Integer,Long,Single,Double等超出这个范围时就会报错。Date类型转换为Byte类型时,是从1899年12/31日开始的,上面的#1/1/1900#会转换为2,#1/2/1900#会转换为3。
数字形式的String类型是可以转换为Byte类型的,但字面量必须是0-255,如”123”,“12”,“9”都可以。
CDate
CDate(表达式)
CDate函数将表达式转换为Date类型。
例4,各种类型转换为Date
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Sub test()
' Boolean类型转换为Date类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CDate(a1) ' 结果 0:00:00
Debug.Print CDate(a2) ' 结果 1899/12/29
' Integer类型转换为Date类型
Dim b1 As Integer, b2 As Integer
b1 = 0
b2 = 100
Debug.Print CDate(b1) ' 结果 0:00:00
Debug.Print CDate(b2) ' 结果 1900/04/09
' Long类型转换为Date类型
Dim c1 As Long, c2 As Long
c1 = 0
c2 = 12
Debug.Print CDate(c1) ' 结果 0:00:00
Debug.Print CDate(c2) ' 结果 1900/01/11
' Single类型转换为Date类型
Dim d1 As Single, d2 As Single
d1 = 0#
d2 = 0.1
Debug.Print CDate(d1) ' 结果 0:00:00
Debug.Print CDate(d2) ' 结果 2:24:00
' Double类型转换为Date类型
Dim e1 As Double, e2 As Double
e1 = 0#
e2 = 10.1
Debug.Print CDate(e1) ' 结果 0:00:00
Debug.Print CDate(e2) ' 结果 1900/01/09 2:24:00
' String类型转换为Date类型
Dim f1 As String, f2 As String
f1 = "February 12, 1969"
f2 = "4:35:47 PM"
Debug.Print CDate(f1) ' 结果 1969/02/12
Debug.Print CDate(f2) ' 结果 16:35:47
' Byte类型转换为Date类型
Dim g1 As Byte, g2 As Byte
g1 = 0
g2 = 255
Debug.Print CDate(g1) ' 结果 0:00:00
Debug.Print CDate(g2) ' 结果 1900/09/11
' Variant类型转换为Date类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CDate(h1) ' 结果 0:00:00
Debug.Print CDate(h2) ' 结果 0:00:00
End Sub
|
表达式必须是有效的日期格式才可以,否则会引起类型转换错误。
例5,String类型转换为Date
1
2
3
4
5
6
7
8
|
Sub test()
' String类型转换为Date类型
Dim f1 As String, f2 As String
f1 = "abc"
f2 = " "
Debug.Print CDate(f1) ' 不是有效的日期格式,报错
Debug.Print CDate(f2) ' 不是有效的日期格式,报错
End Sub
|
运行test过程的后的错误如下:
CDbl
CDbl(表达式)
CDbl函数将表达式转换为Double类型。
例6,各种类型转换为Double
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Sub test()
' Boolean类型转换为Double类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CDbl(a1) ' 结果 0
Debug.Print CDbl(a2) ' 结果 -1
' Integer类型转换为Double类型
Dim b1 As Integer, b2 As Integer
b1 = 0
b2 = 100
Debug.Print CDbl(b1) ' 结果 0
Debug.Print CDbl(b2) ' 结果 100
' Long类型转换为Double类型
Dim c1 As Long, c2 As Long
c1 = 0
c2 = 12
Debug.Print CDbl(c1) ' 结果 0
Debug.Print CDbl(c2) ' 结果 12
' Single类型转换为Double类型
Dim d1 As Single, d2 As Single
d1 = 0#
d2 = 0.1
Debug.Print CDbl(d1) ' 结果 0
Debug.Print CDbl(d2) ' 结果 0.100000001490116
' Date类型转换为Double类型
Dim e1 As Date, e2 As Date
e1 = #12/31 1899#
e2 = #9/18 2019#
Debug.Print CDbl(e1) ' 结果 1
Debug.Print CDbl(e2) ' 结果 43726
' String类型转换为Double类型
Dim f1 As String, f2 As String
f1 = "123"
f2 = "1234567"
Debug.Print CDbl(f1) ' 结果 123
Debug.Print CDbl(f2) ' 结果 1234567
' Byte类型转换为Double类型
Dim g1 As Byte, g2 As Byte
g1 = 0
g2 = 255
Debug.Print CDbl(g1) ' 结果 0
Debug.Print CDbl(g2) ' 结果 255
' Variant类型转换为Double类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CDbl(h1) ' 结果 0
Debug.Print CDbl(h2) ' 结果 0
End Sub
|
CInt
CInt(表达式)
CInt函数将表达式转换为Integer类型。
例7,各种类型转换为Integer类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Sub test()
' Boolean类型转换为Integer类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CInt(a1) ' 结果 0
Debug.Print CInt(a2) ' 结果 -1
' Double类型转换为Integer类型
Dim b1 As Double, b2 As Double
b1 = 0
b2 = 100
Debug.Print CInt(b1) ' 结果 0
Debug.Print CInt(b2) ' 结果 100
' Long类型转换为Integer类型
Dim c1 As Long, c2 As Long
c1 = 0
c2 = 12
Debug.Print CInt(c1) ' 结果 0
Debug.Print CInt(c2) ' 结果 12
' Single类型转换为Integer类型
Dim d1 As Single, d2 As Single
d1 = 0#
d2 = 0.1
Debug.Print CInt(d1) ' 结果 0
Debug.Print CInt(d2) ' 结果 0
' Date类型转换为Integer类型
Dim e1 As Date, e2 As Date
e1 = #12/31 1899#
e2 = #9/18 1899#
Debug.Print CInt(e1) ' 结果 1
Debug.Print CInt(e2) ' 结果 -103
' String类型转换为Integer类型
Dim f1 As String, f2 As String
f1 = "123"
f2 = "12"
Debug.Print CInt(f1) ' 结果 123
Debug.Print CInt(f2) ' 结果 12
' Byte类型转换为Integer类型
Dim g1 As Byte, g2 As Byte
g1 = 0
g2 = 255
Debug.Print CInt(g1) ' 结果 0
Debug.Print CInt(g2) ' 结果 255
' Variant类型转换为Integer类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CInt(h1) ' 结果 0
Debug.Print CInt(h2) ' 结果 0
End Sub
|
CLng
CLng(表达式)
CLng函数将表达式转换为Long类型。
例8,各种类型转换为Long类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Sub test()
' Boolean类型转换为Long类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CLng(a1) ' 结果 0
Debug.Print CLng(a2) ' 结果 -1
' Double类型转换为Long类型
Dim b1 As Double, b2 As Double
b1 = 0
b2 = 100
Debug.Print CLng(b1) ' 结果 0
Debug.Print CLng(b2) ' 结果 100
' Integer类型转换为Long类型
Dim c1 As Integer, c2 As Integer
c1 = 0
c2 = 12
Debug.Print CLng(c1) ' 结果 0
Debug.Print CLng(c2) ' 结果 12
' Single类型转换为Long类型
Dim d1 As Single, d2 As Single
d1 = 0#
d2 = 0.1
Debug.Print CLng(d1) ' 结果 0
Debug.Print CLng(d2) ' 结果 0
' Date类型转换为Long类型
Dim e1 As Date, e2 As Date
e1 = #12/31 1899#
e2 = #9/18 2019#
Debug.Print CLng(e1) ' 结果 1
Debug.Print CLng(e2) ' 结果 43726
' String类型转换为Long类型
Dim f1 As String, f2 As String
f1 = "123"
f2 = "1234567"
Debug.Print CLng(f1) ' 结果 123
Debug.Print CLng(f2) ' 结果 1234567
' Byte类型转换为Long类型
Dim g1 As Byte, g2 As Byte
g1 = 0
g2 = 255
Debug.Print CLng(g1) ' 结果 0
Debug.Print CLng(g2) ' 结果 255
' Variant类型转换为Long类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CLng(h1) ' 结果 0
Debug.Print CLng(h2) ' 结果 0
End Sub
|
CSng
CSng(表达式)
CSng函数将表达式转换为Single类型。
例9,各种类型转换为Single类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Sub test()
' Boolean类型转换为Single类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CSng(a1) ' 结果 0
Debug.Print CSng(a2) ' 结果 -1
' Double类型转换为Single类型
Dim b1 As Double, b2 As Double
b1 = 0
b2 = 100
Debug.Print CSng(b1) ' 结果 0
Debug.Print CSng(b2) ' 结果 100
' Integer类型转换为Single类型
Dim c1 As Integer, c2 As Integer
c1 = 0
c2 = 12
Debug.Print CSng(c1) ' 结果 0
Debug.Print CSng(c2) ' 结果 12
' Long类型转换为Single类型
Dim d1 As Long, d2 As Long
d1 = 123456789
d2 = -10
Debug.Print CSng(d1) ' 结果 1.234568E+08
Debug.Print CSng(d2) ' 结果 -10
' Date类型转换为Single类型
Dim e1 As Date, e2 As Date
e1 = #12/31 1899#
e2 = #9/18 2019#
Debug.Print CSng(e1) ' 结果 1
Debug.Print CSng(e2) ' 结果 43726
' String类型转换为Single类型
Dim f1 As String, f2 As String
f1 = "123"
f2 = "1234567"
Debug.Print CSng(f1) ' 结果 123
Debug.Print CSng(f2) ' 结果 1234567
' Byte类型转换为Single类型
Dim g1 As Byte, g2 As Byte
g1 = 0
g2 = 255
Debug.Print CSng(g1) ' 结果 0
Debug.Print CSng(g2) ' 结果 255
' Variant类型转换为Single类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CSng(h1) ' 结果 0
Debug.Print CSng(h2) ' 结果 0
End Sub
|
CStr
CStr(表达式)
CStr函数将表达式转换为String类型。
例10,各种类型转换为String类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Sub test()
' Boolean类型转换为String类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CStr(a1) ' 结果是字符串 False
Debug.Print CStr(a2) ' 结果是字符串 True
' Double类型转换为String类型
Dim b1 As Double, b2 As Double
b1 = 0
b2 = 100
Debug.Print CStr(b1) ' 结果是字符串 0
Debug.Print CStr(b2) ' 结果是字符串 100
' Integer类型转换为String类型
Dim c1 As Integer, c2 As Integer
c1 = 0
c2 = 12
Debug.Print CStr(c1) ' 结果是字符串 0
Debug.Print CStr(c2) ' 结果是字符串 12
' Long类型转换为String类型
Dim d1 As Long, d2 As Long
d1 = 123456789
d2 = -10
Debug.Print CStr(d1) ' 结果是字符串 123456789
Debug.Print CStr(d2) ' 结果是字符串 -10
' Date类型转换为String类型
Dim e1 As Date, e2 As Date
e1 = #12/31 1899#
e2 = #9/18 2019#
Debug.Print CStr(e1) ' 结果是字符串 1899/12/31
Debug.Print CStr(e2) ' 结果是字符串 2019/09/18
' Single类型转换为String类型
Dim f1 As Single, f2 As Single
f1 = 0.1
f2 = 100.89
Debug.Print CStr(f1) ' 结果是字符串 0.1
Debug.Print CStr(f2) ' 结果是字符串 100.89
' Byte类型转换为String类型
Dim g1 As Byte, g2 As Byte
g1 = 0
g2 = 255
Debug.Print CStr(g1) ' 结果是字符串 0
Debug.Print CStr(g2) ' 结果是字符串 255
' Variant类型转换为String类型
Dim h1 As Variant, h2 As Variant
h1 = Empty
h2 = Cells(1, 1)
Debug.Print CStr(h1) ' 结果是空字符串
Debug.Print CStr(h2) ' 结果是空字符串
End Sub
|
CVar
CVar(表达式)
CVar函数将表达式转换为Variant类型。
例11,各种类型转换为Variant类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Sub test()
' Boolean类型转换为Variant类型
Dim a1 As Boolean, a2 As Boolean
a1 = False
a2 = True
Debug.Print CVar(a1) ' 结果 False
Debug.Print CVar(a2) ' 结果 True
' Double类型转换为Variant类型
Dim b1 As Double, b2 As Double
b1 = 0
b2 = 100
Debug.Print CVar(b1) ' 结果 0
Debug.Print CVar(b2) ' 结果 100
' Integer类型转换为Variant类型
Dim c1 As Integer, c2 As Integer
c1 = 0
c2 = 12
Debug.Print CVar(c1) ' 结果 0
Debug.Print CVar(c2) ' 结果 12
' Long类型转换为Variant类型
Dim d1 As Long, d2 As Long
d1 = 123456789
d2 = -10
Debug.Print CVar(d1) ' 结果 123456789
Debug.Print CVar(d2) ' 结果 -10
' Date类型转换为Variant类型
Dim e1 As Date, e2 As Date
e1 = #12/31 1899#
e2 = #9/18 2019#
Debug.Print CVar(e1) ' 结果 1899/12/31
Debug.Print CVar(e2) ' 结果 2019/09/18
' Single类型转换为Variant类型
Dim f1 As Single, f2 As Single
f1 = 0.1
f2 = 100.89
Debug.Print CVar(f1) ' 结果 0.1
Debug.Print CVar(f2) ' 结果 100.89
' Byte类型转换为Variant类型
Dim g1 As Byte, g2 As Byte
g1 = 0
g2 = 255
Debug.Print CVar(g1) ' 结果 0
Debug.Print CVar(g2) ' 结果 255
' Variant类型转换为Variant类型
Dim h1 As String, h2 As String
h1 = ""
h2 = "a"
Debug.Print CVar(h1) ' 结果是空字符串
Debug.Print CVar(h2) ' 结果 a
End Sub
|
参考地址:
https://docs.microsoft.com/zh-cn/office/vba/language/concepts/getting-started/type-conversion-functions
转载请注明本网址。