[Excel][VBA]大量データの処理にかかる時間の測定事例
トップページへ
※あくまでも、当方の結果です。お使いのパソコン、WindowsやExcelのバージョンなどの環境によっても結果は異なります。また、当方は記事のみで読者様のいかなる不具合においても、一切の責任を負いません。
結果
たった1行の処理だけでも、回数が多いと時間がかかることがわかった。そのため、大量データの場合はif文などの制御文を使って、可能な限り不要な処理はしない方が短縮できると思われます。
テスト内容
・シートにCommandButtonを置く
・下記のコードをボタンのクリック時に記述。ボタンをクリックし、そのボタンが復帰する(へこんだボタンが元に戻る)までの経過時間を測定
・コードの赤字の部分を1000,2000,3000,4000,5000と変えた
・処理は水色の部分の一行のみで、それ以外はループのみ。
・その処理は「文字列型に改行マークをセットして、連結結合するだけ」です。
実施したコード
Private Sub CommandButton1_Click()
Dim i, i2 As Integer
Dim w_str As String
‘For i2 = 3 To 1000
For i2 = 3 To 5000
For i = 4 To 35
w_str = w_str + vbCrLf
Next
Next
End Sub
テストの結果
最大値 およその時間
1000 計測不可(すぐ終わるため)
2000 0.6秒
3000 1秒
4000 1.5秒
5000 10秒前後
改善したコード
if文(オレンジ色)を加え「偶数の時だけ処理する」と変更したら、10秒前後→0.9秒に短縮できました。
Private Sub CommandButton1_Click()
Dim i, i2 As Integer
Dim w_str As String
For i2 = 3 To 5000
For i = 4 To 35
If i Mod 2 = 0 Then
w_str = w_str + vbCrLf
End If
Next
Next
End Sub
感想
if文などの制御文を入れると、かえって遅くなるのでは?と思っていましたが、この事例では「逆に早い」ことがわかりました。
ただし、その効果は「件数が多い大容量のデータ」に限られ「テストの結果」でおわかりの通り、4000件以下では大差がないと個人的に思います。
記述の動機
3万件の時10秒かかっていた処理が、5万件で20秒程度かかるようになったので、ソースを一から作り直し試行錯誤している時に、前述のことが判明したのでメモとして残すべきと思ったからです。