| 
    
     |  | ▼かん さん: 
 こんにちは
 
 なぜかレスがつきませんね。
 
 例としてアップされたものは、あくまで例ですよね。
 このままなら、単に、BookX,Y,ZのC列をBookAにコピペすればいいことになりますから
 ロジックというほどのものじゃないわけですよね。
 
 なので、あくまで、BookX,Y,Z の A列に紐つけ番号があって、それは必ずしも連番じゃなく
 また、まとまってもいない。で、BookA の その紐付け番号該当行のC列に値を転記。
 
 また、必ずしも、行数は100行とか、そのなかで最初の33行がどうこうというわけでは
 ないんですよね。
 
 と、勝手に推測して。BookA,X,Y,Z が全て開かれているという前提で。
 
 Sub Sample()
 Dim dic As Object
 Dim v As Variant
 Dim i As Long
 
 Set dic = CreateObject("Scripting.Dictionary")
 
 Call SetDic(dic, Workbooks("BookX.xls").Sheets("Sheet1")) 'シート名は実際のものを
 Call SetDic(dic, Workbooks("BookY.xls").Sheets("Sheet1")) 'シート名は実際のものを
 Call SetDic(dic, Workbooks("BookZ.xls").Sheets("Sheet1")) 'シート名は実際のものを
 
 With Workbooks("BookA.xls").Worksheets("Sheet1")     'シート名は実際のものを
 v = .Range("A1", .Range("A" & .Rows.Count).End(xlUp)).Resize(, 3).Value
 For i = 1 To UBound(v, 1)
 v(i, 3) = dic(v(i, 1))
 Next
 .Range("C1").Resize(UBound(v, 1)).Value = WorksheetFunction.Index(v, 0, 3)
 End With
 
 Set dic = Nothing
 
 End Sub
 
 Private Sub SetDic(dic As Object, sh As Worksheet)
 Dim c As Range
 
 With sh
 For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
 dic(c.Value) = c.Offset(, 2).Value
 Next
 End With
 
 End Sub
 
 
 |  |