久しぶりにVBAのプログラムを書いていて、ループの書き方で速度がものすごく違うのにびっくりしたのでメモ。
VBAでもDictionaryクラスを使うことができる。それをループで回すときの違い。
まず1万個のデータを作る。
このデータをワークシートのA列、B列に書き込むループを書く。
ループ1: インデックス変数を使う
ループ2:For Each を使う
ループ1とループ2の処理時間を計ってみると、驚くほど差があった。
1万個のデータをワークシートに書き込みをするのに2秒かかっているようで、ループ1のループを下記のように書き換えても60秒かかる。
ということで、DictionaryクラスではKeysメソッドは時間がかかるようだ。
VBAでプログラムを書くことは、もう、そんなにないだろうけど。
VBAでもDictionaryクラスを使うことができる。それをループで回すときの違い。
まず1万個のデータを作る。
Dim di As Dictionary
Set di = New Dictionary
For i = 1 To 10000
key = "ABC" & i
di(key) = i
Next
このデータをワークシートのA列、B列に書き込むループを書く。
ループ1: インデックス変数を使う
Dim ws As Worksheet
Set ws = Application.Worksheets("Sheet2")
For i = 0 To di.Count - 1
key = di.Keys(i)
ws.Cells(i + 1, "A") = key
Next
ループ2:For Each を使う
Dim ws As Worksheet
Set ws = Application.Worksheets("Sheet2")
i = 0
For Each v In di.Keys
i = i + 1
key = v
ws.Cells(i, "B") = key
Next
ループ1とループ2の処理時間を計ってみると、驚くほど差があった。
- ループ1 63秒
- ループ2 2秒
1万個のデータをワークシートに書き込みをするのに2秒かかっているようで、ループ1のループを下記のように書き換えても60秒かかる。
For i = 0 To di.Count - 1
key = di.Keys(i)
Next
ということで、DictionaryクラスではKeysメソッドは時間がかかるようだ。
VBAでプログラムを書くことは、もう、そんなにないだろうけど。
コメント
コメントを投稿