• 締切済み

シートコピー後の編集

わからないことがあり、質問させていただきます。 マクロが組まれている大元のbookの sheet3 をコピーしたい場合、 worksheets("sheet3").copy   これで別ブックに sheet3 のコピーだけができますよね? で、大元の Book の sheet2 のA列に、コピッたsheet3用の名前がそれぞれ入ってます。 これを、さっきコピったsheet3のセルA1に、持ってきたいです。 普通に sheet3.cell(1,1)=worksheets("sheet2").cells(n,1) (nはループでカウントアップしてくための変数です) と書くと、”インデックスが有効範囲にありません”とエラーがでます。 たぶん、コピッて別ブックができた時点で、アクティブではないからだと思うのですが。。 どのように対処すればよいでしょうか。 アドバイスお願いします。 わかりにくく、すみません

みんなの回答

  • kenpon24
  • ベストアンサー率64% (66/102)
回答No.2

よく見ればここの左辺値がおかしいです。 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)
回答No.1

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

p_cer
質問者

補足

回答ありがとうございます。 上記どちらの方法もやってみましたが、ダメでした。。 大元のsheet2から名前をもってこようとすると、インデックスが有効範囲にありません とエラーになってしまいます。。

関連するQ&A

専門家に質問してみよう