| 
    
     |  | ▼kawata さん: こんにちは。
 これから、出かけなければならないので、思いついた事だけですが・・・。
 >
 >
 >・同一シート上です
 >・A列のコードは約6000件昇順重複なし
 >・F列のコードは約25000件昇順重複なし
 > (実際のコードは12桁です)
 >
 >で、A列のコードの件数・金額をF列で検索してG列H列のデータを
 >それぞれC列D列に書き込みたいのですが・・・。
 >あれこれ思案して、以下のようなコードを書いてみました。
 >
 >Sub data_picup()
 >Dim d2sheet As Worksheet
 >Dim myRange1 As Range, myRange2 As Range
 >Dim c_data, d_data
 >Dim start
 >  start = Timer
 >  Set d2sheet = Sheets("data2")
 >  With d2sheet
 >    Set myRange1 = .Range("a2:d" & .Range("a65536").End(xlUp).Row)
 >    Set myRange2 = .Range("f2:h" & .Range("f65536").End(xlUp).Row)
 >    .Columns("c:d").Clear
 >    d_data = myRange1.Value
 >    c_data = myRange2.Value
 '    ここから・・・・
 >    x = 1
 >    For i = 1 To UBound(d_data)
 >      chk = d_data(i, 1)
 >      For j = x To UBound(c_data)
 >        If c_data(j, 1) = chk Then
 >          d_data(i, 3) = c_data(j, 2)
 >          d_data(i, 4) = c_data(j, 3)
 >          x = j
 >          Exit For
 >        End If
 >      Next
 '    ここまでで同じコードか否かのチェックを順次してますよね?
 '    コードは、ちょっとだけ複雑になるけど、
 '    昇順に整列されてあるということなので、
 '    二分検索法のロジックを使用すると順次検索より速いです。
 '    「二分検索法」でネットで検索してみて下さい。
 '    もっとも、VBAをやりだしてからこういうロジックを作った事ないですが・・。
 >    Next
 >    myRange1.Value = d_data
 >  End With
 >  Set myRange1 = Nothing
 >  Set myRange2 = Nothing
 >  Set d2sheet = Nothing
 >  Debug.Print Timer - start
 >
 >End Sub
 
 
 後は、DBから抜き取っているようなので、その際に検索してしまう方法もあります。
 SQL文にJOIN句というのがありますから、これもNETで検索してみて下さい。
 ただし、
 >   A   B   C   D   E   F   G   H
 >1 コード 名称  台数 金額     コード 台数 金額
 >2  a01 あああ            a01   1  500
 >3  a04 いいい            a02   1  500
 >4  a05 ううう            a03   1  500
 >5  a09 えええ            a04   1  500
 >
 のA列からB列のテーブルとF列からH列のテーブルがDBに存在するという
 仮定で言っていますが・・・。
 
 取り急ぎ、思いついた事だけ記述しました。
 
 |  |