类型转换函数

每个函数都将表达式强制转换为特定的数据类型。

类型转换函数名 返回值 参数的范围
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

转载请注明本网址。