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.032 | 18.985 | 19.232 | 19.083 |
ループ外 | 18.611 | 18.720 | 18.689 | 18.673 |
ループ内 | 19.048 | 18.939 | 18.923 | 18.970 |
※単位:秒
さいごに
10万回の処理で0.41秒しか違わないが、同一オブジェクトに複数回アクセスする場合は、Withステートメントを使うことをオススメする。
ただWithステートメントは使い方次第で可読性を著しく損なうことだけは覚えておいて欲しい。
たまに、どのWithに対応してるんだよ!ってのがあるからね。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿