2014/11/30

【VBA】性能を求めるならWithステートメントはループの外で

VB系の言語がもつ割りと使用頻度が高いWithステートメント。
Withステートメントは使い方次第で性能(パフォーマンス)が上がったり、落ちてたりしまう。

ということで、Withステートメントを「使わなかった場合」、「ループの外側で使った場合」、「ループの内側で使った」場合の3つの性能をまとめる。



結果:ループの外側で使うのが一番速い


結果からいうと、ループの外側で使うのが一番速い。
正直、Withステートメントを使わないのが一番速いと思ってた。


Withステートメントを使わない

Dim i As Long
For i = 1 To 100000
    ThisWorkbook.Sheets(1).Cells(1, 1).Value = i
Next


Withステートメントをループの外側で使う

Dim i As Long
With ThisWorkbook.Sheets(1)
    For i = 1 To 100000
        .Cells(1, 1).Value = i
    Next
End With


Withステートメントをループの内側で使う

Dim i As Long
For i = 1 To 100000
    With ThisWorkbook.Sheets(1)
        .Cells(1, 1).Value = i
    End With
Next


結果

処理1回目2回目3回目平均
Withなし19.03218.98519.23219.083
ループ外18.61118.72018.68918.673
ループ内19.04818.93918.92318.970

※単位:秒



さいごに


10万回の処理で0.41秒しか違わないが、同一オブジェクトに複数回アクセスする場合は、Withステートメントを使うことをオススメする。
ただWithステートメントは使い方次第で可読性を著しく損なうことだけは覚えておいて欲しい。

たまに、どのWithに対応してるんだよ!ってのがあるからね。


以上

written by @bc_rikko

0 件のコメント :

コメントを投稿