[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秒程度かかるようになったので、ソースを一から作り直し試行錯誤している時に、前述のことが判明したのでメモとして残すべきと思ったからです。






関連記事
[Excel]数式バーの空白欄が大きくなってシートが小さい

[Excel][VBA]個人的 逆引き関数リファレンス

[Excel][VBA] バッチ処理風

[Excel][VBA] クリップボードからテキストを取得

ExcelのVBAでエラーになった事例集