|
▼難問 さん:
>>A2の値は、"294072PG001"と"2040002PG001"で共通してない ように見えますが
>>C列が共通の項目なんでしょうか?
>
>B列とC列を結んだ値をA列にセットしています。
>サンプルであげているのはたまたま先頭行があっていないだけで
>2つのDBの各1万件の中には共通するものがあります。
Findで行う案を。
昔、作ったやつをちょっと手直ししただけなので上手く動作するか検証してません。
WorkSheets(1)、(2)のところを環境に合わせて編集。
Select Case i のあたりがデータをセットしているところになってます。
2つのBookを開いた状態で実行してみてください。
Option Explicit
Sub Find_Test()
Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim Ran1 As Range, Ran2 As Range
Dim R As Range
Dim Fi As Range
Dim i As Long, j As Long
'前準備
Set Ws1 = Worksheets(1) 'ここを Workbooks("xx.xls").WorkSheets("シート名")に変更
Set Ws2 = Worksheets(2) '↑と同じ感じ
'Ws1.Columns(1).Insert Shift:=xlToRight 'A列を挿入する必要があるならコメント解除
'Ws2.Columns(1).Insert Shift:=xlToRight
With Ws1
Set Ran1 = Range(.Range("B2"), .Range("B65536").End(xlUp)).Offset(, -1)
End With
With Ws2
Set Ran2 = Range(.Range("B2"), .Range("B65536").End(xlUp)).Offset(, -1)
End With
Ran1.Formula = "=CONCATENATE(B2,C2)"
Ran1.Value = Ran1.Value
Ran2.Formula = "=CONCATENATE(B2,C2)"
Ran2.Value = Ran2.Value
'データ転記
For Each R In Ran1.Cells
Set Fi = Ran2.Find(R.Value, , xlValues, xlWhole, , , False, False)
If Fi Is Nothing Then
R.Offset(, 7).Value = "該当なし" 'Ws2になげれば.offset(,7)H列に"該当なし"
Else
For i = 7 To 11 'A列のOffset(,7)H列から11のJ列までにWs2のデータを代入
Select Case i
Case 7: j = 2 ',7(H列)に,2(C列)を
Case 8: j = 3 ',8(I列)に,3(D列)を 以下略
Case 9: j = 6
Case 10: j = 8
Case 11: j = 23
Case Else: j = 0
End Select
If j <> 0 Then R.Offset(, i).Value = Fi.Offset(, j).Value
Next i
End If
Next R
'後処理
Set Ws1 = Nothing: Set Ws2 = Nothing
Set Ran1 = Nothing: Set Ran2 = Nothing: Set Fi = Nothing
End Sub
|
|