|
▼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に存在するという
仮定で言っていますが・・・。
取り急ぎ、思いついた事だけ記述しました。
|
|