欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Office

VBA数据类型与转换附检测是否为某某类型的示例

程序员文章站 2022-06-26 11:03:19
'1 数据类型综述    '在VBA中的数据类型有整数、文本、对象等类型。这些不同的类型有着特定的作用,在进行运算时也会占用  ...

'1 数据类型综述

   '在VBA中的数据类型有整数、文本、对象等类型。这些不同的类型有着特定的作用,在进行运算时也会占用

   '不同大小的内存,所以我们在编写程序时为了提高运行效率,一般都要定义数据的类型。

'2 数据类型对程序运行的影响

     'byte                       占用1个字节

     'integer,boolean            占用2个字节

     'long,single                占用4个字节

     'Double,Currency,date       占用8个字节

     'object                     占用4个字节

     'string(不定长)             占用10+字符长度个字节

     'String(定长)               占用字符串长度个字节

     'Variant(任意数字类型)      占用16个字节

     'Variant(字符串)            占用24+字符串长度个字节

   Sub sss1()

      Dim x As Long

      Dim t

      'Dim k1 As Byte     '用时0.03125s

      Dim k

      'Dim k1 As Integer '用时0.15625s

      Dim k1 As String   '用时0.203125s

      k = 1

      t = Timer

      For x = 1 To 1000000

        k1 = k

      Next x

      Debug.Print Timer - t

    End Sub

'1 检查是否为空

   Sub s1()

     Debug.Print Range("a1") = "" '判断真空,无法判断假空

     Debug.Print Len(Range("a1")) = 0 '判断真空,无法判断假空

     Debug.Print VBA.IsEmpty(Range("a1")) '假空时返回FALSE

     Debug.Print VBA.TypeName(Range("a1").Value) '返回Empty表示为空

   End Sub

   Sub 速度测试()

     Dim t

     Dim x As Long

     t = Timer

     For x = 1 To 100000

       'If Range("a1") = "" Then '用时0.81

      ' If Len(Range("a1")) = 0 Then '0.84

      ' If VBA.IsEmpty(Range("a1")) Then '速度 0.79

       'If VBA.TypeName(Range("a1").Value) = Empty Then '0.84

       End If

     Next x

   Debug.Print Timer - t

   End Sub

'2 检查是否为数字

   Sub s2()

    Debug.Print VBA.IsNumeric(Range("a1"))

    Debug.Print Application.WorksheetFunction.IsNumber(Range("A1"))

    Debug.Print VBA.TypeName(Range("A1").Value)

   ' Debug.Print Range("a1").Value Like "#" '判断一位整数

   ' Debug.Print Range("a1") Like "*#*" '判断是否包含数字

   End Sub

      Sub 速度测试2()

     Dim t

     Dim x As Long

     t = Timer

     For x = 1 To 100000

       'If VBA.IsNumeric(Range("a1")) Then '用时0 0.79

       'If Application.WorksheetFunction.IsNumber(Range("A1")) Then '0.9218

       'If VBA.TypeName(Range("A1").Value) = "Double" Then '速度 0.84

       End If

     Next x

   Debug.Print Timer - t

   End Sub

'3 检查是否为文本

   Sub t3()

     Debug.Print Application.IsText(Range("a1"))

     Debug.Print "B" Like "[A-Za-z]" '判断是否为字母

     Debug.Print Len(Range("a1"))

     Debug.Print Range("a1") Like "*[一-龥]*" '判断字符串中是否包含汉字

   End Sub

'4 判断结果是否为错误值

  Sub s4()

    Debug.Print VBA.IsError(Range("a1"))

    Debug.Print TypeName(Range("a1").Value)

  End Sub

'5 判断是否为数组

   Sub s5()

     Dim arr

     arr = Range("A1:A2")

     Erase arr

     Debug.Print VBA.IsArray(arr)

   End Sub

'6 判断是否为日期

   Sub s6()

      Debug.Print VBA.IsDate(Range("a2"))

   End Sub

'一、类型转换函数:CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar

'上述函数是把表达式转换成相对应的数字类型,比如clng转换成长整型,cstr转换成文本型

Sub ss1()

 Dim s As Integer

 s = 2334

 MsgBox 截取(CStr(s)) '因为自定义函数参数要求是文本类型,而s是数值类型,所以需要用cstr转换成文本类型

End Sub

Function 截取(x As String)

  截取 = Left(x, 2)

End Function

Sub ss2()

 Debug.Print 1 + True 'CInt(1 = 1)

End Sub

'二、Format函数

  'format函数用法等同于工作表中的text函数,可以格式化显示数字或文本

 Sub ss3()

  Dim n, n1

  n = 234.3372

  n1 = 41105

  Debug.Print Format(n, "0.00")

  Debug.Print Format(n, "0")

  Debug.Print Format(n, "\价格\:0.00")

  Debug.Print Format(n1, "yyyy-mm-dd")

 End Sub