|
▼ドカ さん:
こんにちは
↑でアップしたTest3とTest4の比較は、見る人が見たらインチキだといわれるかも
しれません。
Dictionaryのほうは、5万件のデータをDictionaryに取り込むところがあるわけで、
それに対して検索は5けんだけなので。
しかし、少なくとも Test1,Test2 の比較においては、差はあまりないといえども
Dictionaryのほうが、「やや遅い」わけで
>「Dictionary」より速いコードを見たことがありません。
似たいすr、1つの答えになっているのではと思います。
で、Test3,Test4の比較ですが、TestGen2 の 後半のループの
For i = 1 To 5 これを For i = 1 To 1000
このように検索実行の数を 5件から1000件にしてみましょう。
それでも、Test4 のほうが、かなり早いことがわかると思います。
で、もう一つ、その早い Test4 と極めてよく似たTest5を。
これは、同じように見えるロジックなのに、めちゃめちゃ遅いです。
なので、Dictionary は、常に、そんなに悪くない結果が得られる。
一方、自作のアルゴリズムは、そのデータに適した処理ロジックか否かで
遅くなったり、早くなったりする。
いわゆる職人の腕の見せ所という側面がでてきます。
Sub Test5()
Dim c As Range
Dim myTime As Double
Dim myA As Range
Dim x As Long
myTime = Timer '計測開始
Application.ScreenUpdating = False
With Sheets("Sheet1")
With .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
Set myA = .Columns(1)
End With
For Each c In .Range("D1", .Range("D" & .Rows.Count).End(xlUp))
x = WorksheetFunction.Match(c.Value, myA, 0)
c.Offset(, 1).Value = .Range("B" & x).Value
Next
End With
Application.ScreenUpdating = True
MsgBox Timer - myTime
End Sub
|
|