[讨论] Excel Range写入大量数据的效率问题

[讨论] Excel Range写入大量数据的效率问题 

[复制链接]
   
跳转到指定楼层
1
  发表于 2012-9-3 20:35  |  只看该作者  回帖奖励
id="iframe808053_0" src="about:blank" width="120" height="240" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="word-wrap: break-word; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">
本帖最后由 守柔 于 2012-9-3 20:36 编辑

当我们需要为Range写入大量数据时,一般将数据先读入一个Variant数组中(类型视具体情况而定),此处不一一细说。通过将数组赋值给Range.Value的方式,可以批量较快地写入数据,这个写入的速度总体是可以接受的,但如果我们的程序要求较高时,这个速度并不理想。
通过Excel的前台写入不同类型数据的效率问题(Ctrl+Enter),向区域(如A1:J20000)分两次写入不同类型(先数字后字符串)同一值的方式进行简单比较,差异明显。
VBA对比代码如下:
Private Sub WriteNumberValue()
''''写入数值型的数据
    Dim alngValue(1 To 20000, 1 To 10) As Long
    Dim L As Long
    Dim I As Integer
    Dim sngBegin As Single
    Dim sngEnd As Single
    For I = 1 To 10
        For L = 1 To 20000
            alngValue(L, I) = L * I
        Next
    Next
    sngBegin = Timer
    ActiveSheet.Range("A1:J20000").Value = alngValue
    sngEnd = Timer
    Debug.Print sngEnd - sngBegin    '''' 0.625 S
End Sub
Private Sub WriteStringValue()
''''写入文本型的数据
    Dim astrValue(1 To 20000, 1 To 10) As String
    Dim L As Long
    Dim I As Integer
    Dim sngBegin As Single
    Dim sngEnd As Single
    For I = 1 To 10
        For L = 1 To 20000
            astrValue(L, I) = "Excel"
        Next
    Next
    sngBegin = Timer
    ActiveSheet.Range("A1:J20000").Value = astrValue
    sngEnd = Timer
    Debug.Print sngEnd - sngBegin    '''' 7.671875 S
End Sub

上述代码对比了在同一空白工作表中(不预设单元格数字格式)的情况下,分别写入数据型和字符串型数组的用时比较,后者用时是前者的12倍多,感觉应该是Excel对单元格赋值时,会对数据类型进行某种验证。
有没有更好的方法,来提高数组(不特定类型或者混合数据类型,通常为Variant数组)向单元格区域写入的效率问题?
有请各位同行一起探讨。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值