|    | 
     ▼ドカ さん: 
 
こんにちは 
 
↑でアップした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 
 
 | 
     
    
   |