|    | 
     ▼G一朗 さん: 
 
質問の回答をもらっていない段階ですが、コード案を3つ。 
 
Sample1 は、アップされた方式、1行ごとにファイルを開いて転記するタイプ。 
ただし、この場合、2行目が、また同じファイルかもしれません。 
そうすると、同じブックを二度開こうとしてエラーになります。 
ですので、毎回開いて、保存して閉じるということをしなければいけません。 
 
Sample2 は 転記元ブックと転記先ブックが、それぞれ1つというタイプ。 
最初の行でのみ、転記元ブックと転記先ブックを開きます。 
 
さらに、Sample3は、Sample2の別案。開くファイルは転記先ブックのみです。 
 
Sub Sample1() 
  Dim c As Range 
  Dim d As Variant 
   
  Application.ScreenUpdating = False 
   
  With ThisWorkbook.Sheets("Sheet1") 
    For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) 
      Workbooks.Open c.Value 
      d = ActiveWorkbook.Sheets(c.Offset(, 1).Value).Range(c.Offset(, 2).Value).Value 
      ActiveWorkbook.Close False 
      Workbooks.Open c.Offset(, 3).Value 
      ActiveWorkbook.Sheets(c.Offset(, 4).Value).Range(c.Offset(, 5).Value).Value = d 
      ActiveWorkbook.Close True 
    Next 
  End With 
   
  Application.ScreenUpdating = True 
  MsgBox "処理が終了しました" 
   
   
End Sub 
 
Sub Sample2() 
  Dim c As Range 
  Dim d As Variant 
  Dim done As Boolean 
  Dim wb2 As Workbook, wb3 As Workbook 
   
  Application.ScreenUpdating = False 
   
  With ThisWorkbook.Sheets("Sheet1") 
    For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) 
      If Not done Then 
        Set wb2 = Workbooks.Open(c.Value) 
        Set wb3 = Workbooks.Open(c.Offset(, 3).Value) 
        done = True 
      End If 
       
      wb3.Sheets(c.Offset(, 4).Value).Range(c.Offset(, 5).Value).Value = _ 
          wb2.Sheets(c.Offset(, 1).Value).Range(c.Offset(, 2).Value).Value 
           
    Next 
  End With 
   
  wb2.Close False 
  wb3.Close True 
   
  Set wb2 = Nothing 
  Set wb3 = Nothing 
   
  Application.ScreenUpdating = True 
  MsgBox "処理が終了しました" 
   
End Sub 
 
Sub Sample3() 
  Dim c As Range 
  Dim d As Variant 
  Dim done As Boolean 
  Dim wb3 As Workbook 
  Dim myPath As String 
  Dim fName As String 
  Dim w As Variant 
   
  Application.ScreenUpdating = False 
   
  With ThisWorkbook.Sheets("Sheet1") 
    For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) 
      If Not done Then 
        Set wb3 = Workbooks.Open(c.Offset(, 3).Value) 
        w = Split(c.Value, "\") 
        fName = w(UBound(w)) 
        myPath = Left(c.Value, Len(c.Value) - Len(fName)) 
        done = True 
      End If 
      With wb3.Sheets(c.Offset(, 4).Value).Range(c.Offset(, 5).Value) 
        .Formula = "='" & myPath & "[" & fName & "]" & c.Offset(, 1).Value & "'!" & c.Offset(, 2).Value 
        .Value = .Value 
      End With 
       
    Next 
  End With 
   
  wb3.Close True 
   
  Set wb3 = Nothing 
   
  Application.ScreenUpdating = True 
  MsgBox "処理が終了しました" 
   
End Sub 
 
 | 
     
    
   |