- ベストアンサー
VBAでシート名をコピー&ペーストする方法
- VBAを使用して、指定のファイルのシートからデータをコピーして別のファイルの指定のシートに貼り付ける方法を教えてください。
- コピーしたデータの数だけ、担当者名を指定の列に貼り付ける方法も教えてください。
- 現在のコピー元のファイルのシートのデータと、希望のフォーマットのコピー先のファイルのシートのデータを比較して異なる部分があった場合、どのように処理すればよいですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、また間違えてしまいました。 .Offset(, -1).Resize(j - 6, 1).Value = ws.Name '←この列 に変更してみて下さい。
その他の回答 (2)
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 投稿する時にちょっと修正したのですが漏れが有りました。 .Offset(, -1).Value = ws.Name '←この列 を .Offset(, -1).Resize(j - 6, 34).Value = ws.Name '←この列 に変更してみて下さい。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは t = ws2.Range("D" & Rows.Count).End(xlUp).Row n= ws2.Range("B" & Rows.Count).End(xlUp).Row って、同じ数値ですよね? Sub コピー() Dim ws2 As Worksheet Dim FP As Variant Dim i As Long, j As Long, t As Long Dim wb As Workbook Dim ws As Worksheet '選択したフォルダのパス名を取得 FP = Application.GetOpenFilename("Excel ファイル (*.xlsm),*.xlsm", MultiSelect:=True) For i = LBound(FP) To UBound(FP) Set ws2 = ThisWorkbook.Worksheets("Sheet2") '書きだすシート Set wb = Workbooks.Open(FP(i)) 'データーファイル Set ws = wb.Worksheets(1) t = ws2.Range("D" & Rows.Count).End(xlUp).Row j = wb.Worksheets(1).Range("D" & Rows.Count).End(xlUp).Row With ws2.Range("C" & t + 1) .Resize(j - 6, 34).Value _ = ws.Range(ws.Cells(7, 2), ws.Cells(j, 35)).Value .Offset(, -1).Value = ws.Name '←この列 End With Next i End Sub
補足
ありがとうございます。 tとnは、データーを貼り付けた後は、違うと思っていました。 たとえば、先にB7からE100までコピーして C7に貼り付けると、t=100になるのだと思っていました。 n=6 でも、この考え方が間違っていて、B列の担当者がうまく貼り付かなかったのだと思います。 教えていただいたコードを実行してみると、担当者の1セル(B7)と(B101)にだけ名前が貼りつきました。 上記の例でいうと、B7からB100まで担当者(Aファイルのシート名)が入るようにしたいのです。 (B101からは、Bファイルのシート名がデーターの数だけ) 再度おしえていただけないでしょうか?
お礼
希望通りのものができました。 ありがとうございました。 これからもよろしくお願いします。