2016/07/12

【VBA】セル参照の性能の違い(Value, Text, なし)

VBAで集計するマクロをつくる場合、セル参照の方法で性能を大幅に改善することができる。ということで効率的なセル参照の方法をまとめる。

(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().ValueCells().Textの参照で、30万回ループさせ性能を計測してみた

参照方法1回目2回目3回目
なし13.172秒13.172秒13.188秒
Value13.172秒13.109秒13.219秒
Text25.500秒25.375秒25.891秒

なし(Cells)はVBA的にはCells.Valueとみなされているので、性能はかわらない。
ただしCells.Textは、ガクンと性能が落ちる。おそらくTextにパースしているからだろう。

大量のセルを参照する場合は、なし or Cells.Value を使うのが良いだろう。
可読性を考えるならCells.Valueがいい。



以上

written by @bc_rikko

0 件のコメント :

コメントを投稿