- 締切済み
シートコピー後の編集
わからないことがあり、質問させていただきます。 マクロが組まれている大元のbookの sheet3 をコピーしたい場合、 worksheets("sheet3").copy これで別ブックに sheet3 のコピーだけができますよね? で、大元の Book の sheet2 のA列に、コピッたsheet3用の名前がそれぞれ入ってます。 これを、さっきコピったsheet3のセルA1に、持ってきたいです。 普通に sheet3.cell(1,1)=worksheets("sheet2").cells(n,1) (nはループでカウントアップしてくための変数です) と書くと、”インデックスが有効範囲にありません”とエラーがでます。 たぶん、コピッて別ブックができた時点で、アクティブではないからだと思うのですが。。 どのように対処すればよいでしょうか。 アドバイスお願いします。 わかりにくく、すみません
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kenpon24
- ベストアンサー率64% (66/102)
よく見ればここの左辺値がおかしいです。 sheet3.cell(1,1)=worksheets("sheet2").cells(n,1) とりあえずそのまま動くサンプルにしました Sub Test1() Dim wb As Workbook Dim n As Long Set wb = ThisWorkbook Worksheets("sheet3").Copy For n = 1 To 50 ActiveWorkbook.Worksheets("Sheet3").Cells(1, 1) = wb.Worksheets("sheet2").Cells(n, 1) Next n Set wb = Nothing End Sub Sub Test2() Dim Names() As String Dim Bottom As Long Dim n As Long Sheet2.Activate '最終行取得 Bottom = Range("A65536").End(xlUp).Row ReDim Names(1 To Bottom) 'ワークシート名の取得 For n = 1 To Bottom Names(n) = Range("A" & i) Next n Worksheets("sheet3").Copy For n = 1 To Bottom Worksheets("Sheet3").Cells(1, 1) = Names(n) Next n Erase Names End Sub
- kenpon24
- ベストアンサー率64% (66/102)
1、簡単だけど遅い方法 Book単位でセルを指定する Dim wb As Workbook Set wb = ThisWorkbook worksheets("sheet3").copy これで新規ブックがアクティブになることを利用し ActiveWorkbook.Sheet3.cell(1, 1) = wb.Worksheets("sheet2").Cells(n, 1) Set wb = Nothing 2、あらかじめ覚えておく方法 Dim Names() as string Dim Bottom as long sheet2.Activate '最終行取得 Bottom = Range("A65536").end(xlup).row Redim Names(1 to Bottom) 'ワークシート名の取得 For i = 1 To Bottom Names(i) = Range("A" & i) Next i worksheets("sheet3").copy sheet3.cell(1,1)=Names(n) Erase Names
補足
回答ありがとうございます。 上記どちらの方法もやってみましたが、ダメでした。。 大元のsheet2から名前をもってこようとすると、インデックスが有効範囲にありません とエラーになってしまいます。。