他山之石——VBA中的数据类型转换

本文介绍了VBA中的各种数据类型及其对程序运行效率的影响,并提供了检查数据类型的方法,包括是否为空、数字、文本等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现这节的内容相比正则表达式简单不少,我还是比较喜欢简单的内容,哈哈。

不过,所谓“会者不难,难者不会”,难易只是相对而言的,这就是为什么我们要冒着酷暑不断学习的原因——学会难者,难者就会变得容易。

'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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值