关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

VBA中Range和Cells的速度

发布时间:2020-03-14 00:00:00

目录

  • 概述
  • 测试速度的代码
  • 测试结果

概述

Range和Cells这两个函数,都可以获取单元格内容和将内容写入单元格。既然这两个功能相同,那么速度就成为了选择的关键。

注:Range有着比Cells更强大的功能,大家千万不要把这两个函数完全等同。当然了,这也从侧面反应了速度上必然Range更慢。

测试速度的代码

Private Declare Function QueryPerformanceCounter Lib "KERNEL32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "KERNEL32" (lpFrequency As Currency) As Long

Private m_Frequency   As Currency
Private m_Start       As Currency
Private m_Now         As Currency
Private m_Available   As Boolean

Sub test()
Dim i As Long
Dim a As String

m_Available = (QueryPerformanceFrequency(m_Frequency) <> 0)
If Not m_Available Then
 Debug.Print "Performance Counter not available"
End If

For i = 1 To 100000 Step 1
    Cells(i, 1) = CStr(i)
Next i

QueryPerformanceCounter m_Start

For i = 1 To 100000 Step 1
' 下面四句中选一句执行
a = Range("A" & CStr(i)) 'Range read
a = Cells(i, 1) 'Cells read
Cells(i, 1) = a 'Cells write
Range("A" & CStr(i)) = a 'Range write
Next i

QueryPerformanceCounter m_Now

Elapsed = 1000 * (m_Now - m_Start) / m_Frequency
Debug.Print Elapsed
End Sub

测试结果

测试结果的时间单位是毫秒。

第几次测试Range readCells readRange writeCells write
11019.9720344.17596220.01595105.3813
21020.0355346.02926216.25305103.4524
31020.8382345.43716207.02305079.1922
41023.1144344.17906198.16075090.5974
51018.8067344.74826188.61595091.1590
61024.7189344.80356181.92725085.4331
71017.7546342.18496183.45365100.7955
81023.6095344.10976188.90055074.8064
91015.5275344.24376186.23555076.1584
101021.1321343.70726187.48485083.3936

/template/Home/Zkeys/PC/Static