(SIerを退職してからExcelはまったく触らなくなったが、wri.peのNotesに埋もれていてせっかくなので記事にしてみたw)
セルを参照するときの性能
' 処理時間計測用
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub test()
Dim time As Long
time = GetTickCount
Dim i As Long
For i = 1 To 300000
' なし
If Cells(i, 1) = Cells(i, 2) Then
' Valueで参照
If Cells(i, 1).Value = Cells(i, 2).Value Then
' Textで参照
If Cells(i, 1).Text = Cells(i, 2).Text Then
Debug.Print i
End If
Next
MsgBox (GetTickCount - time) / 1000 & "秒"
End Sub
Cells()、Cells().Value、Cells().Textの参照で、30万回ループさせ性能を計測してみた
参照方法 | 1回目 | 2回目 | 3回目 |
---|---|---|---|
なし | 13.172秒 | 13.172秒 | 13.188秒 |
Value | 13.172秒 | 13.109秒 | 13.219秒 |
Text | 25.500秒 | 25.375秒 | 25.891秒 |
なし(Cells)はVBA的にはCells.Valueとみなされているので、性能はかわらない。
ただしCells.Textは、ガクンと性能が落ちる。おそらくTextにパースしているからだろう。
大量のセルを参照する場合は、なし or Cells.Value を使うのが良いだろう。
可読性を考えるならCells.Valueがいい。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿