Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10655 / 76734 ←次へ | 前へ→

【71625】Re:別ファイルを指定
回答  UO3  - 12/3/23(金) 14:32 -

引用なし
パスワード
   ▼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

4 hits

【71620】別ファイルを指定 G一朗 12/3/23(金) 13:23 質問
【71621】Re:別ファイルを指定 UO3 12/3/23(金) 13:49 発言
【71624】Re:別ファイルを指定 Abebobo 12/3/23(金) 14:15 発言
【71635】Re:別ファイルを指定 G一朗 12/3/23(金) 15:51 発言
【71636】Re:別ファイルを指定 UO3 12/3/23(金) 16:09 発言
【71625】Re:別ファイルを指定 UO3 12/3/23(金) 14:32 回答
【71627】Re:別ファイルを指定 UO3 12/3/23(金) 14:47 回答
【71637】Re:別ファイルを指定 G一朗 12/3/23(金) 16:09 発言

10655 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free